はじめに

AWS Systems ManagerのオートメーションランブックであるSAW(Support Automation Workflows)のAWSPremiumSupport-TroubleshootEC2DiskUsageを検証する機会があったので、備忘録として残します。

※ただし、こちらはAWSPremiumSupportの契約がある場合のみ利用できるランブックです。

説明

SAWとは

AWS Support Automation Workflows (SAW) 公式ドキュメント

AWS サポート自動化ワークフローは、厳選された AWS Systems Manager セルフサービス自動化ランブックのコレクションです。これらのランブックは、お客様の問題を解決して得たベストプラクティスを基に、AWS サポートエンジニアリングによって作成されています。これにより、AWS リソースに関する一般的な問題のトラブルシューティング、診断、修正が可能になります。

つまり、AWSサポートエンジニアの過去の知見を元に設計されたオートメーションランブックで、
AWSリソースに関する問題(EC2の接続問題やLambda関数の設定ミスなど)の解決を自動化をするものになります。

AWSPremiumSupport-TroubleshootEC2DiskUsage とは

AWS PremiumSupport-TroubleshootEC2DiskUsage 公式ドキュメント

AWSPremiumSupport-TroubleshootEC2DiskUsage ランブックは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのルートディスクおよび非ルートディスクの使用状況に関する問題を調査し、潜在的に修正するのに役立ちます。可能であれば、ランブックはボリュームとそのファイルシステムを拡張して問題の修復を試みます。これらのタスクを実行するために、このランブックは、影響を受けるインスタンスのオペレーティングシステムに基づいて、複数のランブックの実行をオーケストレーションします。

簡単に説明すると、EC2のディスクを調査して容量が不足していれば容量を追加するランブックです。

マネジメントコンソール上から実行

実行する前に

前提として、オートメーションランブックを実行するにはEC2がSystems Managerの制御下にある必要があります。
なので、実行する前に以下の点に注意してください。

  • EC2にSSMエージェントがインストールされているか(Amazon Linuxであればデフォルトでインストールされているはず)
  • EC2がSSMから接続できるか(VPCエンドポイントが用意されているか、Publicサブネットにデプロイされているか)
  • EC2のセキュリティグループでHTTPSのトラフィックが解放されているか
  • EC2のIAMロールで(AmazonSSMManagedInstanceCore)が適用されているか

実行手順

まず「System Manager」の画面から「オートメーション」をクリックしてください。

次に「Execute automation」から検索バーへ「TroubleshootEC2DiskUsage」と入力してEnterを押してください。
「AWSPremiumSupport-TroubleshootEC2DiskUsage」が表示されるのでクリックしてください。

タブが開いたら「オートメーションを実行する」をクリックしてください。
これで、AWSPremiumSupport-TroubleshootEC2DiskUsageのランブックの実行画面になります。

あとは、「Input parameters」にある「InstanceId」を入力するだけで実行可能になります。

実行した結果、20GBの容量増加が確認できると思います。
※備考: ランブックの実行には6~10分程度時間が掛かります。

AWS Lambdaから実行手順

ソースコード

import boto3

def lambda_handler(event, context):
    ssm = boto3.client("ssm")

    try:
        response = ssm.start_automation_execution(
            DocumentName="AWSPremiumSupport-TroubleshootEC2DiskUsage",
            Parameters={
                "InstanceId": ["<InstanceId>"] # 配列でインスタンスID記述
            }
        )

        return {
            'statusCode': 200,
            'body': response
        }

    except Exception as e:
        return {
            'statusCode': 500,
            'body': str(e)
        }

LambdaのIAMロールには以下を適用してください。

  • ec2:DescribeVolumes
  • ec2:DescribeVolumesModifications
  • ec2:ModifyVolume
  • ec2:DescribeInstances
  • ec2:CreateImage
  • ec2:DescribeImages
  • ec2:DescribeTags
  • ec2:CreateTags
  • ec2:DeleteTags
  • ssm:StartAutomationExecution
  • ssm:GetAutomationExecution
  • ssm:DescribeAutomationStepExecutions
  • ssm:DescribeAutomationExecutions
  • ssm:SendCommand
  • ssm:DescribeInstanceInformation
  • ssm:ListCommands
  • ssm:ListCommandInvocations

あとは、Lambdaの実行に3~4秒程度かかるので実行時間増やしてください。

こちらも実行後に同様に20GBの容量が増えていることが確認できると思います。

パラメーターについて

オートメーション実行のパラメーターの詳細については下記を参照ください。

パラメーター名 説明 デフォルト値
InstanceId 文字列 Amazon EC2 インスタンスの ID
VolumeExpansionEnabled ブール 影響を受けるボリュームとパーティションを拡張するかどうかを制御するフラグ true
VolumeExpansionUsageTrigger 文字列 拡張をトリガーするために必要なパーティション領域の最小使用量 (パーセント) 85
VolumeExpansionCapSize 文字列 Amazon Elastic Block Store (Amazon EBS) ボリュームが増加する最大サイズ (GiB 単位) 2048
VolumeExpansionGibIncrease 文字列 ボリュームの増加量 (GiB 単位)。VolumeExpansionGibIncrease と VolumeExpansionPercentageIncrease の間の最大の純増加量が使用されます。 20
VolumeExpansionPercentageIncrease 文字列 ボリュームの増加量 (%)。VolumeExpansionGibIncrease と VolumeExpansionPercentageIncrease の間の最大の純増加量が使用されます。 20
AutomationAssumeRole 文字列 Systems Manager Automation がユーザーに代わってアクションを実行できるようにする AWS Identity and Access Management (IAM) ロールの Amazon リソースネーム (ARN)。ロールを指定しない場合、Systems Manager Automation はこのランブックを開始するユーザーのアクセス許可を使用します。

料金について

https://aws.amazon.com/jp/systems-manager/pricing/

  • ステップカウント
    ステップ単位で課金が発生して1 か月あたり 100,000 ステップの無料利用枠があり無料枠を超えた場合、 1 ステップあたり 0.002 USD が課金されます。
    (ここで言うステップとは、オートメーションワークフローの中で実行される個々のアクションやタスクの単位のことです。)
  • ステップの実行時間
    1 か月あたり 5,000 秒の無料利用枠があり、無料枠を超えると 1 秒あたり 0.00003 USD が課金されます。
  • ランブック添付ファイル
    オートメーションランブックに添付ファイルをアップロードすると、添付ファイルのサイズと保存期間に応じて課金されます。複数アカウントまたはリージョンデータ転送がある場合も課金されます。
    ストレージ: 1 か月あたり 0.046 USD/GB
    データ転送: 1 GB あたり 0.900 USD

AWSPremiumSupport-TroubleshootEC2DiskUsageの場合
ステップ数: 1回の実行で12〜22ステップの処理を行います。
実行時間: 1回の実行には約6分から10分程度掛かります (360秒〜600秒)。
ランブック添付ファイル: なし。

1回の実行で12〜22ステップとステップ数を多く消費しないため、ステップ数の上限を超えることはまずないです。
仮に100回実行しても、実行時間の超過料金は約$1.65と安価になります。

計算式
1回の実行時間: 最大600秒
100回の実行時間: 600秒/回 * 100回 = 60,000秒
無料枠を超過した時間: 60,000秒 – 5,000秒 = 55,000秒
超過分の料金: 55,000秒 * $0.00003/秒 = $1.65

おわりに

誰かの参考になれば幸いです。