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

能否通过CloudFormation新栈(B)引用旧栈(A)的实例ID创建AMI备份?

可以通过CloudFormation栈(B)引用栈(A)的EC2实例ID创建AMI备份

完全可以实现,核心是利用CloudFormation的跨栈引用机制,结合AWS::EC2::Image资源生成AMI,步骤如下:

1. 让栈(A)暴露EC2实例ID作为可导出的输出值

首先修改栈(A)的CloudFormation模板,将5台EC2实例的ID添加到Outputs部分并配置导出,这样栈(B)才能引用这些值。

示例栈(A)的Outputs片段:

Outputs:
  StackAEC2InstanceIds:
    Description: 栈(A)中5台EC2实例的ID列表
    Value: !Join [",", !Ref EC2Instance1, !Ref EC2Instance2, !Ref EC2Instance3, !Ref EC2Instance4, !Ref EC2Instance5]
    Export:
      Name: StackA-EC2-Instance-Ids

注:如果栈(A)是通过Auto Scaling Group创建的EC2实例,需要借助Lambda自定义资源动态获取实例ID列表后再导出,因为ASG的实例会动态变化。

2. 在栈(B)中引用实例ID并创建AMI

在栈(B)的模板中,使用Fn::ImportValue导入栈(A)导出的实例ID列表,通过!Split和!Select拆分获取单个实例ID,再用AWS::EC2::Image资源创建对应AMI。

示例栈(B)的资源片段:

Resources:
  Instance1AMI:
    Type: AWS::EC2::Image
    Properties:
      Description: 栈(A)中EC2实例1的备份AMI
      InstanceId: !Select [0, !Split [",", !ImportValue StackA-EC2-Instance-Ids]]
      Name: StackA-Instance1-Backup-!Ref AWS::StackName

  Instance2AMI:
    Type: AWS::EC2::Image
    Properties:
      Description: 栈(A)中EC2实例2的备份AMI
      InstanceId: !Select [1, !Split [",", !ImportValue StackA-EC2-Instance-Ids]]
      Name: StackA-Instance2-Backup-!Ref AWS::StackName

  Instance3AMI:
    Type: AWS::EC2::Image
    Properties:
      Description: 栈(A)中EC2实例3的备份AMI
      InstanceId: !Select [2, !Split [",", !ImportValue StackA-EC2-Instance-Ids]]
      Name: StackA-Instance3-Backup-!Ref AWS::StackName

  Instance4AMI:
    Type: AWS::EC2::Image
    Properties:
      Description: 栈(A)中EC2实例4的备份AMI
      InstanceId: !Select [3, !Split [",", !ImportValue StackA-EC2-Instance-Ids]]
      Name: StackA-Instance4-Backup-!Ref AWS::StackName

  Instance5AMI:
    Type: AWS::EC2::Image
    Properties:
      Description: 栈(A)中EC2实例5的备份AMI
      InstanceId: !Select [4, !Split [",", !ImportValue StackA-EC2-Instance-Ids]]
      Name: StackA-Instance5-Backup-!Ref AWS::StackName

关键注意事项

  • 栈(A)和栈(B)必须处于同一AWS区域,且使用同一AWS账户(跨账户引用需额外配置权限)
  • 执行栈(B)的IAM角色需要具备ec2:CreateImage、ec2:DescribeInstances等权限
  • 创建AMI时,对应EC2实例需处于running或stopped状态(stopped状态创建速度更快)
  • 若栈(A)的EC2实例有动态变化的可能(如ASG),需用Lambda自定义资源实时获取实例ID,避免引用过时的ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:59:19