Boto3を使ってTrusted Advisorのチェック項目ごとの節約費用の見積もりを取得してみる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Trusted Advisorでは、コスト最適化、パフォーマンス、セキュリティ、フォールトトレランス、サービスの制限についてチェックを行い、各カテゴリにおいて問題のあるリソースを確認できます。今回はBoto3のSupportクライアントを使用して、Trusted Advisorのコスト最適化のチェックの実行と月額でいくら節約できそうかという見積額の取得を試してました。

やってみる

まずはライブラリ/モジュールの読み込みを行い、クライアントを生成します。 Supportクライアントはus-east-1リージョンのみ対応しているため、us-east-1リージョンを指定しておきます。

import boto3
import time
import pandas as pd
client = boto3.Session(region_name='us-east-1').client('support')

Trusted Advisorのチェック項目を取得し、コスト最適化に関するもののみ取り出します。

response = client.describe_trusted_advisor_checks(language='ja')
cost_checks = dict([(check['id'], check) for check in response['checks'] if check['category'] == 'cost_optimizing'])

コスト最適化に関する項目のチェックを実行します。

for check_id in cost_checks.keys():
    response = client.refresh_trusted_advisor_check(
        checkId=check_id
    )

チェックが完了するまで数分かかるため、チェックが失敗するか成功するまで待機します。

check_ids = list(cost_checks.keys())
while True:
    response = client.describe_trusted_advisor_check_refresh_statuses(
        checkIds=check_ids
    )
    all_done = True
    for status in response['statuses']:
        all_done &= (status['status'] == ['abandoned', 'none', 'success'])
    if all_done:
        break
    time.sleep(30)

チェックが完了したら、チェック結果のサマリ(要約した結果)を取得し、節約見積もり額をとり出します。今回は使いませんが、describe_trusted_advisor_check_resultを使うことでチェックに引っかかったリソースの情報も取得できます。

response = client.describe_trusted_advisor_check_summaries(checkIds=list(cost_checks.keys()))
estimated_monthly_savings = 0
for summary in response['summaries']:
    saving = 0
    if summary['hasFlaggedResources']:
        saving = summary['categorySpecificSummary']['costOptimizing']['estimatedMonthlySavings']
    cost_checks[summary['checkId']]['estimatedMonthlySavings'] = saving

コスト最適化の各チェック項目の概要と節約見積額をデータフレーム形式で表示してみます。

pd.DataFrame.from_dict(cost_checks, orient='index')

さいごに

Boto3のSupportクライアントを使った、Trusted Advisorのコスト最適化に関するチェックとその結果の取得方法について紹介しました。リソースの削除忘れ等による無駄なAWS利用費の発生は抑えたいものです。取得したデータを加工して、Slackなどに通知することで、そういったリソースの発見につながるかもしれません。

参考