最近AWSで気の効いた仕組みを作ろうとするとだいたいCloudFormation(CFn)を使っているので,自分も少しくらい取り扱えるようになっておかねばと思っていた.
そこでこういう記事を見て,入門には丁度良いなと思いやってみたメモ.
AWSTemplateFormatVersion: '2010-09-09' Resources: FirstVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16
サンプルに載っている上掲のコードを保存して,ひとまずコンソールから手でテンプレートを読み込ませて実行した.するとVPCがちゃんと作成された.
ところでテンプレートのバージョンは古びていないか心配になってきた.調べてみたところこれが最新だったので,チュートリアルをそのまま読んでも良さそうと判断した.
!Ref
で参照するとそのリソースが先に生成されるとのことだが,DependsOn
を使うと同様に依存関係を宣言してそちらを先に作ることができるらしい.だがどれがどれに依存するべきか考えるのは大変そうだ.「ルート」と「ルートテーブル」のどちらが先に作られていなければならないか,パッとすぐには分からない(実際はルートがプロパティとしてRouteTableId
を要求する).まあこういうのはマニュアルを見ながら覚えるということか.
Construct
そういえば同僚からConstructという用語を聞いたなということを思い出した.これはStackとは違うのか.
調べてみたらConstructはCDK用語だった.
CDK
CFnのテンプレートを1から書いてみたことで,CDKが欲しくなる気持ちがよくわかった. 自分だったら「最終的にCFn templateを出力するコードをCommon Lispで作れないかな〜」って絶対に言うと思った.RoutingTableクラスみたいなのを作ってそこにRouteをaddしてやればいいじゃん〜って絶対になる.ドメインモデリングじゃんと思った.
そういうわけでそのうちCDKに入門するかもしれないけど,シンプルさは損なわれるし,環境構築が面倒という欠点はありそう.
CLI
せっかくなのでCLIでもやってみる.
% aws --region=ap-northeast-1 --profile=priv cloudformation create-stack --stack-name test2 --template-body file://./test-cfn.yml
テンプレートを指定するのに--template-body file://
の形式を使うのがけっこう厄介だなと思った.勘でパス指定してたけどやっぱりダメでちゃんと調べ直した.