こんにちはtakaokaです。
Run Command はローカルのサーバにログインすること無くマネジメントコンソールやaws cliからOSコマンドを発行できる機能で、今回CentOS6環境で試してみました。
Run Commandを使用する前提条件は公式ページのこちらが参考になります。
実施の流れ
CentOS6のインスタンスを2台用意するとして、下記の流れで実施しました。
- コマンドを処理するためのEC2用IAMロールを作成する
- No1のIAMロールを割り当ててCentOS6をインストールする
- CentOS6にSSMエージェントを導入する
- マネジメントコンソールからRun Commandを発行
- Run Commandの結果を確認する
1. コマンドを処理するためのEC2用IAMロールを作成する
No3でRun Commandの要求を処理するSSMエージェントをOS側に導入しますが、EC2側でSSMを操作するための許可ロールをIAM画面から作成します。
・名前はssmとしました。
・ロールタイプは「Amazon EC2」を選択。
・ポリシータイプに「ssm」と検索し、「AmazonEC2RoleforSSM」を選択。
2. No1のIAMロールを割り当ててCentOS6をインストールする
CentOS6のインスタンス2台を作成します。 作成時の「インスタンスの詳細の設定」の「IAMロール」設定でNo2で作成したIAMロールを指定します。
3. CentOS6にSSMエージェントを導入する
Run Commandの要求を処理するSSMエージェントをOS側に導入します。
$ mkdir /tmp/ssm $ curl https://amazon-ssm-ap-northeast-1.s3.amazonaws.com/latest/linux_amd64/amazon-ssm-agent.rpm -o /tmp/ssm/amazon-ssm-agent.rpm $ sudo yum -y install /tmp/ssm/amazon-ssm-agent.rpm [/shell] ssmエージェントを導入するとエージェントのプロセスも起動されます。 [shell] $ ps -ef | grep ssm root 1299 1 0 05:14 ? 00:00:00 ./amazon-ssm-agent centos 1308 1245 0 05:15 pts/0 00:00:00 grep ssm
4. マネジメントコンソールからRun Commandを発行
早速マネジメントコンソールからコマンドを実行してみます。 Ec2コンソール左メニューの「コマンド」を選択して「コマンドを実行」をクリックします。
コマンド実行の設定画面が表示されます。設定画面では実行するコマンド入力欄の他に「コマンドのドキュメント」(事前に定義されたコマンドの種類)や出力結果のS3バケット保存設定、タイムアウト値などが設定できます。
「コマンドのドキュメント」は下記の種類がありました。
上記から「AWS-RunShellScript Linux」を選択します。
「インスタンスの選択をクリック」するとRun Commandの実行が可能なインスタンスが表示されるので対象の2台を選択してみます。
「Commands」に実行するコマンドを入力します。ここでは「uname -a」を入れてみます。
その他の設定はデフォルト値のまま「実行」を押してみます。
5. Run Commandの結果を確認する
コマンドの実行結果を見てみます。 2台のインスタンスにコマンド「uname -a」を実行したのでステータス画面に2つの結果が表示されました。 確認対象にチェックを入れ、出力タブの「出力の表示」を表示します。
インスタンス1台目の実行結果
1台目と同様、2台めの「出力の表示」から確認
このように複数台に同じコマンドを発行することができました。
マネジメントコンソールのコマンド設定画面にはaws cli用のコマンド表示がされています。
aws cliが使用環境が整っていれば下記のようにしてコマンドを発行することもできます。
# aws ssm send-command --document-name "AWS-RunShellScript" --instance-ids "i-f6092953" "i-367ffab9" --parameters '{" commands":["uname -a"],"executionTimeout":["3600"]}' --timeout-seconds 600 --region ap-northeast-1 { "Command": { "Status": "Pending", "ExpiresAfter": 1453866012.174, "Parameters": { "commands": [ "uname -a" ], "executionTimeout": [ "3600" ] }, "DocumentName": "AWS-RunShellScript", "InstanceIds": [ "i-f6092953", "i-367ffab9" ], "CommandId": "024fc42d-2861-482b-9d39-28c99f0c162a", "RequestedDateTime": 1453865412.174 } } #