【发布时间】:2020-07-29 23:33:11
【问题描述】:
我正在尝试在 python 中构建一个函数,以在特定区域创建一个新的 ec2 实例。 为了使该功能正常工作,我需要指定这个新实例的 AMI。 问题是同一个 AMI(例如 Amazon Linux)在不同区域有不同的 id,我不能在另一个区域实例中使用一个区域的图像。
我不明白如何在这个特定区域获得这个 AMI id
def create_instance(region):
ec2 = boto3.resource('ec2', region)
instances = ec2.create_instances(InstanceType='t2.micro',
MinCount=1, MaxCount=1,
ImageId='AMI-id') # What do I put here?
目前,除了它是 Linux 和免费层这一事实之外,AMI 是什么并不重要,因此搜索特定的已知免费层 Linux AMI 可能会起作用。
我知道您可以使用 describe_images() 函数获取所有 AMI,但我如何仅过滤那些 Linux(可能是特定版本)和 免费层
boto3.client('ec2').describe_images(Filters["""What do I write here to get only linux free-tier AMI"""])
【问题讨论】:
-
TBH,我会避免这种情况。这里最常见的模式是只有一个静态字典映射区域:AMI
-
这是迄今为止我能找到的唯一解决方案,只是看起来有点“硬编码”,我认为必须有一个更优雅和通用的解决方案。
-
甚至 AWS 的官方 cloudformation 示例都使用静态硬编码映射
-
其实现在推荐使用Systems Manager Parameter Store来获取映射。见:Query for the latest Amazon Linux AMI IDs using AWS Systems Manager Parameter Store | AWS Compute Blog
标签: python amazon-web-services amazon-ec2 boto3 amazon-ami