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. 登录到源账户

    • 访问 AWS 管理控制台 并使用源账户凭证登录。
  2. 创建 Lambda 函数

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

    • 点击 “创建函数”

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

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

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

      {"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["ec2:CreateImage","ec2:ModifyImageAttribute","ec2:DescribeImages","ec2:DescribeSnapshots","ec2:ModifySnapshotAttribute"],"Resource": "*"}]
      }
      

  3. 编写 Lambda 函数代码

    • 在函数代码编辑器中,使用以下示例代码:
     
    import boto3
    import timedef lambda_handler(event, context):ec2 = boto3.client('ec2')# 需要备份的实例 IDinstance_id = 'i-xxxxxxxxxxxxxxxxx'  # 替换为您的实例 IDtarget_account_id = '123456789012'    # 替换为目标账户 ID# 创建 AMIimage_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.')# 共享 AMIec2.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_id 和 target_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 角色,确保该角色具有以下权限:

       
      {"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["ec2:CopyImage","ec2:DescribeImages"],"Resource": "*"}]
      }
      

  3. 编写 Lambda 函数代码

    • 在函数代码编辑器中,使用以下示例代码:
     
    import boto3def lambda_handler(event, context):ec2 = boto3.client('ec2')# 替换为源账户共享的 AMI IDsource_ami_id = 'ami-xxxxxxxxxxxxxxxxx'  # 共享的 AMI IDsource_region = 'cn-north-1'              # 源账户的区域# 复制 AMIcopy_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 实例在不同账户中的安全性和可用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/461279.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vim命令及shell命令

目录 vim命令 vim三种工作模式 光标的跳转 复制粘贴 剪切删除 撤销回滚替换 翻页 其他 shell编程命令 判断用户的参数 可用的整数比较运算符 常见的字符串比较运算符 if条件测试语句 for条件循环语句 vim命令 vim三种工作模式 Vim编辑器中设置了三种模式: 命令…

Z 检验和 T 检验之间的区别

目录 一、说明 二、什么是假设检验? 三、假设检验基础 3.1 假设检验的基本概念 3.2 、执行假设验证的步骤 3.3 临界值、P 值 3.4 方向假设 3.5 非方向假设检验s 四、什么是 Z 检验统计量? 五、Z 检验示例 5.1 单样本 Z 检验 5.2 双样本 Z 检…

Qt限制QGraphicsScene QGraphicsItem内部的移动范围

用过QGraphicsView的都知道,原点一般设定在view和item的中心,所以帮助文档和这个网友说的不一定跟我们对的上: 关于Qt限制QGraphicsScene内部Item的移动范围_qgraphicsitem限制移动范围-CSDN博客 首先,设定view的scenerect&…

【Redis】浅析Redis大Key

目录 1、什么是Redis大Key 2、大 Key 是怎么产生的 3、大 Key 导致的问题 4、如何快速找到 Redis 大 Key 5、大 Key 优化策略 6、总结 我们在使用 Redis 的过程中,如果未能及时发现并处理 Big keys(下文称为“大Key”),可能…

Jedis操作和springboot整合redis

Jedis-springboot整合redis Jedis 引入jedis依赖 注意事项 测试相关数据类型 Key String List set hash zset 案例 spring boot整合redis 引入相关依赖 在application.properties中配置redis 配置 创建redis配置类 创建测试类 Jedis 引入jedis依赖 <depen…

GenAI 生态系统现状:不止大语言模型和向量数据库

自 20 个月前 ChatGPT 革命性的推出以来&#xff0c;生成式人工智能&#xff08;GenAI&#xff09;领域经历了显著的发展和创新。最初&#xff0c;大语言模型&#xff08;LLMs&#xff09;和向量数据库吸引了最多的关注。然而&#xff0c;GenAI 生态系统远不止这两个部分&#…

HTML、JavaScript和CSS实现注册页面设计

目录 一、实现要求 二、实现页面图 1、注册页面 2.用户ID、用户名、口令验证成功后显示页面 三、用户ID、用户名、口令、确定口令验证逻辑js代码 1、验证用户ID 2、验证用户名 3、验证口令密码 四、总结 五、代码仓库 一、实现要求 综合使用HTML、JavaScript和CSS进…

Vue前端开发:事件绑定方式

事件定义 在Vue中&#xff0c;当一个元素通过使用v-on或语法糖指令绑定某个事件后&#xff0c;则完成了事件被定义的过程&#xff0c;在这定义的过程中&#xff0c;指令的后面是定义事件的名称&#xff0c;等号的后面是事件被触发后执行的函数&#xff0c;当然&#xff0c;也可…

mac-ubuntu虚拟机(扩容-共享-vmtools)

一、磁盘扩容 使用GParted工具对Linux磁盘空间进行扩展 https://blog.csdn.net/Time_Waxk/article/details/105675468 经过上面的方式后还不够&#xff0c;需要再进行下面的操作 lvextend 用于扩展逻辑卷的大小&#xff0c;-l 选项允许指定大小。resize2fs 用于调整文件系统的…

【AAOS】【源码分析】CarSystemUI

目录 目录 概述 CarSystemUI组件 源代码 源码位置 主要模块 编译选项 CarSystemUI与SystemUI 编译方式 Car Emulator默认服务 CarSystemUI 启动流程 缩略词 概述 AAOS中的SystemUI虽然相较手机要简单不少,但却是车载开发中的一个重要组件,它负责管理和控制车机…

C++知识点复习

对于这些问题的回答&#xff0c;可以按照思维导图的结构来组织答案&#xff0c;然后再进行回答。 C11用过哪些特性&#xff1f; &#xff08;首先&#xff0c;要回答好这个问题&#xff0c;需要注意问题的层次&#xff0c;不要一上来就说新增了某某关键字和语法&#xff0c;在…

.net framework 3.5sp1开启错误进度条不动如何解决

浏览器地址栏输入www.dnz9.com远程解决netframework问题 在Windows操作系统上安装或启用.NET Framework 3.5 SP1时&#xff0c;如果遇到进度条不动的问题&#xff0c;可能由多种原因引起。以下是一些可能的解决方案&#xff1a; 1. 使用Windows功能对话框 1.打开“控制面板”。…

openpnp - 在openpnp中单独测试相机

文章目录 openpnp - 在openpnp中单独测试相机概述笔记END openpnp - 在openpnp中单独测试相机 概述 底部相机的位置不合适, 重新做了零件&#xff0c;准备先确定一下相机和吸嘴的距离是多少才合适。 如果在设备上直接实验&#xff0c;那么拆装调整相机挺麻烦的。 准备直接在电…

Spring 框架中常见的注解(Spring、SpringMVC、SpringBoot)

1. Spring 中常见注解 还有Recourse&#xff1a;相当于AutowiredQualifier Value : 用于将配置文件中的值注入到Bean的字段中。 Bean : 用于在配置类中声明一个Bean。 Lazy : 用于延迟加载Bean。 2. SpringMVC 中常见注解 还有GetMapping PostMapping PutMapping DeleteMapp…

掌握分布式系统的38个核心概念

天天说分布式分布式&#xff0c;那么我们是否知道什么是分布式&#xff0c;分布式会遇到什么问题&#xff0c;有哪些理论支撑&#xff0c;有哪些经典的应对方案&#xff0c;业界是如何设计并保证分布式系统的高可用呢&#xff1f; 1. 架构设计 这一节将从一些经典的开源系统架…

OpenAI 的 Whisper:盛名之下,其实难副?

OpenAI 的 Whisper&#xff1a;盛名之下&#xff0c;其实难副&#xff1f; Whisper 的崛起与承诺 严重缺陷的曝光 风险分析 应对措施 结论 在人工智能的浪潮中&#xff0c;OpenAI 一直以其创新性和强大的技术实力备受瞩目。然而&#xff0c;最近 OpenAI 的语音转写工具 Wh…

【MySQL】可重复读级别下基于Next Key Lock解决幻读

昨天读到了一篇文章[1]&#xff0c;里面讲&#xff0c;面试官说mysql的可重复读级别下有解决幻读的方式&#xff0c;最后公布了答案&#xff0c;是在sql后面加for update。这么说倒是没错&#xff0c;但是这种问法给我一种奇怪的感觉&#xff0c;因为for update无论在哪个隔离级…

Kaggle “Reducing Commercial Aviation Fatalities” 比赛 生理数据分析

1、背景 Kaggle在2018 年 12 月 20 日举办“Reducing Commercial Aviation Fatalities” 比赛&#xff0c;通过收集飞行员的生理数据&#xff0c;判断飞行员何时会遇到麻烦吗&#xff1f;该比赛主要分析飞行员的问题&#xff0c;因为航班多、时间不固定&#xff0c;飞行员会出…

Python 字符串类型中 ``split(“\n“)`` 与 ``splitlines()`` 方法的一些区别

最近在以 self.__print("#" * 20 "\n") 调用自己写的 __print 接口时发现打印的时候 "\n" 没有打出来&#xff0c;进而发现了 split("\n") 与 splitlines() 方法的一些区别。 一个是参数上&#xff0c;split 需要传递一个字符串作为…

开源库 FloatingActionButton

开源库FloatingActionButton Github:https://github.com/Clans/FloatingActionButton 这个库是在前面这个库android-floating-action-button的基础上修改的&#xff0c;增加了一些更强大和实用的特性。 特性&#xff1a; Android 5.0 以上点击会有水波纹效果 可以选择自定义…