こんにちは。kosukeです。(すみませんがまだちゃんと書けてないです)
はじめに
突然ですがAWS Systems Manager Runbookは好きですか!!!
私は最近Solrの環境構築をRunbookで実装する機会がありました。
これの中でずっと頭を悩ませていたaws:createStack
にパラメーターを渡すやり方について考えたことを忘れる前にまとめようと思います。
Runbookとは
オートメーションは、AWS のサービス (Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Relational Database Service (Amazon RDS)、Amazon Redshift、Amazon Simple Storage Service (Amazon S3) など) でのメンテナンス、デプロイ、および修復に関する一般的なタスクを簡素化するための、AWS Systems Manager の一機能です。
オートメーションは、AWS リソースを大規模にデプロイ、設定、管理のための、自動化されたソリューションを構築するのに役立ちます。オートメーションを使用すると、自動化の同時実行性をきめ細かく制御できます。同時実行のターゲットにするリソースの数や、オートメーションを停止する前に許容可能なエラーの発生数を指定することが可能です。
Runbookでスクリプト実行したり、スクリプトの実行、インスタンスに対してコマンドを実行したりできます。
本題
Runbook1つでSolrインスタンス、書き込みAPI、アラーム等全部を作ろうとしていてそれらはCloudFormationで構築しようと考えておりました。
そこで問題になったのが、RunbookでCloudformationのデプロイを行うCreateStackの機能にはパラメーターをファイルで渡す機能がないことです。
素直にやろうとすると、Automationのデプロイテンプレートに全てのCFnのテンプレートを渡す方法がありますけど、これはしんどすぎる。。。
そこで考えた方法を紹介します。
案1: CloudFormationのデプロイをexecuteScriptで実行する
CFnの実行をPythonもしくはPowerShellで実行する。
実装次第で色々なパラメーターの渡し方ができる
s3のbucketをパラメーターに渡して渡すことができる
案2: AWS::Includeを使ってパラメーターを渡す
CloudFormationのテンプレートをモジュール化して渡すようにする。
runbookの中にパラメーターを直書きするようになってしまうので、AWSアカウント上のrunbookのパラメーターを使ってどうこうするみたいなのをやりずらくなる
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html
うまくまとまっていないですが、少しずつまとめていきます。