CloudFormationテンプレート内でVPCに対するdefaultセキュリティグループ等が参照可能になりました! ほか

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

よく訓練されたアップル信者、都元です。本日、CloudFormationに5点のアップデートがありました。個数も内容も比較的大きめなのでご紹介しますね。

CloudFormation 2014年11月アップデート

Fn:GetAttでVPCのデフォルトリソースのIDが取得できる

CloudFormationで作ったかどうかに関わらず、VPCを作成すると、同時にそのVPCに属する「defaultセキュリティグループ」というものが作成されます。NetworkACLについても同じです。

従来、CloudFormationでは以下のようなテンプレートを書くことができませんでした。

  • VPCを作って…
  • VPCに独自のセキュリティグループSECG-Aを作って…
  • "VPC defaultセキュリティグループ" と "SECG-A" の2つに属するEC2インスタンスを作る

本日のアップデートで、以下のような記述が可能になりました。

"VPC": {
  "Type" : "AWS::EC2::VPC",
  (略)
},
"SSHSecurityGroup" : {
  "Type" : "AWS::EC2::SecurityGroup",
  "Properties" : {
    "VpcId" : { "Ref" : "VPC" }
    (略)
  }
},
"EC2Instance": {
  "Type" : "AWS::EC2::Instance",
  "Properties" : {
    "SecurityGroupIds" : [
      { "Ref" : "SSHSecurityGroup" },
      { "Fn::GetAtt": [ "VPC", "DefaultSecurityGroup" ] }
      (略)
    ]
  }
}

従来、CloudFormationでVPC構築をする場合、defaultセキュリティグループは実質利用できませんでしたので、独自のセキュリティグループを定義する必要がありましたが、このアップデートでテンプレートをよりシンプルに記述できるようになるでしょう。私にとって待望のアップデートでした。うれしい :)

Amazon Route 53リソースの追加

従来、CloudFormationでは、そもそもHosted Zoneを作ることはできず、パラメータ等で指定されたHosted Zoneに対してResource Record *1を追加することしかできませんでした。

本日のアップデートで、Hoted Zoneを定義して作ることもできるようになりました。

欲を言えば昨日のRoute 53のアップデートで加わったprivate hosted zoneにも対応して欲しいと思いましたが、まぁ昨日の今日ですから仕方ないですねw まぁ、すぐ対応されるものと期待しております。

同時にRoute 53のHealth checkもCloudFormationで定義できるようになりました。

Auto Scalingのローリングアップデート拡張

従来からCloudFormationでは、AutoScalingグループ内のEC2インスタンスのローリングアップデート、要するに全部を一度にアップデートするのではなく、少しずつアップデートを行うことによりサービスのダウンを防ぐ方法が提供されていました。

が、手法は単純に「次のアップデートを始めるまで、X分Y秒待つ」というものでした。つまり、例えば2つのインスタンスのアップデートを想像した時、1台目に想定よりもアップデートに時間がかかったりすると、新しいインスタンスが機能し出す前に、2台目のアップデートを始めてしまい、サービス停止を招いてしまうことがありました。かといって待ち時間を長くすると単純にアップデートに時間が掛かり過ぎてしまいます。

本日のアップデートでは、この「待ち」を時間ではなくヘルパースクリプトcfn-signal *2によるシグナルを受信することによって制御できるようになりました。

パラメータ入力にドロップダウンリスト等が使えるように

従来、管理コンソールからのCloudFormationのパラメータ入力は、テキストフィールドにたいする文字入力だけでした。

本日のアップデートで、パラメータの型が追加となり、これにより、一部のパラメータをドロップダウンによる選択等ができるようになりました。

具体的にこんなパラメータを定義すると…

  "Parameters" : {
    "myKeyPair" : {
      "Description" : "Amazon EC2 Key Pair",
      "Type" : "AWS::EC2::KeyPair::KeyName"
    },
    "mySubnetIDs" : {
      "Description" : "Subnet IDs",
      "Type" : "List<AWS::EC2::Subnet::Id>"
    }
  },

こうなります!

2014-11-07_0905

CreationPolicyのサポート

従来から一部のリソースでDeletionPolicyUpdatePolicyというものがありましたが、このアップデートでCreationPolicyが新しくサポートされました。

この属性を設定することにより、従来 WaitCondition - WaitConditionHandle - cfn-signal で行っていたようなEC2リソースの内部初期化待ちをよりスマートに記述できるようになります。

まとめ

私自身もまだ全ての機能を試せてはいませんが、嬉しいアップデートがいっぱいでした。今後のCloudFormationさんにもご期待ください。

脚注

  1. 要するにAレコード定義とか、CNAMEレコード定義とか
  2. 参考: CloudFormationのヘルパースクリプトcfn-initによるインスタンスの初期化