ホームページ > バックエンド開発 > Python チュートリアル > AWS コストの最適化: Lambda を使用して未使用の EBS スナップショットのクリーンアップを自動化する

AWS コストの最適化: Lambda を使用して未使用の EBS スナップショットのクリーンアップを自動化する

DDD
リリース: 2024-12-19 01:18:10
オリジナル
499 人が閲覧しました

EBS スナップショット管理用のコスト節約 Lambda 関数を構築およびデプロイするためのステップバイステップ ガイド

?導入

DevOps の世界へようこそ!今日は、AWS ユーザーが直面する共通の課題、つまり不要な EBS スナップショットの管理に取り組むエキサイティングなコスト最適化プロジェクトについて詳しく説明します。このプロジェクトでは、以下を自動的にクリーンアップする Python プログラムを作成します。

  • どのボリュームにも接続されていないスナップショット。
  • 実行状態ではなくなったインスタンスのスナップショット。

この実践的なプロジェクトは、AWS のストレージ コストを削減する優れた方法であるだけでなく、AWS でのリソース利用についての理解を強化する機会でもあります。その過程で、AWS リソースと対話し、ニーズに合わせて操作するための Python 用 AWS SDK である boto3 について調べていきます。

コスト削減措置を自動化し、DevOps スキルを向上させるための取り組みを始めましょう!


?前提条件

コスト最適化プロジェクトの構築に取り掛かる前に、必要なツールと知識が整っていることを確認してください。必要なものは次のとおりです:

  • Python: Python がシステムにインストールされていることを確認してください。バージョン 3.7 以降を推奨します。
  • Python の基本知識: Python の基礎に精通していると、スクリプトを効果的に理解し実装するのに役立ちます。
  • AWS アカウント: EC2 や EBS スナップショットなどのリソースを操作するには、AWS アカウントにアクセスする必要があります。
  • 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 ファイルを開きます。
  • script.py の内容を GitHub リポジトリからコピーしてエディタに貼り付けます。参考用のコードスニペットは次のとおりです。
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-permissions ポリシーは次のようになります:

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. 2 番目の使用例: 削除されたボリュームのスナップショットのクリーニング

EBS ボリュームを作成します:

  • 1 GB gp3 EBS ボリュームを作成し、ebs-volume という名前を付けます。

スナップショットの作成:

  • 「EBS ボリューム」セクションに移動し、ebs-volume からスナップショットを作成します。
  • スナップショットが作成されるまで待ちます。

Optimise AWS Costs: Automate Unused EBS Snapshot Cleanup with Lambda

ボリュームを削除します:
スナップショットの準備ができたら、ebs ボリュームを削除します。これにより、どのボリュームにもアタッチされていないスナップショットが残ります。

Lambda 関数を実行します:

  • Lambda 関数を再度テストします。
  • この関数は、スナップショットがどのボリュームにもリンクされていないことを識別し、削除します。
  • EC2 ダッシュボードの [スナップショット] セクションで削除を確認します。

Optimise AWS Costs: Automate Unused EBS Snapshot Cleanup with Lambda

これら 2 つのシナリオを適切に処理することで、Lambda 関数は冗長な EBS スナップショットを特定してクリーンアップし、コストを節約し、リソース管理を合理化する機能を実証します。


?結論

おめでとうございます! ? Python と Lambda を使用して AWS 上にコスト最適化ソリューションを構築しました。このプロジェクトでは、目的を果たさなくなった冗長な EBS スナップショットを特定してクリーンアップし、リソース管理を改善しながらクラウド コストを節約する方法を検討しました。

私たちが達成したことを簡単に要約します:

  • Lambda 関数を最初から作成して設定する方法を学びました。 AWS の boto3 ライブラリを利用して、プログラムで EC2 リソースと対話します。
  • 最小特権の原則に従って、AWS サービスへの安全なアクセスを確保します。
  • 未接続のスナップショットのクリーンアップにおける関数の効率を検証するために、実際のシナリオをテストしました。

このプロジェクトでは、クラウド環境におけるリソースの最適化の重要性を強調し、Python を使用して AWS タスクを自動化する実践的な経験を身につけます。

この機能を自由にカスタマイズしてさらに強化してください。たとえば、CloudWatch ルールを設定して関数を定期的にトリガーしたり、ロジックを拡張して追加のクリーンアップ シナリオを処理したりできます。

フォローしていただきありがとうございます。今後もエキサイティングな DevOps とクラウド プロジェクトにご期待ください! ?

?さらに有益なブログについては、Hashnode、X(Twitter)、LinkedIn でフォローしてください。

それまで、楽しく学んでください! ?

以上がAWS コストの最適化: Lambda を使用して未使用の EBS スナップショットのクリーンアップを自動化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート