我在我的一个区域中设置了一个CloudFormer实例。我为我的一个实例(包括VPC、安全组…)生成了一个模板,然后我试图通过确保将可用区域切换到新区域(us-east-1a->us-west-1a等)来在另一个区域创建堆栈,但当它试图创建EC2实例时,我遇到了以下错误:图像id"[ami-xxxxxxxxx]"不存在。
我需要先手动将图像复制到其他区域吗?有没有一种方法可以使用cloudformer生成的模板来实现这一点?模板将如何确定这个AMI的来源?
谢谢你,
您必须将AMI复制到要使用它的每个区域。此功能在AWS控制台中可用。选择AMI并显示将其复制到另一个区域的选项。请参阅AWS提供的说明。
没有办法让模板发现某个区域中没有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"}
}
},
mappings部分通常位于Parameters部分之后。
然后你参考你的ami如下:
"ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" },
{ "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] },