LoginSignup
1
0

More than 5 years have passed since last update.

AWS cloudwatch のイベントを使ってSystems ManagerのRun Commandをトリガーする時ハマるポイント

Posted at

DEFINE

SSM: AWS Systems Manager
ssm-agent: SSMの一部サービスを実行してくるagent
Run command: SSMのサービスの一つ

背景

AWSのSystems ManagerのRun Command機能を使えば、sshせずにインスタンス群にコマンドを送信できます。

Run Commandの準備(ざっくり)

  1. ターゲットインスタンスにssm-agentをインストール
  2. コンソールのManaged Instancesのところにagentがインストールされたインスタンスがオンライン(緑)になったのを確認
  3. インスタンスにssm-agentが必要とするIAMロールをつけます
  4. awsユーザーにssmを実行する権限があることを確認
  5. コンソール・コマンドラインなどからコマンドを実行する

Cloudwatchにルールを設定してRun Commandをトリガーする

嬉しいところ:scheduled eventを設定すればcronjobと同じことができます
例:毎晩自作サービスのログをS3にバックアップする(古い〜サービスなのでログファイル名以外中身バラバラの場合、fluentdを設定するのが大変なのでとりあえずs3にあげます)

ハマるところ

SSMのコンソールからコマンドを入力する時

ps aux
ls 
cd /var/log

のようにコピペーすれば実行できますが、cloudwatchの設定画面だとうまく行きません。SSMのコンソール画面に入ってエラーメッセージを確認してみると、
渡したcommandパラメーターが間違ったのがわかりました

正しい方(SSMコンソールから設定)

{"commands":["pa aux","ls","cd /var/log",""],"executionTimeout":["3600"],"workingDirectory":[""]}

間違い方(Cloudwatchにコピペー)

{"commands":["pa aux ls cd /var/log "],"executionTimeout":["3600"],"workingDirectory":[""]}

commandsの方に全部まとめられて改行なしのメガワンラインコマンドにされました、、

解決方法

まずSSMコンソールから実行して、成功したパラメーターからcommands部分をCloudwatchに設定します

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0