如何查找适用于 AMI 的实例类型列表
How to find the list of applicable instance types for an AMI
使用了来自 ap-south-1
区域 http://cloud-images.ubuntu.com/locator/ec2/
的 ami-0fd3c3c68a2a8066f
,但无法针对此使用 t2.micro 实例类型。
Error: Error launching source instance: InvalidParameterValue: The architecture 'x86_64' of the specified instance type does not match the architecture 'arm64' of the specified AMI. Specify an instance type and an AMI that have matching architectures, and try again. You can use 'describe-instance-types' or 'describe-images' to discover the architecture of the instance type or AMI.
如何在尝试使用 terraform 启动实例之前找到适用于 AMI 的实例类型列表
使用 AWS CLI,您可以使用 describe-instance-types:
aws ec2 describe-instance-types --filters Name=processor-info.supported-architecture,Values=arm64 --query "InstanceTypes[*].InstanceType" --output text
例如输出:
r6gd.large m6g.metal m6gd.medium c6gd.metal m6gd.12xlarge c6g.16xlarge r6g.large r6gd.medium r6g.8xlarge m6gd.metal r6gd.xlarge t4g.medium r6gd.2xlarge m6gd.xlarge c6g.xlarge c6g.12xlarge r6g.medium a1.medium m6g.xlarge m6gd.4xlarge t4g.nano r6g.16xlarge
t4g.2xlarge m6g.12xlarge r6gd.8xlarge a1.large m6g.4xlarge c6gd.16xlarge t4g.xlarge c6g.large m6g.large c6gd.xlarge a1.metal m6g.8xlarge m6gd.16xlarge a1.xlarge r6g.12xlarge r6gd.metal t4g.micro r6g.4xlarge t4g.small a1.2xlarge r6gd.4xlarge t4g.large
m6g.16xlarge c6g.4xlarge m6gd.2xlarge c6gd.medium c6gd.8xlarge r6gd.16xlarge m6gd.8xlarge c6g.2xlarge r6gd.12xlarge a1.4xlarge c6g.8xlarge r6g.2xlarge m6g.2xlarge m6g.medium c6gd.large c6g.medium c6gd.2xlarge r6g.metal c6gd.4xlarge m6gd.large r6g.xlarge
我在 TF 中没有看到任何类似的东西。在最坏的情况下,您可以为此定义 external 数据源。
更新
没有一次调用获取基于ami的实例类型列表。必须分两步完成。
- 使用给定 AMI 的 aws_ami data source to get architecture。
- 使用 describe-instance-types 获取该体系结构的实例类型。
我发现 this 文章很有用,因为它解释了如果您使用一种新的实例类型(例如 t4g),它会使用 ARM64 架构而不是默认的 x86_64。所以需要指定机器镜像才能使用ARM64。
我的示例是我正在创建的堡垒主机 (python):
self.bastion = ec2.BastionHostLinux(
self,
"BastionHostEC2",
vpc=vpc,
instance_name=f"{deployment_name} - Bastion Host",
instance_type=ec2.InstanceType("t4g.micro"),
machine_image=ec2.AmazonLinuxImage(cpu_type=ec2.AmazonLinuxCpuType.ARM_64),
)
使用了来自 ap-south-1
区域 http://cloud-images.ubuntu.com/locator/ec2/
的 ami-0fd3c3c68a2a8066f
,但无法针对此使用 t2.micro 实例类型。
Error: Error launching source instance: InvalidParameterValue: The architecture 'x86_64' of the specified instance type does not match the architecture 'arm64' of the specified AMI. Specify an instance type and an AMI that have matching architectures, and try again. You can use 'describe-instance-types' or 'describe-images' to discover the architecture of the instance type or AMI.
如何在尝试使用 terraform 启动实例之前找到适用于 AMI 的实例类型列表
使用 AWS CLI,您可以使用 describe-instance-types:
aws ec2 describe-instance-types --filters Name=processor-info.supported-architecture,Values=arm64 --query "InstanceTypes[*].InstanceType" --output text
例如输出:
r6gd.large m6g.metal m6gd.medium c6gd.metal m6gd.12xlarge c6g.16xlarge r6g.large r6gd.medium r6g.8xlarge m6gd.metal r6gd.xlarge t4g.medium r6gd.2xlarge m6gd.xlarge c6g.xlarge c6g.12xlarge r6g.medium a1.medium m6g.xlarge m6gd.4xlarge t4g.nano r6g.16xlarge
t4g.2xlarge m6g.12xlarge r6gd.8xlarge a1.large m6g.4xlarge c6gd.16xlarge t4g.xlarge c6g.large m6g.large c6gd.xlarge a1.metal m6g.8xlarge m6gd.16xlarge a1.xlarge r6g.12xlarge r6gd.metal t4g.micro r6g.4xlarge t4g.small a1.2xlarge r6gd.4xlarge t4g.large
m6g.16xlarge c6g.4xlarge m6gd.2xlarge c6gd.medium c6gd.8xlarge r6gd.16xlarge m6gd.8xlarge c6g.2xlarge r6gd.12xlarge a1.4xlarge c6g.8xlarge r6g.2xlarge m6g.2xlarge m6g.medium c6gd.large c6g.medium c6gd.2xlarge r6g.metal c6gd.4xlarge m6gd.large r6g.xlarge
我在 TF 中没有看到任何类似的东西。在最坏的情况下,您可以为此定义 external 数据源。
更新
没有一次调用获取基于ami的实例类型列表。必须分两步完成。
- 使用给定 AMI 的 aws_ami data source to get architecture。
- 使用 describe-instance-types 获取该体系结构的实例类型。
我发现 this 文章很有用,因为它解释了如果您使用一种新的实例类型(例如 t4g),它会使用 ARM64 架构而不是默认的 x86_64。所以需要指定机器镜像才能使用ARM64。
我的示例是我正在创建的堡垒主机 (python):
self.bastion = ec2.BastionHostLinux(
self,
"BastionHostEC2",
vpc=vpc,
instance_name=f"{deployment_name} - Bastion Host",
instance_type=ec2.InstanceType("t4g.micro"),
machine_image=ec2.AmazonLinuxImage(cpu_type=ec2.AmazonLinuxCpuType.ARM_64),
)