メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

Run Command のコマンド実行ステータスの変更をログに記録する

Amazon CloudWatch Events および 単純な AWS Lambda 関数を使用して、コマンド実行ステータスの変更をログに記録できます。状態の遷移があると実行されるルールや、関心のある 1 以上の遷移があると実行されるルールを作成できます。

Systems Manager イベントタイプ

Systems Manager は、以下のデータを CloudWatch イベント に送信します。

例1 – EC2コマンドステータス変更の通知: この例には、複数のインスタンスへ送信されたコマンドの実行ステータスの変更に関する情報が含まれます。

Copy
{ "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "EC2 Run Command – Command Status change", "source": "aws.ssm", "account": "123456789012", "time": "2016-03-14T18:43:48Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-12345678", "arn:aws:ec2:us-east-1:123456789012:instance/i-12345670", "arn:aws:ec2:us-east-1:123456789012:instance/i-12345679" ], "detail": { "command-id": "aws.ssm.12345678-1234-1234-1234-12345678", "requested-date-time":"2016-03-14T18:43:48Z", "expire-after":"2016-03-14T18:43:48Z", "output-s3bucket-name":"mybucket", "output-s3key-prefix":"test", "parameters":"parameter", "status": "Success" } }

例2 – EC2 コマンド呼び出しステータス変更の通知: この例には、複数のインスタンスへ送信されたコマンドに関する情報が含まれますが、イベントでは 1 つのインスタンスのみ、またはそのコマンドの呼び出しに関する詳細が表示されます。

Copy
{ "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "EC2 Run Command – Command Invocation Status change", "source": "aws.ssm", "account": "123456789012", "time": "2016-03-14T18:43:48Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-12345678" ], "detail": { "command-id": "aws.ssm.12345678-1234-1234-1234-12345678", "instance-id":"i-12345678", "requested-date-time":"2016-03-14T18:43:48Z", "status": "Success" } }

Systems Manager コマンド実行ステータスの変更をログに記録する

次のシナリオでは、単純な AWS Lambda 関数を作成し、Systems Manager からのイベントをルーティングし、正しくセットアップされていることを確認するためにシナリオをテストします。

Run Command のコマンド実行ステータスの変更を記録するためには、以下を実行する必要があります。

ステップ 1: AWS Lambda 関数を作成する

AWS Lambda 関数を作成するには

  1. https://console.aws.amazon.com/lambda/ にある AWS Lambda コンソールを開きます。

  2. [Create a Lambda function] を選択してから、[Select blueprint] 画面で [hello-world] を選択します。

  3. [Configure function] 画面で、[Name] フィールドにイベントの名前を入力します。この例では、[SomethingHappened] を使用します。

  4. [Lambda function code] セクションで、以下の例に一致するようにサンプルコードを編集します。

    Copy
    console.log('Loading function'); exports.handler = function(event, context, callback) { console.log('SomethingHappened()'); console.log('Here is the event:', JSON.stringify(event, null, 2)); callback(null, "Ready"); };
  5. [Lambda function handler and role] の [Role] フィールドで、[lambda_basic_execution_rule] があれば、それを選択します。なければ、新しい基本的な実行ロールを作成します。

  6. [Next] を選択してから、[Review] 画面で [Edit] を選択して、変更をすべて行います。関数が適切であることを確認したら、[Create function] を選択します。

ステップ 2: イベントを AWS Lambda 関数にルーティングする

CloudWatch イベント ルールを作成するには:

  1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

  2. ナビゲーションペインの [Events] を選択します。

  3. [Create rule] を選択してから、[Event selector] で [EC2 instance state-change notification] を選択します。

  4. [Specific state(s)] を選択し、リストから [Running] を選択します。

  5. 次のいずれかを行ってください。

    • ルールがリージョン内のインスタンスのいずれにも応答するようにするには、[Any instance] を選択します。

    • ルールが特定のインスタンスに応答するようにするには、[Specific instance(s)] を選択し、テキストボックスにインスタンス ID を入力します。

  6. [Targets] で、[Add target] を選択します。[Select target type] リストで、[AWS Lambda function] を選択します。

  7. [Function] リストで、[Step 1: Create an AWS Lambda Function] で作成した関数を選択します。

  8. [Configure input] を選択してから、以下のいずれかのオプションを選択します。

    • [一致したイベント]

      – イベントのデータフィールドのすべてを CloudWatch ログに送ります。

    • [一致したイベントの一部]

      – イベントの指定したデータフィールドのみを CloudWatch ログに送ります。イベントの一部を指定するために、$.[first_parameter.second_parameter]

      たとえば、Amazon EC2 インスタンス ID のみを送るには、フィールドに「$.detail.state」と入力します。

    • [定数]

      – 指定した JSON 形式のテキスト文字列を CloudWatch ログに送ります。たとえば、イベントのテキスト文字列を送るには、「{"Name":"MyInstance"}」と入力します。定数は有効な JSON である必要があります。

  9. [Configure details] を選択します。[Configure rule details] 画面で、[Name] フィールドにルールの名前を入力します。

  10. [Description] フィールドで、[コマンド実行ステータスの変更をログに記録する] などのルールの簡単な説明を入力します。

  11. ルールが適切であることを確認したら、[Create rule] を選択します。

ステップ 3: Amazon CloudWatch イベント ルールをテストする

Run Command を使ってコマンドを実行することにより、ルールをテストできます。コマンドが処理されるまで数分間待ったら、Amazon CloudWatch イベント コンソールで AWS Lambda メトリクスを調べて、関数が呼び出されたことを確認します。

コンソールを使用して CloudWatch イベント ルールをテストするには

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[Run Command] を選択します。

  3. [Run a command] を選択します。

  4. 1 つ以上のインスタンスでコマンドを実行します。詳細については、「Amazon EC2 Run Command を使用したコマンドの実行」を参照してください。

  5. AWS Lambda メトリクスを表示するには、CloudWatch コンソール https://console.aws.amazon.com/cloudwatch/ を開きます。

  6. ナビゲーションペインの [Metrics] で、[Lambda] を選択して、Lambda 関数によって生成されたメトリクスを表示します。

  7. 関数からの出力を表示するには、ナビゲーションペインで、[Logs] を選択し、[Log Groups] リストで、データを含む [/aws/lambda] ロググループを選択します。

  8. [Log Streams] で、コマンド実行ステータスの変更に関するデータを表示するログストリームを選択します。