CloudformationでEC2にPublicIP+固定PrivateIPを割り当てる
いつからCloudformationだと思った?
やったーー!!kumogata(winebarrel/kumogata · GitHub)でした!
JSON書くのはExcel方眼紙のプリントレイアウト設定するのと同じぐらいに辛いので、kumogataを使いました。
cloudformationドキュメントを読んでいるとEC2にPublicIPを割り当てるためのResourceは存在しないらしい。
EIPはAWS::EC2::EIPがあるのにな・・・
PublicIPと固定PrivateIPを割り当てる方法はAWS::EC2::NetworkInterfaces内で定義すること。
どうもENIに対して割り当てないといけない模様です
理由はEC2のドキュメントに書いてあるようなきがするので読まないと...
AWS::EC2のPropertyでもPrivateIP, SubnetID, SecurityGroupを設定できるがPublicIPを当てる場合は書いてはいけない。このようなエラーでRollbackされる。
Network interfaces and an instance-level subnet ID may not be specified on the same request
以下例
- orenoinstance.rb
orenoInstance do Type "AWS::EC2::Instance" Properties do InstanceType "t2.small" KeyName {Ref "KeyName"} Monitoring true ImageId BASE_EBS_AMI_ID Tags [ "Key" => "Name", "Value" => "orenoinstance", ] BlockDeviceMappings [ _{ DeviceName "/dev/xvda" Ebs {VolumeSize 100} } ] NetworkInterfaces [ _{ AssociatePublicIpAddress true PrivateIpAddress "10.10.20.30" DeviceIndex "0" GroupSet [ _{Ref "orenoSecurityGroup"}, _{Ref "publicSecurityGroup"}, ] SubnetId {Ref "orenoSubnet"} } ] end end
- kumogataで作る
kumogataを実行する。DSLがParseされcloudformationが走る。
kumogata実行時の-pオプションでパラメータの上書きも可能
orenomac$ kumogata create orenoinstance.rb development
さいこうです!!