Cloudformationとは、AWSリソース(EC2、S3、VPC、RDSなど)をコードで定義・管理するためのサービスだ。
つまり、インフラをコードとして管理できるツールで、以下のような特徴がある
・YAMLまたはJSON形式のテンプレートで記述
・一貫性のあるデプロイが可能
・AWS CLI や AWS Console、SDKなどから実行できる
・「スタック」という単位でリソースをグループ化
・他のAWSサービス(IAM, Lambda, SNSなど)と簡単に統合
これまで自分はリソースを構築してはいたもののあくまで「手動(コンソール画面上でぽちぽちとやっていく)」だった。
その為、別環境用に同じリソースを作成するとなった場合やはりぽちぽち作業が必要となる。
それにより作業漏れや忘れなどがあり
「あれ、、前はちゃんと動いたのに。。」と既存のリソースとの各種設定のにらめっこが始まってしまう。。
それを回避するためにCloudformationはいわば必須の知識だったといえる。
じゃあどうやってそのコードYAMLを書けばいいの?どんな記述フォーマット?プロパティがあるの?
ご安心を。AWSには近年これに関する良いサービスが追加されていた。
その名もIaC(Infrastructure as Code)ジェネレータ。
これを使えば自アカウントに紐づくリソースから、既存リソースを構築するためのコードを出力してくれる。
つまり、手動作成 ⇒ ジェネレータ出力すれば一からYAMLを作成せずともリソースをコード化できるのだ。
例えば以下の様に、一連のシステムで使うリソースをYAMLファイルに定義したとする。
・S3バケット
・EventBridge
・Lambda
・RDS
このYAMLファイルをCloudformationでインポートすると上記リソースが自動生成されるわけだが、
手動でぽちぽち構築した場合と異なり、
それらはスタックという単位で紐付くことになる。
このスタックを消せば追加したリソースは全て消える(設定により消えなくすることも可能)為、消し漏れによる無駄な課金が発生することもない。
また、システムの関連性も可視化できるので、
「システムAではこれらのリソースを使っているんだなぁ。。」と第三者も見て取れる。
Cloudformationは今まで名前は聞いたことは合っても実際に使ったことは無く。。
(というより自分はインフラ側は苦手で意識的に遠ざかっていたこともあり。。)
今回良い機会で触れることができた。
これからはYAMLベースでリソースを構築してしまうのもアリだなと思った。