地味だけど、結構便利なアップデートが行われたので、ご紹介します。
npm install -g csfn
で更新されると思います。
Include機能
usage: csfn [-I dir] hoge.coffee [ puge.coffee ... ] > hogepuge.template
テンプレート間で共通で使うような定義を切り出して、参照する機能となります。
インクルードパスを指定すると、その配下のcoffeeスクリプトをテンプレートの前に読みます。
サンプル
各リージョンのAmazon Linux AMIのマッピングです。
amznAmiMapping=
"eu-west-1":
pv: "ami-2918e35e"
hvm: "ami-4b18e33c"
"sa-east-1":
pv: "ami-215dff3c"
hvm: "ami-635dff7e"
"us-east-1":
pv: "ami-fb8e9292"
hvm: "ami-978d91fe"
"ap-northeast-1":
pv: "ami-c9562fc8"
hvm: "ami-bb562fba"
"us-west-2":
pv: "ami-043a5034"
hvm: "ami-383a5008"
"us-west-1":
pv: "ami-7aba833f"
hvm: "ami-5aba831f"
"ap-southeast-1":
pv: "ami-b40d5ee6"
hvm: "ami-860d5ed4"
"ap-southeast-2":
pv: "ami-3b4bd301"
hvm: "ami-cf4ad2f5"
これをテンプレートで参照するには、先頭行のように代入します。
Mappings.amis=amznAmiMapping # refer pre-defined object in include/*.coffee
Resources.small=
Type: "AWS::EC2::Instance"
Properties:
ImageId: "Fn::FindInMap":["amis",{Ref:"AWS::Region"},"pv"]
InstanceType: "m1.small"
Resources.medium=
Type: "AWS::EC2::Instance"
Properties:
ImageId: "Fn::FindInMap":["amis",{Ref:"AWS::Region"},"hvm"]
InstanceType: "m3.medium"
実際にテンプレート作成、スタック作成を行ってみます。
~/work/csfn/samples$ tree
.
├── bucket.coffee
├── ec2.coffee
├── include
│ └── amaznAmiMapping.coffee
└── rds.coffee
1 directory, 4 files
~/work/csfn/samples$ csfn -I include ec2.coffee
{
"AWSTemplateFormatVersion": "2010-09-09",
"Mappings": {
:
}
~/work/csfn/samples$ aws cloudformation create-stack --stack-name ec2 --template-body "$(csfn -I include ec2.coffee)"
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:111111111111:stack/ec2/e4794e00-1738-11e4-89a4-5088487ec896"
}
includeしてもテンプレート内で参照(代入)しなければ、JSONとしては出力されません。
~/work/csfn/samples$ csfn bucket.coffee
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"Bucket": {
"Type": "AWS::S3::Bucket",
"Properties": {
"BucketName": "my-special-bucket"
}
}
}
}
~/work/csfn/samples$ csfn -I include bucket.coffee
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"Bucket": {
"Type": "AWS::S3::Bucket",
"Properties": {
"BucketName": "my-special-bucket"
}
}
}
}
謝辞
ナイスな機能実装ありがとうございました>sumikawa-san