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

如何为EC2 Image Builder生成的AMI添加动态包版本标签?

解决EC2 Image Builder动态设置AMI标签(基于CodeArtifact触发版本)

核心思路

通过EventBridge捕获CodeArtifact的版本推送事件,提取目标软件包版本,将其作为参数传递给Image Builder的构建任务,最终在生成的AMI上打上对应业务标签。

具体步骤

1. 配置EventBridge规则捕获CodeArtifact事件

  • 创建EventBridge规则,事件模式匹配CodeArtifact的CreatePackageVersion事件:
    {
      "source": ["aws.codeartifact"],
      "detail-type": ["CodeArtifact Package Version Created"],
      "detail": {
        "domainName": ["你的CodeArtifact域名"],
        "repositoryName": ["你的仓库名"],
        "packageName": ["目标软件包名"] // 可选,仅限定特定包触发构建
      }
    }
    
  • 为规则添加目标,选择EC2 Image Builder的StartImageBuild API,配置Input Transformer:
    • 输入路径:{"PackageVersion": "$.detail.packageVersion", "PackageName": "$.detail.packageName"}
    • 输入模板:
      {
        "imageBuildRecipeArn": "你的镜像配方ARN",
        "imageRecipeOverride": {
          "tags": {
            "Package-Name": "<PackageName>",
            "Package-Version": "<PackageVersion>"
          }
        }
      }
      
    触发构建时,该配置会直接覆盖镜像配方的标签,将软件包版本传入。

2. 配置对应权限

  • 确保EventBridge的执行角色拥有imagebuilder:StartImageBuild权限;
  • 若选择后续通过组件脚本打标签,需为Image Builder的服务角色添加ec2:CreateTags权限。

3. 备选方案:通过构建组件脚本动态打标签

如果需要更灵活的标签逻辑,可在镜像配方的构建组件中添加脚本:

  • 在组件的build阶段添加以下命令(需提前传递PACKAGE_VERSION环境变量):
    # Image Builder会自动注入当前构建的AMI ID到环境变量
    AMI_ID=$AWS_IMAGE_BUILDER_AMI_ID
    # 为AMI打业务标签
    aws ec2 create-tags --resources $AMI_ID --tags Key=Package-Version,Value=$PACKAGE_VERSION
    
  • 此时需调整EventBridge的Input Transformer,传递环境变量:
    {
      "imageBuildRecipeArn": "你的镜像配方ARN",
      "environmentVariablesOverride": [
        {
          "name": "PACKAGE_VERSION",
          "value": "<PackageVersion>"
        }
      ]
    }
    

验证

推送一个新版本到CodeArtifact,触发Image Builder构建后,在EC2控制台查看生成的AMI,确认标签已正确设置为对应软件包版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:57:31