オートメーションランブックのオーサリング - AWS Systems Manager

オートメーションランブックのオーサリング

AWS Systems Manager の一機能である Automation の各ランブックは、オートメーションを定義します。オートメーションランブックは、オートメーション中に実行されるアクションを定義します。ランブックコンテンツでは、Systems Manager が管理対象インスタンスと AWS リソースで実行する入力パラメータ、出力、およびアクションを定義します。

Automation には、いくつかのランブックが事前に定義されており、1 つ以上の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの再起動や、Amazon Machine Image (AMI) の作成といった一般的なタスクを実行する際に使用することができます。ただし、ユースケースは、事前定義されたランブックの機能を超える場合があります。このような場合は、独自のランブックを作成し、必要に応じて変更することができます。

ランブックは、オートメーションアクション、それらのアクションのパラメータ、および指定した入力パラメータで構成されます。ランブックのコンテンツは YAML または JSON のいずれかで記述されています。YAML または JSON に精通していない場合は、ドキュメントビルダーを使用するか、独自のランブックを作成する前に、いずれかのマークアップ言語について学習することをお勧めします。ドキュメントビルダーの詳細については、 チュートリアル: ドキュメントビルダーを使用してカスタムランブックを作成する を参照してください。

以降のセクションは、最初のランブックの作成に役立ちます。

ユースケースの特定

ランブック作成の最初のステップは、ユースケースの特定です。例えば、AWS-CreateImage ランブックを Amazon EC2 インスタンスのすべての本番環境で毎日実行するようにスケジューリングしたとします。月末に、イメージ数がリカバリーポイント用に必要な分を超えていると判断しました。今後は、Amazon EC2 インスタンスの AMI が新しく作成されるたびに、最も古い AMI から削除したいと考えました。これを行うには、次の処理を実行するランブックを新規作成します。

  1. aws:createImage アクションを実行して、イメージの説明でインスタンス ID を指定します。

  2. aws:waitForAwsResourceProperty アクションを実行して、available になるまでイメージの状態をポーリングします。

  3. イメージの状態が available になると、aws:executeScript アクションがカスタム Python スクリプトを実行し、Amazon EC2 インスタンスに関連付けられている全イメージの ID を収集します。スクリプトは、作成時に指定したイメージ記述のインスタンス ID を使用して、フィルタリングによってこれを実行します。次にスクリプトは、イメージの creationDate に基づいてイメージ ID のリストをソートし、最も古い AMI の ID を出力します。

  4. 最後に、aws:deleteImage アクションが実行され、前のステップで出力された ID を使用して、最も古い AMI が削除されます。

このシナリオでは、既に AWS-CreateImage ランブックを使用してはいたものの、ユースケースではさらなる柔軟性が必要であることがわかりました。ランブックとオートメーションアクションが重複する可能性があるため、これは一般的な状況です。結果として、ユースケースに対処するために使用するランブックやアクションを調整する必要がある場合があります。

例えば、aws:executeScriptaws:invokeLambdaFunction のアクションでは、どちらでもオートメーションの一部としてカスタムスクリプトを実行できます。この 2 つの間では、サポートされているランタイム言語が追加されているため、aws:invokeLambdaFunction の方を選ぶことにになるかもしれません。ただし、スクリプトコンテンツを YAML ランブックで直接作成でき、スクリプトコンテンツを JSON ランブックの添付ファイルとして提供できるため、aws:executeScript の方がよいこともあります。また、aws:executeScript のほうが AWS Identity and Access Management (IAM) のセットアップという観点からはよりシンプルであるという点も検討すべきかもしれません。AutomationAssumeRole で提供されるアクセス許可を使用するため、aws:executeScript では、追加の AWS Lambda 関数の実行ロールは必要ありません。

特定のシナリオでは、あるアクションが別のアクションよりも柔軟性、または追加機能を提供する可能性があります。したがって、使用するランブックまたはアクションで使用可能な入力パラメータを確認して、ユースケースとプリファレンスに最適なものを判断することをお勧めします。

開発環境をセットアップする

ユースケースと、ランブックで使用する事前定義済みのランブックまたはオートメーションアクションを特定したら、ランブックのコンテンツ用に開発環境をセットアップします。ランブックコンテンツを開発するには、Systems Manager ドキュメントコンソールよりも AWS Toolkit for Visual Studio Code を使用することを推奨します。

Toolkit for VS Code は、Visual Studio Code (VS Code) のオープンソースの拡張機能であり、Systems Manager ドキュメントコンソールよりも多くの機能を提供します。便利な機能には、YAML と JSON の両方のスキーマ検証、オートメーションアクションタイプのスニペット、YAML と JSON の両方のさまざまなオプションのオートコンプリートのサポートなどがあります。

Toolkit for VS Code のインストールについては、AWS Toolkit for Visual Studio Code のインストールを参照してください。Toolkit for VS Code を使用してランブックを作成する方法については、AWS Toolkit for Visual Studio Code ユーザーガイドの「Systems Manager オートメーションドキュメントの使用」を参照してください。

ランブックコンテンツの開発

ユースケースを特定して環境をセットアップしたら、ランブック用のコンテンツを開発できます。ユースケースとプリファレンスは、ランブックコンテンツで使用するオートメーションアクションまたはランブックに大きく影響します。一部のアクションでは、同様のタスクを実行できる別のアクションと比較して、入力パラメータのサブセットのみがサポートされます。aws:createImage のように特定の出力を持つアクションがありますが、中には独自の出力 (aws:executeAwsApi など)を定義できるアクションもあります。

ランブックで特定のアクションを使用する方法がわからない場合は、Systems Manager Automation アクションのリファレンス のアクションに対応するエントリを見直すことをお勧めします。また、定義済みのランブックの内容を確認して、これらのアクションの使用方法の実例を確認することもお勧めします。ランブックの実際のアプリケーションの例については、サンプルシナリオとカスタムランブックソリューション を参照してください。

ランブックのコンテンツが提供するシンプルさと柔軟性の違いを実証するために、以下のチュートリアルでは、Amazon EC2 インスタンスのグループに段階的にパッチを適用する方法の例を示します。

  • 例 1: 親子のランブックの作成 — この例では、2 つのランブックが親子関係で使用されています。親ランブックが、子ランブックのレート制御のオートメーションを開始します。

  • 例 2: スクリプト化されたランブック — この例では、コンテンツを 1 つのランブックと判断してランブックでスクリプトを使用することにより、例 1 と同じタスクを実行する方法を示します。