こんにちは。miztr55です。 今日はAWSのサービスを組み合わせて自動化したものを備忘録的に書き留めていきます。
背景
- 弊社では、たくさんのメディアを管理しており、その管理ユーザーの登録作業がかなりの負荷だった
- すでにある程度効率化、自動化されていたが、より自動化させる目的で、既存のスクリプトなどを使ってよりパワーアップさせて形にしたかった
- 後述のサービスを使えば、簡単に複数サーバへのコマンド実行をさせられることを知っていたので、それらを組み合わせてより効率化させたかった
アーキテクチャ
下図のように、パラメータストアの更新をきっかけに、Event Bus内でEventBridgeがそのきっかけをキャッチします。
EventBridgeでは、複数のターゲットを指定し、必要なEc2へSystems Managerドキュメントを実行させています。
実行時に通知として、社内コミュニケーションツールであるSlackに飛ばしています。
*パラメータストアの内容はSystems Manager内で別途取得しています
実装方法
*Systems ManagerドキュメントからEc2へ実行させる部分についての実装内容は省きます
Event Busの設定
検出ができるようにしておく。「開始済み」になっていれば検出されます。
Event Brigde、ルールの作成
EventBridge>バス>ルールに進む。
「ルールを作成」ボタンで作成画面にいき、下記を実施。
1. 名前や説明を記載
2. 上記で「開始済み」にしたイベントバスを選択
3. 「イベントパターンを持つルール」を選択
その後、後述の設定に進みます。
イベントパターンの設定
1.イベントソースは、「その他」を選択(後述のカスタムパターンを選択すると強制的にこちらになります)
2.サンプルイベントは、任意
3.作成のメソッドは、「カスタムパターン(JSONエディタ)」を選択
今回は「カスタムパターン(JSONエディタ)」で記述してます。
イベントパターンで、何をきっかけにこのルールを作動させるかを記述します。
ここでは、パラメータストアを変更したら作動する、という記述をしています。
{ "source": ["aws.ssm"], "resources": ["arn:aws:ssm:ap-northeast-1:[アカウントID]:parameter/[パラメータ名].lst"], "detail-type": ["Parameter Store Change", "Parameter Store Policy Action"] }
ターゲットの設定
例1. CloudWatchログ出力させたい場合
ロググループの箇所に、作成しておいたCloudWatchロググループを指定
例2. Systems Managerドキュメントを実行させたい場合
ちなみに、ターゲットキーの箇所は、Ec2のインスタンスIDでも指定できます。
例3 Slack通知させたい場合
今回はパラメータストアが更新されたときに、そのパラメータストアのリソース名を通知するようにしました
入力トランスフォーマーを設定
ターゲット入力トランスフォーマー例
{"DetailType":"$.detail-type","Resource":"$.resources[0]","Title":"$.detail.findings[0].Title"}
テンプレート例
{ "channel":"[channel_id]", "text":":heavy_exclamation_mark: <DetailType>\n<Title>\nResource : <Resource>\n\n" }
通知例
:びっくり_赤: Parameter Store Change Resource : arn:aws:ssm:ap-northeast-1:[アカウントID]:parameter/[パラメータストア名].lst
実行の確認
本来は、パラメータストアの変更をきっかけに、CloudWatchログが出力するか、あるいはSystems Managerドキュメントが実行されたかを確認する必要がありますが、今回はその手順の記載を割愛します。(おそらく他の方が書いた記事がたくさんあると思いますので)
後者だけ簡単に記載すると、Systems Manager>RunCommand>コマンド履歴にて、実行が成功していれば履歴が載ります。
所感
いかがでしょうか。思ったより簡単に設定できたのではないでしょうか。
僕の場合は、初めて触って試行錯誤しながら実装した(ダイレクトな記事が見つからなかった汗)ことであったり、後述のマネジメントコンソールの不具合によって時間がかかりましたが、設定方法がわかっていればすぐ実装できると感じました。
他にもいろいろ応用が効きそうなので、より活用していきたいと感じました。
おまけ
ぼくが実装していたときのEventBridgeは、ターゲットのSystems Managerドキュメントのバージョン指定ができており、バージョン指定をしてそのドキュメントを実行させようとすると、うまく作動しないという現象がおきていました。
代理店を通してAWSさんに問い合わせたところ、マネジメントコンソール上の不具合とのことが判明しました。原因がまさかAWSさん側にあるとは思いませんでしたので、けっこうハマりました...笑
おそらくそのうち修正されると思われます。。笑