首頁 > 後端開發 > 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 帳戶才能與 EC​​2 和 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 儲存庫中 sc​​ript.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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板