AWS Systems Manager ドキュメント作成をサポートする Document(Playbook) Builder が登場しました!

2019.12.18

園部です。

re:Invent 前ですが AWS Systems Manager Document まわりでもアップデートがありました! 遅まきながらやっていきたいと思います!!

具体的には、以下の2つが追加されています!

  • Document(Playbook) Builder
  • 任意スクリプトの実行

それぞれもう少し紐解いていきたいと思います。

Document(Playbook) Builder

以前までは、Automation Document を自前で作成するには YAML か JSON で定義する必要がありました。。

AWS Systems Manager のドキュメントを作って、使ってみた。

今回登場した Document Builder では、マネジメントコンソールで GUI をベースに Document 作成を支援する機能です。また Markdown でドキュメントの説明を記載することや「エディタ」タブで記述した Document の YAML を確認することが可能です。

任意スクリプトの実行

aws:executeScript を利用して、任意のスクリプト実行が可能となりました。

  • サポートされているランタイム
    • Python 3.6
    • Python 3.7
    • PowerShell Core 6.0

やってみた

今回は 公式ドキュメント 記載内容の以下の処理をやってみたいと思います。

  • Python3.6 を利用して特定 AMI から EC2 を起動
  • Python3.6 を利用して起動した EC2 のステータスが OK となることを確認

aws:executeScript 実行用Role作成

aws:executeScript を実行するには、IAM サービスロールが必要となるため作成します。

オートメーションドキュメントのステップに aws:executeScript アクションが含まれている場合、アクションに指定されている Python スクリプトまたは PowerShell スクリプトが AWS API アクションを呼び出す場合は、IAM サービスロール(ロールの引き受け)が常に必要です。オートメーションは、このロールを次の順序でチェックします。

公式ドキュメント(オートメーション実行のアクセス許可)

今回は、公式ドキュメント(AWS CloudFormation を使用してサービスロールを作成する) を利用して CloudFormation で作成します。
※ CloudFormation Stack の実行は割愛します。

作成された ロールARN をコピーしておきます。

Document 作成

AWS Systems Manager >>> ドキュメント >>> オートメーションの作成 を選択します

「名前」を入力します

「ドキュメント説明」では、処理概要や必要なパラメーターをMarkdown で記載します

「ロールを継承」は、先ほど作成した IAM ロールを記載します

「入力パラメータ」では、ドキュメント内共通のパラメータを定義できます。

一つ目の処理である 「AMI から EC2 起動する」 Python3.6 を利用したスクリプトを記載します

冒頭で設定した「入力パラメータ」を利用する内容を記載します

このステップでの結果を次のステップで利用する設定を記載します

ステップを追加 を選択します

二つ目の処理である 「起動した EC2 のステータスが OK となることを確認」 Python3.6 を利用したスクリプトを記載します

一つ目の処理の結果を利用する設定を記載します

オートメーションを作成 を選択します

作成が成功すると AWS Systems Manager >>> ドキュメント >>> 自己所有 に Document が作成されます

Automation Document 確認

AWS が提供している Document を同様に内容を確認することが可能です。

「コンテンツ」で YAML としての内容を確認できます。 これをベースに新しい内容を作成することも可能だと思います。

Automation Document 実行

オートメーションの実行 >>> 実行 を選択します

無事処理が開始されました。

しばらくすると、2つとも処理が成功しました。

EC2 の画面に遷移すると EC2 がちゃんと起動しています!!

さいごに

公式ドキュメントのサンプルを模写する形となってしまったため処理内容に物足りなさはありますが、すべてを YAML ないし JSON で定義する以前の方法より容易に Document を作成することが出来ました。またスクリプトを実行することが可能となったことで処理の柔軟性や用途も広がるのではないかと思います。今まで Document 作ってみたいけど、、、と感じていた方には朗報なのではないでしょうか(私はとても嬉しいです)。 また今回は割愛しましたが Document のアカウント共有やバージョン管理機能を利用することでより便利にPlaybook を管理することが可能になるかと思います。