AWS CloudFormationとは?
AWSが提供するIaC(Infrastructure as Code)ツールです。
AWS CloudFormation は、インフラストラクチャをコードとして扱うことで、AWS およびサードパーティーのリソースをモデル化、プロビジョニング、管理することができます。
https://aws.amazon.com/jp/cloudformation/
はい。
言葉だけだと難しいです。
AWSを利用したサービスを提供しているのであれば、サーバー(EC2)を借りたりオブジェクトストレージ(S3)を使ったりと多岐にわたるAWSリソースを利用していることでしょう。CloudFormationを利用すると、それらAWSリソースをテンプレートというソースコードとして管理できるようになります。
以下のテンプレートはVPCを定義しています。
CloudFormationを使用して、このファイルを使ってスタック(※1)を作成すると定義どおりにVPCが作成されます。
(※1)CloudFormation内でテンプレートを管理する単位です。
AWSTemplateFormatVersion: '2010-09-09'
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 192.168.0.0/16
EnableDnsSupport: 'true'
EnableDnsHostnames: 'true'
InstanceTenancy: default
ソースコードと言っても、複雑なプログラムではなくAWSリソースの設定内容が記載されたものになります。
テンプレートにはYAMLかJson形式が利用できます。
IaCのメリットとは?
IaCのいいところ
- 環境の複製が容易
- リソースの管理単位が明確
- ソースコードをGitで管理することでバージョン管理が可能でレビューフローなども通しやすい
- 詳細な設定項目のドキュメントでの管理が不要(いわゆるパラメータシートみたいなもの)
個人的には、特に2のリソースの管理単位が明確になる部分が好きです。
クラウドを使っているとクリックひとつでかんたんにリソースを増やせるわけですが、それ故に何用に作成したものなのかが作成した本人にもわからなくなったりすることがあります。
ソースコード上で管理していれば依存関係がソース上で表現されているので明確です。
また、それらをドキュメントに残すだったり、新しい担当者が疑問を持つこともなくなるといったメリットも大きいところです。
まとめ
一度CloudFormationなどのIaCツールでリソースを管理し始めると、手作業で作成することの怖さみたいなものが生まれます。
例えば、試しにELBつくって検証できたぞ。と思って後片付けをしようと削除ボタンに手を伸ばします。
「あれ?このELBでいいんだよね・・・間違ってどっかの環境のELB選択してないよね・・・大丈夫だよね???」
少し面倒でも、IaCツールで作っていれば特に後片付で怖い思いをすることもありません。
学習コストはかかりますが、十分に価値あるものだと思います。
尚、CloudFormationも万能ではなく、いくつかのリソースに関しては管理できないものもあります。頭の片隅に入れておくといいかと思います。