AWS 基础设施维护使用 AWS Lambda 和 AWS EventBridge [EC2 实例每日 ebs 卷快照] [第 1 部分]
内容 摘要 架构图和所有解决方案的高级概述 *架构图 *EC2 实例每日 ebs 卷快照 X 天后EC2 实例每日 ebs 快照清理 *EC2 实例每天在 X 天后清理未附加的 ebs 卷 *X 天后取消注册旧的 EC2 Amazon 机器映像 AWS IAM 权限 *权限 *信任关系 AWS EventBridge 和 Lambda EC2实例每日ebs卷快照解决方案 下一个 总结 欢迎来到PA
内容
-
摘要
-
架构图和所有解决方案的高级概述
*架构图
*EC2 实例每日 ebs 卷快照
- X 天后EC2 实例每日 ebs 快照清理
*EC2 实例每天在 X 天后清理未附加的 ebs 卷
*X 天后取消注册旧的 EC2 Amazon 机器映像
- AWS IAM 权限
*权限
*信任关系
-
AWS EventBridge 和 Lambda
-
EC2实例每日ebs卷快照解决方案
-
下一个
总结
欢迎来到PART-1的四部分教程,介绍如何利用 Lambda 和 EventBridge 等 AWS 服务按计划自动对 AWS 基础设施执行内务管理。我将使用 AWS Lambda、EventBridge 和 python🐍 执行以下操作。
-
[PART-1]为所有区域的所有 AWS EC2 实例创建 EBS 卷快照,并标记它们。
-
[PART-2]清理我们所有区域的 EBS 卷快照,其年龄大于 X 天。
-
[PART-3]清理我们所有区域的 EBS 卷,这些卷未附加到资源,并且使用期限大于 X 天。
-
[PART-4]从我们所有地区的年龄超过 X 天的亚马逊系统映像中注销。
我将使用 AWS EventBridge、AWS Lambda 和 python 来完成所有这些工作。这将使前往每个区域并查找与这些相关的工件并对其执行维护的任何手动工作自动化。
架构图和所有解决方案的高级概述
架构图
[](https://res.cloudinary.com/practicaldev/image/fetch/s--PI40YAzo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/tvr1c8x9908u6r8avs8a.png)
EC2 实例每日 ebs 卷快照
我将列出我们所有区域中的所有实例及其关联的卷,并从中创建 EBS 快照。我还将为这些快照添加自定义标签。
X 天后 EC2 实例每日 ebs 快照清理
我将列出我们在我们的区域中拥有的所有 EBS 快照,然后删除那些早于 X 天的。
EC2 实例每日未附加的 ebs 卷清理 X 天后
我将列出我们在我们的区域中拥有的所有 EBS 卷,然后删除那些未附加到任何资源且超过 X 天的 EBS 卷。
X 天后取消注册旧的 EC2 Amazon 机器映像
我将列出我们在我们的区域中拥有的所有 Amazon 系统映像,然后删除那些未附加到任何资源且超过 X 天的系统映像。
AWS IAM 权限
创建具有以下权限和信任策略的 IAM 角色。
权限
将权限策略模板附加到您的角色,这将允许:
-
AWS cloudwatch 日志流创建和写入。
-
描述 EC2 实例、卷、快照和 AMI。
-
EC2 快照创建和删除。
-
EC2 卷删除。
-
S2 I 注销。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:CreateLogGroup",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateSnapshot",
"ec2:CreateTags",
"ec2:DeleteSnapshot",
"ec2:Describe*",
"ec2:ModifySnapshotAttribute",
"ec2:ResetSnapshotAttribute",
"ec2:DeleteVolume",
"ec2:DeregisterImage"
],
"Resource": "*"
}
]
}
进入全屏模式 退出全屏模式
信任关系
允许 lambda 服务访问您的 IAM 角色。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
进入全屏模式 退出全屏模式
AWS EventBridge 和 Lambda
我将使用AWS Lambda来运行我们的 python 代码来运行我们的基础设施维护。
我将使用AWS EventBridge按计划通过 lambda 运行我们的代码。我将使用 cron 表达式定义我们的日程安排,每天午夜触发,在我们的时区本地。
您可以通过转到 AWS EventBridge 服务➡️规则➡️创建规则来创建 EventBridge 规则。我们将使用的 cron 表达式将是 cron(30 18 * * ? *)。我在印度,这转换为午夜 IST 时区,即 18:30:00 GMT。
我将使用AWS Cloudwatch logs来记录来自我们的 lambda 运行的数据。
EC2实例每日ebs卷快照解决方案
工作流程和代码
-
我将使用的工作流程是: > 🕛 Midnight ➡️ AWS EventBridge 规则触发器 ➡️ 运行 Lambda 代码 ➡️ 为每个区域中的所有实例创建 EC2 卷快照 ➡️ 记录到 cloudwatch 日志
-
安装boto3
python3 -m pip install boto3
-
拉姆达码
-
初始化一个 boto3客户端
ec2_client u003d boto3.client('ec2')
- 获取所有区域
def get_regions(ec2_client):
为 ec2_client.describe_regions()['Regions']] 中的区域返回 [region['RegionName']
- 每个区域初始化一个 boto3 ec2资源
ec2_resource u003d boto3.resource('ec2',region_nameu003dregion)
- 使用instances.all()列出区域中的所有实例。如果需要,您也可以使用过滤器。
实例 u003d ec2_resource.instances.all()
- 使用volumes.all()列出每个实例的所有卷。如果需要,您也可以使用过滤器。
例如在实例中:
卷 u003d instance.volumes.all()
- 使用create_snapshot()方法创建卷的快照。将创建一个“Instance_Id”标签,并为其分配卷所附加的“instance id”的值,以及一个“Device”标签,并为其分配卷中属性“Device”的值。
desc u003d f'例如备份:{i.id} 和卷:{v.id}。'
标签 u003d [
{
'键':'Instance_Id',
'值':f'{instance.id}'
},
{
'钥匙':'设备',
'值':f'{volume.attachments[0]["Device"]}'
}
]
对于卷中的卷:
快照 u003d volume.create_snapshot(
描述u003d描述,
标签规格u003d[
{
'资源类型':'快照',
“标签”:标签
}
]
)
- 将所有内容放在一起 - 查看我的GITHUB页面以获取完整代码。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--GlJcV66e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/flmo8idobvtkphmny47u.png)
Cloudwatch 日志
[的 Cloudwatch 日志](https://res.cloudinary.com/practicaldev/image/fetch/s--0rSmsqJo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/ob8b4m12vn2ek92jcuab.png)
下一个
本教程的第 2 部分我将讨论为 X 天之前的每日 ebs 快照清理创建代码。
更多推荐
所有评论(0)