CloudFormer生成的模板在其他区域中运行时失败

时间:2014-10-22 13:41:26

标签: amazon-web-services amazon-cloudformation

我在其中一个地区设置了CloudFormer实例。我为我的一个实例生成了一个模板(包括VPC,安全组......)然后我尝试通过确保将可用区切换到新区域(us-east-1a)来创建另一个区域的堆栈 - > us-west-1a等),但在尝试创建EC2实例时遇到以下错误: 图片ID'[ami-xxxxxxxx]'不存在。

我是否需要先将图像手动复制到其他区域?有没有办法使用cloudformer生成的模板执行此操作?模板将如何确定AMI的来源?

谢谢,

1 个答案:

答案 0 :(得分:1)

您必须将AMI复制到您要使用它的每个区域。 AWS控制台中提供了此功能。选择AMI并显示将其复制到另一个区域的选项。请参阅AWS provided instructions

没有办法让模板发现区域中没有AMI,然后将ami复制到所需的区域。

要指定哪些AMI与哪些区域相关,您应指定映射(来自AWS Cloudformation示例模板):

"Mappings" : {
"AWSInstanceType2Arch" : {
  "m1.small"   : { "Arch" : "64" },
  "m1.medium"  : { "Arch" : "64" },
  "m1.large"   : { "Arch" : "64" },
  "m1.xlarge"  : { "Arch" : "64" },
  "m2.xlarge"  : { "Arch" : "64" },
  "m2.2xlarge" : { "Arch" : "64" },
  "m2.4xlarge" : { "Arch" : "64" },
  "c1.medium"  : { "Arch" : "64" },
  "c1.xlarge"  : { "Arch" : "64" }
},
"AWSRegionArch2AMI" : {
  "us-east-1"      : {"64" : "ami-7614ac1e"},
  "us-west-1"      : {"64" : "ami-2f43566a"},
  "us-west-2"      : {"64" : "ami-e5f7bbd5"},
  "eu-west-1"      : {"64" : "ami-32228e45"},
  "ap-southeast-1" : {"64" : "ami-c6634294"},
  "ap-southeast-2" : {"64" : "ami-995c31a3"},
  "ap-northeast-1" : {"64" : "ami-73d0e672"},
  "sa-east-1"      : {"64" : "ami-77a1156a"}
}

},

映射部分通常位于“参数”部分之后。

然后你引用你的ami如下:

"ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" },
                  { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] },