AWS EC2 AMI 跨账号备份解决方案文档

  1. 概述

本解决方案旨在通过 AWS Lambda 和 EventBridge 自动化 EC2 实例的 AMI(Amazon Machine Image)跨账号备份。该过程包括在源账户中创建 AMI、共享 AMI 和快照,以及在目标账户中复制 AMI。

2. 解决方案架构

本解决方案的架构如下:

  • 源账户:创建 AMI 并将其共享到目标账户。
  • 目标账户:复制共享的 AMI。

3. 前提条件

  • 您必须拥有 AWS 账户,并在 AWS 中国区中创建 EC2 实例。
  • 确保您在源账户和目标账户中有足够的权限,能够执行以下操作:
    • EC2:创建 AMI、共享 AMI 和快照、描述 AMI 和快照。
    • Lambda:创建和管理 Lambda 函数。
    • EventBridge:创建和管理事件规则。

4. 步骤详细说明

4.1 创建源账户的 Lambda 函数

  1. 登录到源账户

  2. 创建 Lambda 函数

    • 在控制台中,选择 "服务" ,然后选择 "Lambda"

    • 点击 "创建函数"

    • 选择 "从头开始创建" ,输入函数名称(例如 CreateAndShareAMI)。

    • 选择运行时(推荐使用 Python 3.x)。

    • 配置 "权限" ,选择 "使用现有角色",并选择一个具有适当权限的 IAM 角色,或者创建一个新角色,并附加以下权限策略:

      java 复制代码
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "ec2:CreateImage",
              "ec2:ModifyImageAttribute",
              "ec2:DescribeImages",
              "ec2:DescribeSnapshots",
              "ec2:ModifySnapshotAttribute"
            ],
            "Resource": "*"
          }
        ]
      }
  3. 编写 Lambda 函数代码

    • 在函数代码编辑器中,使用以下示例代码:
    复制代码
    python 复制代码
    import boto3
    import time
    
    def lambda_handler(event, context):
        ec2 = boto3.client('ec2')
        
        # 需要备份的实例 ID
        instance_id = 'i-xxxxxxxxxxxxxxxxx'  # 替换为您的实例 ID
        target_account_id = '123456789012'    # 替换为目标账户 ID
    
        # 创建 AMI
        image_response = ec2.create_image(
            InstanceId=instance_id,
            Name='Backup-AMI-' + time.strftime('%Y-%m-%d-%H-%M-%S'),
            NoReboot=True
        )
        
        image_id = image_response['ImageId']
        print(f'Creating AMI: {image_id}')
    
        # 等待 AMI 创建完成
        waiter = ec2.get_waiter('image_available')
        waiter.wait(ImageIds=[image_id])
        print(f'AMI {image_id} is now available.')
    
        # 共享 AMI
        ec2.modify_image_attribute(
            ImageId=image_id,
            LaunchPermission={
                'Add': [
                    {
                        'UserId': target_account_id,
                    },
                ],
            }
        )
        print(f'AMI {image_id} shared with account {target_account_id}.')
    
        # 共享快照(如果有)
        snapshots = ec2.describe_images(ImageIds=[image_id])['Images'][0]['BlockDeviceMappings']
        for snapshot in snapshots:
            snapshot_id = snapshot['Ebs']['SnapshotId']
            ec2.modify_snapshot_attribute(
                SnapshotId=snapshot_id,
                CreateVolumePermission={
                    'Add': [
                        {
                            'UserId': target_account_id,
                        },
                    ],
                }
            )
            print(f'Snapshot {snapshot_id} shared with account {target_account_id}.')
    • 请确保替换 instance_idtarget_account_id 为实际的 EC2 实例 ID 和目标账户 ID。
  4. 保存并部署 Lambda 函数

    • 点击 "部署" 按钮以保存更改。

4.2 设置 EventBridge 规则(源账户)

  1. 创建 EventBridge 规则

    • 在控制台中,选择 "服务" ,然后选择 "EventBridge"
    • 点击 "规则" ,然后选择 "创建规则"
    • 输入规则名称和描述。
    • "事件模式" 中,选择 "计划事件",根据需要设置触发频率(例如,使用 CRON 表达式设置每日备份)。
  2. 设置目标

    • 选择 "Lambda 函数" 作为目标。
    • 选择您在步骤 4.1 中创建的 Lambda 函数 CreateAndShareAMI
  3. 创建规则 :点击 "创建规则"

4.3 在目标账户中创建 Lambda 函数

  1. 登录到目标账户

    • 使用目标账户的凭证登录到 AWS 管理控制台。
  2. 创建 Lambda 函数

    • 转到 AWS Lambda 控制台

    • 点击 "创建函数" ,选择 "从头开始创建"

    • 输入函数名称(如 CopySharedAMI),并选择运行时(如 Python 3.x)。

    • 配置 IAM 角色,确保该角色具有以下权限:

      复制代码
      bash 复制代码
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "ec2:CopyImage",
              "ec2:DescribeImages"
            ],
            "Resource": "*"
          }
        ]
      }
  3. 编写 Lambda 函数代码

    • 在函数代码编辑器中,使用以下示例代码:
    复制代码
    bash 复制代码
    import boto3
    
    def lambda_handler(event, context):
        ec2 = boto3.client('ec2')
    
        # 替换为源账户共享的 AMI ID
        source_ami_id = 'ami-xxxxxxxxxxxxxxxxx'  # 共享的 AMI ID
        source_region = 'cn-north-1'              # 源账户的区域
    
        # 复制 AMI
        copy_response = ec2.copy_image(
            Name='Copied-AMI-' + source_ami_id.split('-')[-1],  # 为复制的 AMI 命名
            SourceImageId=source_ami_id,
            SourceRegion=source_region
        )
    
        copied_ami_id = copy_response['ImageId']
        print(f'Copying AMI: {copied_ami_id}')
    • 请确保替换 source_ami_id 为源账户共享的 AMI ID。
  4. 保存并部署 Lambda 函数

    • 点击 "部署" 按钮以保存更改。

4.4 设置 EventBridge 规则(目标账户)

  1. 创建 EventBridge 规则

    • 在控制台中,选择 "服务" ,然后选择 "EventBridge"
    • 点击 "规则" ,然后选择 "创建规则"
    • 输入规则名称和描述。
    • "事件模式" 中,选择 "计划事件",根据需要设置触发频率(例如,使用 CRON 表达式设置每日复制)。
  2. 设置目标

    • 选择 "Lambda 函数" 作为目标。
    • 选择您在步骤 4.3 中创建的 Lambda 函数 CopySharedAMI
  3. 创建规则 :点击 "创建规则"

5. 测试和验证

  1. 手动触发 Lambda 函数 :在源账户的 Lambda 控制台中,手动触发 CreateAndShareAMI 函数,确保 AMI 能够成功创建和共享。

  2. 检查目标账户:登录到目标账户,查看共享的 AMI 是否成功复制到该账户。

  3. 监控和日志:使用 CloudWatch Logs 监控 Lambda 函数的执行情况,确保没有错误并检查日志输出。

6. 注意事项

  • 权限:确保您在源账户和目标账户中都有足够的 IAM 权限,以执行上述操作。
  • 区域限制:AWS 中国区的某些服务和功能可能与全球 AWS 区域有所不同,因此请仔细检查相关文档。
  • 数据安全性:在处理 AMI 和快照时,请遵守公司和安全政策,以保护敏感数据。

7. 总结

通过以上步骤,您可以在 AWS 中国区使用 Lambda 和 EventBridge 实现 EC2 AMI 的跨账号备份。这种方法可以实现自动化备份,确保您的 EC2 实例在不同账户中的安全性和可用性。

相关推荐
翼龙云_cloud19 分钟前
国际云代理商:2026年国际云注册风控升级实战指南 8 大平台无卡解决方案对比
服务器·阿里云·云计算
阿里云大数据AI技术4 小时前
全模态、多引擎、一体化,阿里云DLF3.0构建Data+AI驱动的智能湖仓平台
人工智能·阿里云·云计算
摇滚侠4 小时前
阿里云安装的 Redis 在什么位置,如何找到 Redis 的安装位置
redis·阿里云·云计算
m0_694845578 小时前
tinylisp 是什么?超轻量 Lisp 解释器编译与运行教程
服务器·开发语言·云计算·github·lisp
ESBK20258 小时前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
fendouweiqian10 小时前
AWS WAF(配合 CloudFront)基础防护配置:免费能做什么、要不要开日志、如何限制危险方法
网络安全·aws·cloudfront
_运维那些事儿1 天前
VM环境的CI/CD
linux·运维·网络·阿里云·ci/cd·docker·云计算
人间打气筒(Ada)1 天前
k8s:CNI网络插件flannel与calico
linux·云原生·容器·kubernetes·云计算·k8s
主机哥哥1 天前
2026年阿里云五种方案快速部署 OpenClaw(Clawdbot)详细教程
阿里云·云计算
m0_694845571 天前
music-website 是什么?前后端分离音乐网站部署实战
linux·运维·服务器·云计算·github