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

如何通过Terraform跨账号复制Packer创建的AWS AMI并保留标签?

使用Terraform跨账号复制AWS AMI并保留原标签

前提条件

  • 源AMI位于孟买区域(ap-south-1),所属账号需授权目标账号拥有该AMI的复制权限
  • 目标账号需配置Terraform AWS Provider,有权限在海德拉巴区域(ap-south-2)创建AMI

步骤1:源账号授权目标账号复制AMI

在源账号的Terraform配置中,添加以下资源为目标账号授予复制权限:

resource "aws_ami_permission" "allow_cross_account_copy" {
  image_id   = "ami-xxxxxxxxx"  # 替换为你的源AMI ID
  account_id = "123456789012"   # 替换为目标AWS账号ID
  actions    = ["copy"]
}

步骤2:目标账号配置AMI复制并保留原标签

在目标账号的Terraform配置中,先通过数据源获取源AMI的标签信息,再执行复制操作并复用原标签:

# 获取源AMI的元数据(包括标签)
data "aws_ami" "source_mumbai_ami" {
  owners      = ["987654321098"]  # 替换为源AWS账号ID
  most_recent = true

  filter {
    name   = "image-id"
    values = ["ami-xxxxxxxxx"]     # 替换为源AMI ID
  }
}

# 复制AMI到ap-south-2区域,保留原标签并添加自定义标签
resource "aws_ami_copy" "to_hyderabad" {
  name              = "${data.aws_ami.source_mumbai_ami.name}-copied-ap-south-2"
  description       = "Cross-account copy of ${data.aws_ami.source_mumbai_ami.id} from ap-south-1"
  source_ami_id     = data.aws_ami.source_mumbai_ami.id
  source_ami_region = "ap-south-1"
  target_region     = "ap-south-2"

  # 合并原标签与自定义标签,保留所有源标签
  tags = merge(
    data.aws_ami.source_mumbai_ami.tags,
    {
      "Copied-From-Region" = "ap-south-1"
      "Copy-Timestamp"     = timestamp()
    }
  )
}

关键说明

  • 使用data "aws_ami"可以自动拉取源AMI的所有标签,无需手动重复配置
  • merge函数将源标签与新增的自定义标签合并,确保原标签完整保留
  • 如果仅需共享AMI(不复制),可将源账号的aws_ami_permission中actions改为["describe", "launch"],但复制后的AMI独立于源AMI,更适合长期使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:25:57