如何将AMI名称放入包装舱单



我想将AMI名称放入打包器清单中。我知道如何获得这个AMI id,但它的名称不同。我:

data "amazon-ami" "ubuntu" {
filters = {
name = "ubuntu-minimal/images/hvm-ssd/ubuntu-focal-20.04-amd64-minimal-*"
root-device-type    = "ebs"
virtualization-type = "hvm"
}
most_recent = true
region      = "us-east-1"
}
source "amazon-ebs" "ui" {
ami_name      = "my-ami-${formatdate("YYYY-MM-DD-hhmmss", timestamp())}"
instance_type = "t3.small"
region        = "us-east-1"
source_ami    = "${data.amazon-ami.ubuntu.id}"
ssh_pty       = true
ssh_username  = "ubuntu"
}
build {
sources = ["source.amazon-ebs.ui"]

post-processor "manifest" {
output = "manifest.json"
strip_path = true
custom_data = {
version = "${source.ami_name}"
}
}
}

我得到的错误是Unsupported attribute; This object does not have an attribute named "ami_name".根据这个:https://www.packer.io/docs/templates/hcl_templates/blocks/source,看起来我可以访问的唯一属性是名称和类型。我怎样才能把ami_name装进舱单?

我认为你不能得到这样的名字但你可以把它放在本地然后在你的构建器和清单中使用它,像这样:

locals { 
my_ami_name = "my-ami-${formatdate("YYYY-MM-DD-hhmmss", timestamp())}"
}
data "amazon-ami" "ubuntu" {
filters = {
name = "ubuntu-minimal/images/hvm-ssd/ubuntu-focal-20.04-amd64-minimal-*"
root-device-type    = "ebs"
virtualization-type = "hvm"
}
owners      = ["099720109477"]
most_recent = true
region      = "us-east-1"
}
source "amazon-ebs" "ui" {
ami_name      = local.my_ami_name
instance_type = "t3.small"
region        = "us-east-1"
source_ami    = "${data.amazon-ami.ubuntu.id}"
ssh_pty       = true
ssh_username  = "ubuntu"
}
build {
sources = ["source.amazon-ebs.ui"]

post-processor "manifest" {
output = "manifest.json"
strip_path = true
custom_data = {
version = local.my_ami_name
}
}
}

最新更新