AWS Systems Manager Automation が標準で出来ること(Action, Document) #reinvent

2017.12.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

re:Invent 2017 会期中に発表になった AWS Systems Manager ですが、利用するには「何ができるか、どこを作り込まなければならないか」を知る必要があります。

今回は「自動化(Automation)」に限定して、具体的に何が出来るかをまとめてみました。

概要

ここでは AWS Systems Manager Automation の、下記の2項目についてまとめます。

  • Automation アクション
  • 事前定義済み Automation ドキュメント

AWS Systems Manager Automation はその実行する処理の内容を「ドキュメント」という単位( JSON ファイル)で管理します。

そのドキュメントは、ひとつあるいは複数の「アクション」で成り立っています。ドキュメント = スクリプトとしたら、アクション = 各コマンドと言えるかと思います。

アクション

AWS Systems Manager に組み込まれているアクションをまとめます。細かい説明は下記を参照して下さい。

EC2

アクション 説明
aws:changeInstanceState インスタンスの状態を変更する(running / stopped / terminated)
aws:runInstances インスタンスを起動する
aws:createTags 新しいタグを作成する
aws:runCommand リモートコマンドを実行する

AMI

アクション 説明
aws:createImage 実行中のインスタンスから AMI を作成する
aws:deleteImage AMI を削除する
aws:copyImage 任意のリージョンから現在のリージョンに AMI をコピーする

CloudFormation

アクション 説明
aws:createStack テンプレートから新しい AWS CloudFormation スタックを作成する
aws:deleteStack AWS CloudFormation スタックを削除する

その他

アクション 説明
aws:approve 承認または拒否されるまで、一時的にオートメーションの実行を停止する
aws:sleep 自動化の実行を指定する時間で遅延させる
aws:executeAutomation セカンダリ自動化ドキュメントを呼び出し実行する
aws:invokeLambdaFunction Lambda 関数を実行する

事前定義済み ドキュメント

AWS Systems Manager には、いくつかのドキュメント(と、そのドキュメントから呼び出される Lambda 関数)が最初から用意されています。下記にそのリストをまとめます(自動化のみ)。

ドキュメント名 WithApproval コメント
AWS-RestartEC2Instance EC2 インスタンスを再起動 (stop/start) する
AWS-StartEC2Instance 停止状態の EC2 インスタンスを起動 (start) する
AWS-StopEC2Instance 起動した状態の EC2 インスタンスを停止 (stop) する
AWS-TerminateEC2Instance EC2 インスタンスを終了・削除する
AWS-UpdateCloudFormationStack CFnスタックをアップデートする
AWS-DeleteCloudFormationStack CFnスタックを削除する
AWS-UpdateLinuxAmi AMI をアップデートする(Linux)
AWS-UpdateWindowsAmi AMI をアップデートする(Windows)
AWSSupport-ExecuteEC2Rescue EC2Rescueを実行する
AWSSupport-ResetAccess EC2Rescueを使用してパスワードをリセットする

「WithApproval」のカラムに「○」が記入されているドキュメントには、実行時に承認操作が必要なドキュメントも別途用意されています。

EC2Rescue は、AWS が用意している非常用のツールです。詳細は下記をご覧下さい。

所感

用意されているアクションの数は意外と少ないのですが、それを補う aws:invokeLambdaFunction アクションが強力すぎます。はっきり言ってしまえば「 Lambda を書けば何でも出来る」と言えるでしょう。

ドキュメントのネストも可能(aws:executeAutomation)なので、部品のようにドキュメントを用意して、approve や sleep を織り交ぜつつワークフローをくみ上げることも可能かと思われます。

一方で、それは「 Lambda を書かなくては出来ることが限られる」ということになるので、各々ワークフローを見極めつつ充実させて行く必要があるようです。正直いまの段階では、自動化については EC2 Systems Manager からほとんど変化がなく、欲を言えば RDS 等の他の AWS サービス用のアクションが標準で欲しくなるのですが、これは今後の拡充に期待でしょうか。

事前定義済みドキュメントから呼び出される既成の Lambda 関数もあるはずなので、こちらについてもいずれ深掘りしてみたいと思います。