⚙️

AWS Systems Manager ドキュメント (SSM ドキュメント) で EC2 をプロビジョニング

に公開

まえがき

本記事では SSM ドキュメントを利用して、EC2 をプロビジョニングする例を紹介します。ここではホスト名の設定を行います。

構成図

architecture

SSM ドキュメント採用理由

  • プロビジョニング用のサーバー (Ansible, Jenkins, etc...) が不要になる
  • プロビジョニング実行やログ確認にサーバーへのログインが不要になる

Ansible 採用理由

  • 手作業による誤りや漏れを防止できる
  • シェルスクリプトと比べ、冪等性を担保しやすい

GitHub 採用理由

  • Playbook を各サーバーに展開しやすい (git clone するだけ)
  • 変更内容の確認やレビューがしやすい

SSM ドキュメント作成

以下リポジトリを参考にしてください。Terraform を利用しています。

https://github.com/namusour0763/ssm_document_sample

https://github.com/namusour0763/ssm_document_sample/blob/main/terraform/modules/ssm_document/ssm_document_apply_ansible.tf

https://github.com/namusour0763/ssm_document_sample/blob/main/terraform/modules/ssm_document/template_apply_ansible.yml

SSM ドキュメント実行

まずプロビジョニング前の EC2 を確認してみます。セッションマネージャーで接続しホスト名を調べると、自動で設定されるものになっています。

connect ec2
hostname before

では SSM ドキュメントを実行してみましょう。マネジメントコンソールから作成したドキュメントを選択し「コマンドを実行する」をクリックします。

exec ssmdoc
exec ssmdoc

ホスト名の入力とターゲットのインスタンスの選択をします。

exec ssmdoc

ログを S3 ではなく CloudWatch Logs に書き込むよう選択します。

exec ssmdoc

残りはそのままで「実行」をクリックします。

exec ssmdoc

正常に実行できたか確認しましょう。

ssmdoc result
ssmdoc result

ログが少々見にくいので、CloudWatch Logs からも確認してみましょう。

ssmdoc log
ssmdoc log

実際にホスト名が変更できているか確認します。想定通りの結果が得られました!

hostname after

まとめ

SSM ドキュメントを用いることで、サーバーレスで EC2 を設定することが可能です。このためだけにサーバーを管理する必要がなくなりました!プロビジョニング用にサーバーを増やす前に、一度 Systems Manager の利用を検討してみてください。

Discussion