I.T.の
エンジニアブログ

WebサービスをCloudFormation化してみた

公開: 2021/10/27更新: 2024/12/8

AWSのリソース管理が大変すぎる

私が作ったWebサービスや、このブログはAWSで運用しています。
今まではほとんど手動でリソースを作ったり削除したりしていました。
ステージング環境など、何度も作ったり壊したりするものはAWS CLIやシェルスクリプトを使ってはいましたが、 それだけだとわかりにくすぎて、大変すぎました。
そんなに規模的には大きくないのに、自分で作っているのに、どこに何があるのか、全体像が把握できません。 そんな中で今までだましだましやってきました。

そうだ、CloudFormationを使おう

そんな中、CloudFormationという便利なものがあるらしいということを知りました。
どうやら各種リソースをテンプレートとしてコード化して、コマンド一発で作ったり壊したりできるものらしいです。
いい機会なので、ちゃんと全体を見通しよくするために、テンプレート化できそうなものはしてしまおうと思いました。

土台的なスタック

まず、VPC系のリソースやSG、RouteTable、IGW、NATなど、 サービスで共通で使うものを土台的なスタックとしてたてることにしました。 こうすれば、今あるサービスだけでなく、これから新しく作ってもこの上に載せられるので。
ALBや、RDSもここで作ることにしました。 ALBに関してはルールを分ければ各サービスにルーティングできるし、RDSもデータベースを分ければいいかなと思いまして。 ALBもRDSも高いから、ちょっとした節約です。
ということで以下のような構成になりました。

base_stack

ここで、サービスのテンプレート側で必要なパラメータ(VPCのIDとか)をSSMパラメータとして作っておくことで、 後で参照できるようにします。

サービスのスタック

そして、この上にサービスのスタックなどを載せていきます。
構成の仕方はいろいろあると思いますが、今回はECSクラスターを作って、 LaunchConfiguration、AutoScalingGroup、ターゲットグループ、ALBのルールを作ります。
あと、訳あってリクエストはCloudFrontを挟ませたいのでDistributionも。
その他、こまごまとしたものを作って完成です。
以下のような構成になりました。

service_stack

あと、このブログも一緒に載せておくことにしました。
インスタンスを立ててALBのルールを作るだけなので、手作業でやりました。

まとめ

いやぁ大変でした。
でもこれで作ったり壊したりは楽にできるようになったし、大体のリソースに関してはぱっと見てわかるようになりました。 リソースをコード化してバージョン管理できるのも良いですね。
Dockerとかもそうですけど、やっぱりIaCって便利ですね。
二度とやりたくないですけど。