AWS Systems Manager (SSM)のSendCommand機能を使用してEC2インスタンス上のスクリプトを実行することは可能です。以下の手順では、ステップファンクションから直接AWS SSMを使ってEC2インスタンス上のshバッチを実行する方法を説明します。
前提条件
- EC2 インスタンスが稼働中。
- EC2 インスタンスにSSM Agentがインストールおよび起動されていること。
- EC2 インスタンスが必要なIAMロール(AmazonSSMManagedInstanceCore)を持っていること。
- 実行したいshスクリプトがEC2インスタンス上に配置されていること。
ステップ1: Systems Managerでコマンドを送信するためのポリシー設定
ステップファンクションからSSM SendCommand APIを呼び出すためのIAMロールを設定する必要があります。
- IAMコンソールに移動し、新しいロールを作成します。
- ロールのタイプとして「AWSサービス」を選択し、「Step Functions」を選択します。
- ロールに以下のようなポリシーをアタッチします:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:SendCommand"
],
"Resource": "*"
}
]
}
また、必要に応じてさらに具体的なポリシーを適用することも可能です。
ステップ2: ステートマシンの作成
次に、ステップファンクションを作成して設定します。
- AWSマネジメントコンソールで、ステップファンクションのコンソールに移動します。
- 「ステートマシンの作成」をクリックします。
- 「一から作成」を選択し、ステートマシン名を入力します。
- ステートマシンの定義に以下のような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は、それぞれの環境に合った値に置き換えてください。
- 「次へ」ボタンをクリックし、ステートマシンの作成を完了します。
ステップ3: ステートマシンの実行
- 作成したステートマシンを選択します。
- 「実行」をクリックし、インプットデータを入力する必要がない場合、そのまま「実行」をクリックします。
これで、ステップファンクションが実行され、SSMのSendCommandを使ってEC2インスタンス上のshバッチスクリプトが実行されるはずです。
追加のステップ (オプション)
バッチスクリプトの実行結果やエラーメッセージを監視するため、SSMのコマンド履歴を確認することをお勧めします。AWS Systems Managerのコンソールに移動し、「コマンド履歴」からコマンドの実行状況を確認できます。
これで、AWS Systems ManagerのSendCommandを使用してステップファンクションからEC2上のshバッチを直接実行する構成が完成です。

コメント