LoginSignup
10
11

More than 5 years have passed since last update.

CoffeeFormation 1.0.1 update

Last updated at Posted at 2014-07-29

地味だけど、結構便利なアップデートが行われたので、ご紹介します。
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

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11