ランコマンドでスクリプトを流し込みたい!
コマンドのときにRunShellScriptで流し込んでたけど、長いからshファイルとかをそのまま実行してほしい!
毎回実行してほしいけど、定期的に実行するスクリプトを更新するからコマンドを変更するのは面倒!
って時にでも。
事前準備
今回も配布AMIから行う前提です。配布AMIはこちらから。
事前準備として基本的には過去の記事と同じです。
・ssmエージェントの起動 ・インスタンスへのssmフルアクセス権限の付与
違う点が1点、実行するファイルをs3に置いて実行するのでs3のアクセス権限もインスタンスに割り振ってあげてください。IAMロールにありますので。
ウェブアクセスでやってみる
前と同じくweb経由でやってみます。まずはAWS Systems Managerを開きます。
右上のコマンド実行をクリックして要素を埋めていきます。
コマンドのドキュメント
今回はRunRemoteScriptを選びます。
ターゲット
インスタンスの手動選択から実行したいインスタンスを選びます。
ここで出てこない場合にはssmエージェントが起動しているか、インスタンスにssmの権限を与えているかを確認して下さい。
多分選択可能数は1~50のはず。複数台に一気に流し込みも出来ます。
コマンドのパラメータ
こちらの画面から、実行するスクリプトを指定します。
選択できるのは「GitHub」と「S3」どちらかに置いてあるスクリプトを実行することが出来ます。
今回はS3ですので、プルダウンよりS3を選択、「Source Info」に以下のように記入します。
{"path":"https://s3-ap-northeast-1.amazonaws.com/hoge-script/hoge.sh"}
こちらのパスはS3に置いたスクリプトを記入しておいて下さい。gitのファイルではないので今回はこれだけですが、gitの場合にはrepositoryなどの要素も必要みたいです。
次に「Command Line」。こちらには実行するときのコマンドを入れておきます。
hoge.sh
ここまでで完了。「実行」を押せば、スクリプトが自動的に指定したインスタンスで実行されます。
コマンドラインで流し込んで見る。
先程の「実行」の手前、いろいろ入力していた画面の一番下に、AWS コマンドラインインターフェイスコマンドという項目があるのに気づいたでしょうか。
開いて中身を見てみると
AWS コマンドラインインターフェイス (CLI) を使用して、このページで同じアクションを行うことができます。
aws ssm send-command --document-name "AWS-RunRemoteScript" --document-version "\$DEFAULT" --targets "Key=instanceids,Values=i-xxxxxxxxxx" --parameters '{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3-ap-northeast-1.amazonaws.com/hoge-script/hoge.sh\"}"],"commandLine":["hoge.sh"],"workingDirectory":[""],"executionTimeout":["3600"]}' --timeout-seconds 600 --max-concurrency "50" --max-errors "0" --region ap-northeast-1
こんな感じで表示されているはず。
aws cliが使えるサーバーからこれを打てば実行できるよ!(投げやり)