Amazon Web Services ブログ

AWS コストを最適化するための AWS Config カスタムルールの活用

AWS Config は、AWS アカウント内のリソースの構成と関係性を評価、監査、検証します。このサービスをコスト最適化に使用したい理由は何でしょうか。たとえば、特定の Amazon Relational Database Service (Amazon RDS) インスタンスがアカウントにデプロイされた場合にアラートを受信できるシナリオを考えてみましょう。必要以上に大きいインスタンスタイプが使用されている場合、予期しないコストが発生する可能性があります。

このブログ記事では、AWS Config でカスタムルールを実装する方法を示します。カスタムルールによりデータベースのインスタンスを監視することで、コストの最適化を図ります。複数のアカウントを使用するシナリオでは、お客様は高コストなデータベースインスタンスの使用を制限し、違反が発生した場合に通知を受け取りたいと考えることがあります。たとえば、テストアカウントでは必ずしもアプリケーション構築にプロダクションサイズのインスタンスを利用する必要はありません。AWS Config カスタムルールは、実行中のデータベースインスタンスのタイプをチェックします。そして、意図しないデータベースインスタンスタイプの場合、AWS Config が非準拠として検出します。

ソリューションの概要

次の図は、ソリューションアーキテクチャを示しています

Image showing an AWS Config Custom Rule invokes a lambda function that checks if the given RDS instance is compliant or not

図 1: ソリューションの概要

図 1 の左上にある AWS Config のカスタムルールは、Amazon RDS データベースインスタンスのプロビジョニングが事前定義したコスト管理の基準に違反していないかを検出する AWS Lambda 関数を呼び出します。 この関数の呼び出しは、アカウント内で新しい Amazon RDS データベースインスタンスが検出されるたびに発生します。 AWS Lambda 関数は、インスタンスタイプが承認されたインスタンスタイプに準拠していることを確認します。 リソースが準拠と評価された場合は、何も起こりません。 リソースが非準拠と評価された場合、AWS Lambda 関数は Amazon Simple Notification Service (Amazon SNS) トピックを介して管理チームにアラートを送信し、アカウント管理者が修正措置を取ることができるようにします。

手順の説明

このチュートリアルでは、上記のソリューション図で提示されている全体的な手順をデモするために、次のステップで説明します。

注意: ここで提供されるすべてのコードは、本番環境以外の環境で検証ならびに評価してください。

  • AWS CloudFormation テンプレートを使用して必要なリソースを作成する
  • Amazon SNS トピックのサブスクリプションを確認する
  • AWS Config カスタムルールが機能していることを確認するために Amazon RDS インスタンスを作成する

このチュートリアルの前提条件は次のとおりです。

  1. AWS アカウントに管理者権限でログインできること。
  2. このチュートリアルで使用するリージョンで、AWS Config サービスの設定が完了していること。完了していない場合は、AWS Configワンクリックセットアップのドキュメントに従ってください。

Image showing AWS Config setup

図 2: AWS Config の設定

ステップ 1: AWS CloudFormation テンプレートを使用したリソースの作成

この AWS CloudFormation テンプレートをダウンロードして起動すると、AWS Lambda 関数、AWS Config カスタムルール、Amazon SNS トピックなどの関連リソースがデプロイされます。

注意: デプロイされたリソースはコストが発生します。以下の「クリーンアップ」セクションの説明に従ってリソースをクリーンアップするように覚えておいてください。

AWS CloudFormation テンプレートを使用してリソースを作成するには、次のステップを完了します:

  1. AWS マネジメントコンソールにサインインします
  2. AWS CloudFormation コンソール」>「スタックの作成」>「新しいリソースを使用 (標準)」の順に移動します
  3. YAML テンプレートファイルをアップロードし、次へを選択します
  4. スタック名」を指定し、「NotificationEmail」パラメータにメールアドレスを入力した後、次へを選択します
  5. 「スタックオプションの設定」はデフォルト値のままにして、次へを選択します
  6. 「レビュー」で設定の詳細を確認し、「機能」の「AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。」のボックスにチェックを入れます
  7. 送信を選択します

 

Image showing a confirmation message on the console after clicking submit

図 3: スタック作成の確認

注意: スタックの作成が送信された後、AWS CloudFormation > スタック > スタック名 > イベント タブの下でその進捗状況を確認できます。

スタックが正常に作成されると、AWS アカウントにいくつかのリソースがデプロイされていることがわかります。具体的には、AWS Config ルールAWS Lambda 関数Amazon SNS トピック、および対応する AWS Identity and Access Management (IAM) ロールです。

ステップ 2: Amazon SNS トピックのサブスクリプションの確認

ステップ 1 の完了後、ステップ 1 で設定したメールアドレスに、「AWS Notification – Subscription Confirmation」というタイトルのメールが「sns.amazonaws.com」から届きます。メールの内容は、下図のようになります。

Image showing a subscription confirmation email

図 4: サブスクリプション確認メール

このメールアドレスで登録された Amazon SNS トピックのサブスクリプションを確認するには、メール内の「Confirm Subscription」リンクをクリックしてください。

注意: サブスクリプションのステータスは、以下のように Amazon SNS > トピック > aws-config-demo-topic > サブスクリプション タブで確認できます。

Image showing AWS SNS Subscription Confirmed in the consoleImage showing AWS SNS Subscription Confirmed in the console

図 5: サブスクリプションの確認

ステップ 3: Amazon RDS インスタンスの作成

このステップでは、MySQL の Amazon RDS インスタンスを作成します。これにより、AWS Config のルールがトリガーされ、アカウント管理者にアラートが必要かどうかを判断するために、インスタンスのサイズをチェックします。この例では、作成されるインスタンスのサイズは「db.r6g.large」です。
この Amazon RDS インスタンスを作成するには、次のステップを完了します:

  1. AWS マネジメントコンソールにサインインします
  2. Amazon RDS コンソール」>「データベース」>「データベースの作成」の順に移動します
  3. 簡単に作成」オプションを選択し、エンジンのタイプとして「MySQL」を選択します

Image showing RDS instance creation setup in AWS console

図 6: Amazon RDS エンジンのタイプ

  1. DB インスタンスのサイズとして「開発 / テスト」を選択し、「パスワードの自動生成」オプションにチェックを入れます。チュートリアル後、今回作成した Amazon RDS インスタンスは削除するので、パスワードを保持する必要はありません。

Image showing choices for the instance size in the AWS console

図 7: Amazon RDS インスタンスサイズ

  1. 他のオプションはデフォルト値のままにして、「データベースの作成」を選択します。デフォルトでは、このデータベースはデフォルトの VPC、またはデフォルトの VPC が存在しない場合は新しい VPC 内に作成されます。このセットアップがシナリオに適合しない場合は、「標準作成」を選択して設定を変更できます。

Image showing Database instance creation in the AWS console

図 8: データベースの作成

  1. この Amazon RDS インスタンスが作成された後、数分以内にメールボックスに通知メールが届くはずです。

AWS Config のカスタムルールによって呼び出される AWS Lambda 関数は、Amazon RDS インスタンスが「db.t3.micro」のサイズで作成されているかどうかをチェックしています。したがって、この Amazon RDS インスタンスは AWS Config で非準拠と評価され、アラートメールが送信されます。以下は、RDS インスタンスリソースを評価するために AWS Lambda 関数で使用されるコードスニペットです。

def is_compliant(configurationItem):
    logger.info(f"Resource to be evaluated->{configurationItem}")
    if configurationItem['configuration']['dBInstanceClass'] == 'db.t3.micro':
        return True    
    else:
        return False

AWS Lambda 関数の完全なコードは、Lambda > 関数 > aws-config-demo-lambda > コード タブから参照できます。

クリーンアップ

チュートリアルでデプロイしたリソースを以下のステップで削除してください。

  1. Amazon RDS インスタンスの削除
  2. AWS CloudFormation スタックの削除

まとめ

このブログ記事では、AWS アカウントのコストを管理するために AWS Config カスタムルールを実装する方法について紹介しました。また、Amazon RDS インスタンスタイプを検証するための具体的なユースケースを踏まえて説明しました。
AWS Config のカスタムルールの詳細については、OS CIS コンプライアンス をチェックするAWS Config カスタムルールの設定をご覧ください。

著者紹介

Neville Lewis

Neville Lewis は AWS の Cloud Application Architect で、アプリケーションアーキテクチャデザインの経験が豊富です。

James Hu

James Hu は AWS の Sr. Cloud Application Architect で、マイクロサービスアーキテクチャや AWS CloudFormation/CDK、高可用性の構成について造形が深いです。

Desta Pickering

Desta Pickering は AWS の Cloud Application Architect で、彼女はお客様のユニークな課題を解決することが大好きです。

Drishti Arora

Drishti Arora は AWS Professional Services の Cloud Application Architect で、お客様とパートナーのクラウドジャーニーを支援しています。

翻訳は SA 桂井が行いました。原文は こちら です。