Terraform:启动源实例时出错:InvalidAMIID.Malformed

Luk*_*ski 6 amazon-web-services terraform terraform-provider-aws

通过terraform 教程,我偶然发现了这个错误。

Error: Error launching source instance: InvalidAMIID.NotFound: The image id '[ami-830c94e3]' does not exist
    status code: 400, request id: 4c3e0252-c3a5-471e-8b57-3f6e349628af
Run Code Online (Sandbox Code Playgroud)

这是我的代码。我所做的唯一变化是区域从us-west-2eu-central-1

provider "aws" {
  profile = "default"
  region = "eu-central-1"
}

resource "aws_instance" "example" {
  ami = "ami-830c94e3"
  instance_type = "t2.micro"
}
Run Code Online (Sandbox Code Playgroud)

yda*_*coR 9

您应该考虑使用aws_ami数据源,而不是硬编码 AMI ID 。

这使您可以更轻松地指定所需的 AMI 类型并让 Terraform 自动使用该 AMI,包括在有与您的条件匹配的新 AMI 可用时让它自动更新正在使用的 AMI 的选项。它还可以更轻松地在不同区域使用相同的 AMI 进行管理,因为 AMI ID 对于复制到的每个区域都是不同的。

aws_instance资源的文档具有使用最新的Ubuntu 20.04 AMI由Canonical在该地区发布的一个很好的例子:

data "aws_ami" "ubuntu" {
  most_recent = true

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }

  owners = ["099720109477"] # Canonical
}

resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t3.micro"

  tags = {
    Name = "HelloWorld"
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您在不同区域运行以下命令,它将自动为该区域使用正确的 Ubuntu 20.04 AMI。当 Canonical 发布更新的 Ubuntu 20.04 AMI 时,它还将使用最新的 AMI 重新创建实例。


Luk*_*ski 8

这很简单。显然,AMI每个地区的亚马逊图片都是不同的。我不得不复制AMI我所在地区的图像。例如AMI-07dfba995513840b5是用于ID红帽企业Linux 8(HVM),SSD卷类型EU-中央-1区。转到 AWS 控制台,从所有服务列表中单击 EC2,然后单击启动实例并找到AMI您感兴趣的图像。