Edited at

CoffeeFormation

More than 5 years have passed since last update.


CoffeeFormation とは?

Coffee Script + Cloud Formation = CoffeeFormation

CoffeScriptの記法でCloudFormationのテンプレートを書こうという物です。


どんな感じで書くの?

Resources.Bucket=

Type: "AWS::S3::Bucket"
Properties:
BucketName: "my-special-bucket"

これが

{

"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"Bucket": {
"Type": "AWS::S3::Bucket",
"Properties": {
"BucketName": "my-special-bucket"
}
}
}
}

こうなります。


どう使うの?

# npm経由でインストール

$ npm install -g csfn
/usr/local/bin/csfn -> /usr/local/lib/node_modules/csfn/bin/csfn
csfn@1.0.0 /usr/local/lib/node_modules/csfn
└── coffee-script@1.7.1 (mkdirp@0.3.5)

# 変換して出力してみる
$ cat bucket.coffee
Resources.Bucket=
Type:"AWS::S3::Bucket"
Properties:
BucketName: "my-special-bucket"
$ csfn bucket.coffee
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"Bucket": {
"Type": "AWS::S3::Bucket",
"Properties": {
"BucketName": "my-special-bucket"
}
}
}
}

# AWS CLIに渡す
$ aws cloudformation create-stack --stack-name mybucket --template-body "$(csfn bucket.coffee)"
arn:aws:cloudformation:ap-northeast-1:123456789012:stack/mybucket/5de182a0-fe91-11e3-92e7-5088487c4896


何がいいの?

以下のメリットがあります。


  • コメントが書ける

  • JSONの文法エラーがなくなる (Atom等のエディタで随時コンパイルしながら書けばさらに安心)

  • ヒアドキュメントが書ける

commands = '''

#!/bin/sh
yum install -y httpd
service httod start
chkconfig httpd on
'''

:

Resources.Webserver=
Type: "AWS::EC2::Instance"
Proprerties:
:
UserData: "Fn::Base64":command


  • 繰り返しの定義をコードに出来る

Resources.Master=

Type: "AWS::RDS::DBInstance"
Properties:
AllocatedStorage: 5
DBInstanceClass: "db.t1.micro"
Engine: "mysql"
EngineVersion: "5.6.17"
MasterUsername: "admin"
MasterUserPassword: "password"

for i in [1..5]
Resources["Slave"+i]=
Type: "AWS::RDS::DBInstance"
Properties:
SourceDBInstanceIdentifier: "Ref":"Master"


追記

少し改良。いきなり、"Resources.hoge=" で書き始められるようになりました。

リソースをグルーピングして、別ファイルに分けたい場合とかに便利かもしれない。


追記2

npmでインストールできるようにしてみた。