EC2: インスタンスでコマンドを実行

概要

「EC2: インスタンスでコマンドを実行」アクションでは、Amazon EC2インスタンス(以下EC2 インスタンス)上で指定したコマンドを実行することが出来ます。
他のアクションと同様に、リソース IDまたはEC2 インスタンスに付与されているタグでコマンドを実行するEC2 インスタンスを指定することができます。

前提条件

本アクションはバックエンド処理にてAWS Systems Managerを使用しています。AWS Systems Managerが正常に動作する環境でご利用ください。AWS Sytems Managerが動作する条件については公式ページをご確認ください。

現在、マネージドインスタンスであってもオンプレミスのもの("mi-"プレフィックスのもの)はサポートしていません。

設定時のオプション

No. オプション 説明
1 リージョン コマンドを実行するEC2 インスタンスが存在するリージョンを指定します。
2 プラットフォーム コマンドを実行するEC2 インスタンスのプラットフォームを選択します。
3 インスタンス EC2 インスタンスの名前で指定します。
「Can't find any instances in this region or aws account or platform.」と表示される場合はAWSアカウントやリージョンの選択が正しいかご確認ください。
特定のタグがついたインスタンス key と value を入力して、起動するEC2 インスタンスをタグで指定します。
指定されたリージョン内で、入力された key と value に一致するタグがついたすべてのEC2 インスタンスが対象となります。
4 コマンド 実行するコマンドを入力します。
プラットフォームがLinuxの場合はシェルスクリプトを、Windowsの場合はPowerShellスクリプトを入力してください。

※上記シェルスクリプト経由で、EC2インスタンス上の実行可能な別の言語のスクリプト等も実行可能です
5 コメント コマンドの実行にメモを残す場合に入力します
6 バケット名

コマンドの実行ログの出力先となるS3バケットを指定します

7 プレフィックス コマンドの実行ログの主力先となるS3バケット内でプレフィックスを指定する場合に入力します
例)send-command-log
8 実行コマンドの終了ステータスでジョブの成功/失敗を判断する
  • 実行コマンドの終了ステータスをチェックしない場合 
    • SendCommand API リクエストの正否がジョブの実行結果正否となります
  • 実行コマンドの終了ステータスをチェックする場合
    • SendCommand API リクエストが成功且つ、実行したコマンドのステータスが completed になった場合、ジョブが成功したと判断されます
    • SendCommand API リクエストが成功且つ、作成した AMI のステータスが Success 以外( Failed/Execution Timed Out 等)になった場合、ジョブが失敗したと判断されます
    • 実行したコマンドは5分間隔でステータスチェックされます

※ 終了ステータスをチェックする場合、実行するコマンドが終了ステータス (コマンドの成否を表す数値) を返すようになっている必要があります。具体的な方法はこちらをご参考ください。

9 インスタンス接続のタイムアウト秒数 コマンド実行対象となるEC2 インスタンスへ接続出来ずに失敗とみなすまでのタイムアウト秒数を指定します。デフォルトは900秒です。
10 コマンド実行のタイムアウト秒数 コマンドをEC2インスタンスで実行してから、実行タイムアウトになるまでの秒数を指定します。デフォルトは900秒です。
※ 「実行コマンドの終了ステータスでジョブの成功/失敗を判断する」オプションを有効にした場合のみ指定できます。

設定例

  1. Cloud Automatorの画面から「ジョブの追加」メニューを選択します。
  2. グループを選択肢、トリガーの選択で、任意のトリガーを選択ください。
  3. アクションの選択で「EC2: インスタンスでコマンドを実行」アクションを選択します。
  4. AWS アカウントの選択で、対象リソースの操作が可能な任意の AWS アカウントを選択します。
  5. アクションのパラメーターを設定します。(設定例)
    No. オプション 設定値の例
    1 リージョン ap-northeast-1
    2 プラットフォーム Linux
    3 特定のタグがついたインスタンス key: environment
    value: development
    4 コマンド if [ $(($RANDOM % 100)) -le 50 ] ; then
      exit 0
    else
      exit 1
    fi
    5 コメント

    50%の確立で終了ステータス0か1を返します

    6 出力先のS3バケット ssm-logs-cloudautomator
    7 S3に出力するキーのプレフィックス 空白
    8 実行コマンドの終了ステータスでジョブの成功/失敗を判断する する
    9 インスタンス接続のタイムアウト秒数 60
    10 コマンド実行のタイムアウト秒数 300

    Screen_Shot_2019-12-17_at_10.20.00.png
  6. 成功時、失敗時の後処理を設定します。
  7. ジョブ名を入力し、「作成する」をクリックでジョブの作成は完了です。

動作確認

Cloud Automator画面での動作確認

  1. 作成したジョブの詳細画面にある「ログ」ボタンをクリックします。
  2. 実行ログ一覧から該当の実行ログの詳細をクリックします。
  3. ログの詳細にて結果を確認します。「成功」となっていれば該当のジョブが実行されて成功していることが確認できます。「実行中」となっている場合はジョブの実行中なのでしばらく経ってから確認してください。
  4. それぞれのリソースの操作結果は「リソース操作結果」項目で確認することができます。

AWS Management Consoleでの動作確認

  1. AWS マネジメントコンソールにサインインし、EC2へアクセスします
    execute_command14.png
  2. SYSTEMS MANAGER SERVICESメニュー内のコマンドの実行をひらくと実行結果が閲覧出来ます
    execute_command15.png
  3. AWS マネジメントコンソールメニューよりS3へアクセスします
    execute_command16.png
  4. 指定した出力先のS3バケットへアクセスすると、実行ログが書き込まれています
    execute_command17.png

ログのステータス条件

No. ステータス 説明
1 成功

以下のいずれかで成功となります。

  • 実行コマンドの終了ステータスをチェックしない場合 
  • 実行コマンドの終了ステータスをチェックする場合
    • SendCommand API リクエストが成功且つ、実行したコマンドのステータスが completed になった場合、ジョブが成功した場合
2 失敗

以下のいずれかで失敗となります。

  • 実行コマンドの終了ステータスをチェックしない場合 
    • 指定したEC2インスタンスが存在しない 
    • SendCommand APIリクエストが失敗した場合
  • 実行コマンドの終了ステータスをチェックする場合
    • 指定したEC2インスタンスが存在しない 
    • SendCommand APIリクエストが失敗した場合
    • SendCommand API リクエストが成功且つ、実行したコマンドのステータスが Success 以外( Failed/Timed Out 等)になった場合

リソース操作履歴のステータス条件

No. ステータス 説明
1 Completed

以下のいずれかの場合にcompletedとなります。

  • 実行コマンドの終了ステータスをチェックしない場合 
  • 実行コマンドの終了ステータスをチェックする場合
    • SendCommand API リクエストが成功且つ、実行したコマンドのステータスが completed になった場合、ジョブが成功した場合
2 Failed

以下のいずれかの場合にfailedとなります。

  • 実行コマンドの終了ステータスをチェックしない場合 
    • 指定したEC2インスタンスが存在しない 
    • 指定したEC2インスタンスが50を超える場合
    • SendCommand APIリクエストが失敗した場合
  • 実行コマンドの終了ステータスをチェックする場合
    • 指定したEC2インスタンスが存在しない 
    • 指定したEC2インスタンスが50を超える場合
    • SendCommand APIリクエストが失敗した場合
    • SendCommand API リクエストが成功且つ、実行したコマンドのステータスが Success 以外( Failed/Timed Out 等)になった場合

 

コマンド出力を Amazon S3 バケットに書き込む場合のAWSの設定

ジョブの設定で「バケット名」を設定することでコマンド出力をAmazon S3に書き込むことが可能です。

この場合、コマンドを実行するEC2インスタンスの「IAM インスタンスプロファイルロール」と、書き込み先のS3バケットの「バケットポリシー」が適切に設定されている必要があります。

詳しくはこちらのAWS 公式ドキュメントをご確認ください。

Systems Manager の IAM インスタンスプロファイルを作成する

 

このアクションで利用されるAWS API

当アクションの実行には以下のAWS APIを利用しています。
実行するAWSアカウントにはこれらのAPIを実行可能なIAMポリシーがアタッチされている必要があります。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信してください