You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将自定义AMI name写入Packer manifest并解决属性不存在报错

报错根因

你遇到的报错是因为在build块的上下文中,source对象仅支持访问source.name和source.type两个属性,source块内部定义的ami_name属于构建器私有配置,无法直接通过source对象引用。

解决方案

最优方案是通过局部值(local)统一管理AMI名称,避免两处重复写相同逻辑导致的取值不一致问题:

# 新增局部值块,统一管理AMI名称生成逻辑
locals {
  generated_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"
  }
  most_recent = true
  region      = "us-east-1"
}
source "amazon-ebs" "ui" {
  ami_name      = local.generated_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.generated_ami_name
    }
  }
}

这种写法还能避免两次调用timestamp()生成不同时间戳,导致source里定义的AMI名称和manifest里记录的名称不一致的问题。

补充说明

如果你的需求只是获取最终构建生成的AMI名称,不需要单独把值存入custom_data,manifest后处理器默认生成的JSON文件中已经包含artifact_name字段,该字段的值就是最终创建的AMI的名称,你可以直接从输出的manifest.json中读取该字段使用。

内容的提问来源于stack exchange,提问作者user1584120

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:27:05