基于 AWS 区域的不同 AMI?

Different AMI based on AWS Region?

AWS AMI 是否因地区而异?
例如,如果我尝试在法兰克福启动一个 EC2 实例,我得到了这个 AMI:

Amazon Linux AMI 2015.03 (HVM), SSD Volume Type - *ami-a8221fb5*

在俄勒冈时:

Amazon Linux AMI 2015.03 (HVM), SSD Volume Type - *ami-e7527ed7*

注意不同的 ami 版本:ami-a8221fb5ami-e7527ed7.
有什么理由吗?

以及如何构建无需更改 ami 即可在法兰克福或俄勒冈启动的 cloudformation 模板?

您将使用参数化值,例如在这个非常好的示例中:

You can use an input parameter to refer to a specific value in a map by using the Fn::FindInMap function. For example, suppose you have a list of regions that map to a specific AMI. You can select the AMI that your stack uses by specifying a region parameter when you create the stack.

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-input-conditional-parameters.html

不同地区的不同 AMI 的原因是您必须在该地区拥有可用的实际映像才能启动实例。 (如果你不这样做,你基本上必须将它从它被掌握的地方转移——远距离区域之间的转移需要很长时间——所以启动新的 ec2 实例需要很长时间)。

理论上,我猜你可以在多个区域使用相同的图像 ID,但如果绑定到 ID 的图像不相同,那只会让人感到困惑。更不用说您可能不想将其推送到所有区域(区域间流量不是免费的)。

ec2 在这里做出的每个区域具有不同 ID 的选择为您提供了最大程度的控制和灵活性,而无需付出高昂的代价。

对于通过 cloudformation 启动机器,您绝对可以按照 E.J 的方式对其进行参数化。布伦南描述了它。

我刚刚推出了一个工具来帮助为多个区域创建映射(通过为给定源 AMI 图像 ID 和区域的图像查找相应的 AMI 图像 ID)。它是用 boto3 编写的。您可能会发现它很有用。 https://github.com/codesolid/ami-lookup.