aaaa

AWS Systems Manager (SSM)のSendCommand機能を使用してEC2インスタンス上のスクリプトを実行することは可能です。以下の手順では、ステップファンクションから直接AWS SSMを使ってEC2インスタンス上のshバッチを実行する方法を説明します。

前提条件

  1. EC2 インスタンスが稼働中
  2. EC2 インスタンスにSSM Agentがインストールおよび起動されていること
  3. EC2 インスタンスが必要なIAMロール(AmazonSSMManagedInstanceCore)を持っていること
  4. 実行したいshスクリプトがEC2インスタンス上に配置されていること

ステップ1: Systems Managerでコマンドを送信するためのポリシー設定

ステップファンクションからSSM SendCommand APIを呼び出すためのIAMロールを設定する必要があります。

  1. IAMコンソールに移動し、新しいロールを作成します。
  2. ロールのタイプとして「AWSサービス」を選択し、「Step Functions」を選択します。
  3. ロールに以下のようなポリシーをアタッチします:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand"
            ],
            "Resource": "*"
        }
    ]
}

また、必要に応じてさらに具体的なポリシーを適用することも可能です。

ステップ2: ステートマシンの作成

次に、ステップファンクションを作成して設定します。

  1. AWSマネジメントコンソールで、ステップファンクションのコンソールに移動します。
  2. 「ステートマシンの作成」をクリックします。
  3. 「一から作成」を選択し、ステートマシン名を入力します。
  4. ステートマシンの定義に以下のようなJSONを使用します:
{
  "Comment": "ステートマシンでEC2上のshバッチを実行する例",
  "StartAt": "SendSSMCommand",
  "States": {
    "SendSSMCommand": {
      "Type": "Task",
      "Resource": "arn:aws:states:YOUR_REGION:YOUR_ACCOUNT_ID:activity:SendSSMCommand",
      "Parameters": {
        "DocumentName": "AWS-RunShellScript",
        "InstanceIds": ["YOUR_INSTANCE_ID"],
        "Parameters": {
          "commands": ["sh /path/to/your/script.sh"]
        }
      },
      "End": true
    }
  }
}
  • YOUR_REGION, YOUR_ACCOUNT_ID, YOUR_INSTANCE_ID は、それぞれの環境に合った値に置き換えてください。
  1. 「次へ」ボタンをクリックし、ステートマシンの作成を完了します。

ステップ3: ステートマシンの実行

  1. 作成したステートマシンを選択します。
  2. 「実行」をクリックし、インプットデータを入力する必要がない場合、そのまま「実行」をクリックします。

これで、ステップファンクションが実行され、SSMのSendCommandを使ってEC2インスタンス上のshバッチスクリプトが実行されるはずです。

追加のステップ (オプション)

バッチスクリプトの実行結果やエラーメッセージを監視するため、SSMのコマンド履歴を確認することをお勧めします。AWS Systems Managerのコンソールに移動し、「コマンド履歴」からコマンドの実行状況を確認できます。

これで、AWS Systems ManagerのSendCommandを使用してステップファンクションからEC2上のshバッチを直接実行する構成が完成です。

コメント

タイトルとURLをコピーしました