首页 > 后端开发 > Python教程 > 优化 AWS 成本:使用 Lambda 自动清理未使用的 EBS 快照

优化 AWS 成本:使用 Lambda 自动清理未使用的 EBS 快照

DDD
发布: 2024-12-19 01:18:10
原创
500 人浏览过

构建和部署用于 EBS 快照管理的节省成本的 Lambda 函数的分步指南

?介绍

欢迎来到 DevOps 的世界!今天,我们将深入研究一个令人兴奋的成本优化项目,该项目解决 AWS 用户面临的常见挑战——管理不必要的 EBS 快照。在这个项目中,我们将创建一个自动清理的 Python 程序:

  • 未附加到任何卷的快照。
  • 不再处于运行状态的实例的快照。

这个实践项目不仅是降低 AWS 存储成本的好方法,也是加强您对 AWS 资源利用率的理解的机会。在此过程中,我们将探索 boto3(适用于 Python 的 AWS 开发工具包),以与 AWS 资源交互并操作它们以满足我们的需求。

让我们开始这段自动化成本节约措施并增强您的 DevOps 技能的旅程!


?先决条件

在我们开始构建成本优化项目之前,让我们确保您拥有必要的工具和知识。这是您需要的:

  • Python:确保您的系统上安装了 Python。推荐3.7或以上版本。
  • Python基础知识:熟悉Python基础知识将有助于您有效理解和实现脚本。
  • AWS 账户:您需要访问 AWS 账户才能与 EC2 和 EBS 快照等资源进行交互。
  • 对 EC2 的基本了解:由于我们将使用 EC2 仪表板和快照,因此对 EC2 实例有基本的了解至关重要。
  • AWS CLI:使用以下命令在您的系统上安装和配置 AWS CLI:
aws configure
登录后复制
登录后复制

此步骤将设置您的访问密钥、区域和输出格式,以实现与 AWS 服务的无缝通信。

一旦您勾选了这些先决条件,您就可以准备继续该项目了!


?启动项目

这个项目的源代码可以在我的 GitHub 存储库中找到:

? GitHub 存储库:AWS 云成本优化

按照以下步骤创建和配置您的 Lambda 函数:

创建 Lambda 函数:

  • 导航到您的 AWS 账户中的 Lambda 控制台。
  • 单击“创建函数”并选择“从头开始创作”选项。
  • 提供函数名称,例如 ebs-volume-check,并选择 Python 3.12 作为运行时。

Optimise AWS Costs: Automate Unused EBS Snapshot Cleanup with Lambda

添加代码:

  • 在 AWS 控制台的代码编辑器中,打开 lambda_function.py 文件。
  • 将 GitHub 存储库中 script.py 的内容复制并粘贴到编辑器中。这是供参考的代码片段:
aws configure
登录后复制
登录后复制

部署代码:

  • 单击“部署”按钮保存并应用更改。

增加超时:

  • 默认情况下,Lambda 函数的超时时间为 3 秒,这对于此操作来说是不够的。
  • 转到“配置”选项卡,选择“常规配置”,然后将超时时间增加到 10 秒。

Optimise AWS Costs: Automate Unused EBS Snapshot Cleanup with Lambda

测试功能:

  • 使用虚拟数据创建一个测试事件并调用该函数。
  • 测试过程中您会遇到UnauthorizedOperation错误。

出现此错误是因为 Lambda 函数缺乏所需的权限,我们将在下一步中解决该问题。


?添加所需的权限

为了使Lambda函数能够与EC2资源交互,我们需要为其服务角色添加特定权限。我们将遵循最小权限原则来确保该函数仅具有其所需的权限,而不是授予完全访问权限。请按照以下步骤操作:

找到服务角色:

  • 导航到 Lambda 函数的“配置”选项卡。
  • 在“权限”部分下,找到与该功能关联的服务角色。角色名称将显示在那里。

Optimise AWS Costs: Automate Unused EBS Snapshot Cleanup with Lambda

在 IAM 中打开服务角色:

  • 点击服务角色名称,它会将您重定向到 IAM 控制台。

创建内联策略:

  • 在 IAM 控制台的权限选项卡下,单击添加权限并选择创建内联策略。
  • 配置策略如下:
  • 服务:选择EC2。
  • 操作:仅选择以下权限:
  • 描述快照
  • 描述实例
  • 描述体积
  • 删除快照
  • 资源:为简单起见,设置适用于所有资源的权限。如果您需要更严格的控制,请指定资源 ARN。

查看并分配策略:

  • 单击“下一步”并查看策略详细信息。
  • 为策略分配一个名称,例如 ebs-permissions。
  • 单击“创建策略”将其应用到服务角色。

ebs 权限策略将如下所示:

Optimise AWS Costs: Automate Unused EBS Snapshot Cleanup with Lambda

添加此内联策略后,Lambda 函数将拥有有效描述和删除快照、卷和实例所需的所有权限。

权限到位后,我们下一步再次测试该功能!


?测试 Lambda 函数

权限到位后,是时候使用真实场景测试我们的 Lambda 函数了。请按照以下步骤查看该函数的执行情况:

1。第一个用例:清理已删除实例的快照

创建 EC2 实例:

  • 启动一个 t2.micro 实例并将其命名为 test-ebs.
  • 使用默认 AMI 并确保实例具有根卷。

Optimise AWS Costs: Automate Unused EBS Snapshot Cleanup with Lambda

创建快照:

  • 转到 EC2 仪表板并从附加到 test-ebs 的卷创建快照。
  • 等待快照创建完成。

Optimise AWS Costs: Automate Unused EBS Snapshot Cleanup with Lambda

删除实例:
快照准备就绪后,终止 test-ebs 实例。这留下了一个不存在的实例的快照,该快照现在是多余的。

运行 Lambda 函数:

  • 导航到 AWS 控制台中的 Lambda 函数并测试该函数。
  • 该函数将检测快照未附加到正在运行的实例并将其删除。

Optimise AWS Costs: Automate Unused EBS Snapshot Cleanup with Lambda

在 EC2 仪表板的快照部分验证删除。

Optimise AWS Costs: Automate Unused EBS Snapshot Cleanup with Lambda

2。第二个用例:清理已删除卷的快照

创建 EBS 卷:

  • 创建一个 1 GB gp3 EBS 卷并将其命名为 ebs-volume。

创建快照:

  • 导航到 EBS 卷部分并从 ebs-volume 创建快照。
  • 等待快照创建。

Optimise AWS Costs: Automate Unused EBS Snapshot Cleanup with Lambda

删除卷:
快照准备就绪后,删除 ebs-volume。这会留下未附加到任何卷的快照。

运行 Lambda 函数:

  • 再次测试 Lambda 函数。
  • 该函数将识别快照未链接到任何卷并将其删除。
  • 在 EC2 仪表板的快照部分确认删除。

Optimise AWS Costs: Automate Unused EBS Snapshot Cleanup with Lambda

通过成功处理这两种场景,Lambda 函数展示了其识别和清理冗余 EBS 快照、节省成本并简化资源管理的能力。


?结论

恭喜! ?您刚刚使用 Python 和 Lambda 在 AWS 上构建了成本优化解决方案。在这个项目中,我们探索了如何识别和清理不再有用的冗余 EBS 快照,帮助您节省云成本,同时改进资源管理。

以下是我们所取得成就的快速回顾:

  • 学习了如何从头开始创建和配置 Lambda 函数。 利用 AWS 的 boto3 库以编程方式与 EC2 资源交互。
  • 遵循最小权限原则,确保安全访问AWS服务。
  • 测试了真实场景,以验证我们的函数在清理未附加快照方面的效率。

该项目强调了云环境中资源优化的重要性,并为您提供使用 Python 自动执行 AWS 任务的实践经验。

您可以随意进一步定制和增强此功能。例如,您可以设置 CloudWatch 规则来定期触发该函数或扩展逻辑以处理其他清理场景。

感谢您的关注,敬请关注更多精彩的 DevOps 和云项目! ?

?如需了解更多信息博客,请在 Hashnode、X(Twitter) 和 LinkedIn 上关注我。

到此为止,祝您学习愉快! ?

以上是优化 AWS 成本:使用 Lambda 自动清理未使用的 EBS 快照的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板