最近社内で少しだけ話題として出てきているCloudFormationを使ってみました。
CloudFormationはAWSの環境構築を自動で行ってくれるサービスです。
使い方は簡単です。
マネジメントコンソールからCloudFormationを選び指示に従って入力するだけです。
構築内容の設定は3種類の方法で指定できます。
・AWSが用意したサンプルテンプレートから選択
・構築内容を記述したjsonファイルを読み込む
・GUIのツールを使用して作成
今回は「構築内容を記述したjsonファイルを読み込む」方法を使いました。
次のような構築内容を記述したjsonファイルを作成し、マネジメントコンソールから読み込みました。
{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "PublicSubnetA" : { "Type" : "AWS::EC2::Subnet", "Properties" : { "AvailabilityZone" : "ap-northeast-1a", "CidrBlock" : "172.XXX.XXX.XXX/24", "MapPublicIpOnLaunch" : false, "VpcId" : "vpc-XXXXXXXX" } }, "SSHSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "VpcId" : "vpc-XXXXXXXX", "GroupDescription" : "Enable SSH access via port 22", "SecurityGroupIngress": [{ "IpProtocol" : "tcp", "CidrIp" : "0.0.0.0/0", "FromPort" : "22", "ToPort" : "22" }] } }, "WebSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "VpcId" : "vpc-XXXXXXXX", "GroupDescription" : "Enable HTTP access via port 80", "SecurityGroupIngress": [{ "IpProtocol" : "tcp", "CidrIp" : "0.0.0.0/0", "FromPort" : "80", "ToPort" : "80" }] } }, "EC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "ami-59bdb937", "InstanceType" : "t2.small", "SubnetId" : { "Ref" : "PublicSubnetA" }, "KeyName" : "keypairName", "SecurityGroupIds" : [ { "Ref" : "SSHSecurityGroup" }, { "Ref" : "WebSecurityGroup" } ] } }, "IPAddress1" : { "Type" : "AWS::EC2::EIP", "Properties" : { "Domain" : "vpc", "InstanceId": { "Ref": "EC2Instance" } } } } }
※VPCだけは予め用意している状態からのスタートになります(デフォルトでも可)。
結果、EC2のインスタンスの作成が行われました。
本記事では構築方法について細かい解説は致しません。
他の記事の方が画像付きで細かく解説されているからです。
本記事ではCloud Formationを使用する上で発生したエラーと対処方法について紹介します。
①The image id ‘[ami-54cf5c3d]’ does not exist
jsonで指定したAMIが存在しないために発生しました。
AmazonLinuxのAMIは頻繁にIDが変わるため古い記事からコピペをすると引っかかりますので注意が必要です。
②Non-Windows instances with a virtualization type of ‘hvm’ are currently not supported for this instance type.
指定したインスタンスタイプが古いために発生しました。
Cloud Formation指定できるインスタンスタイプはマネジメントコンソールで指定できるものと同等です。
新規で作る場合はhvmのインスタンスタイプは作成できません。
上記同様に古い記事からコピペするとこれも引っかかりますので注意が必要です。
③The specified instance type can only be used in a VPC. A subnet ID or network interface ID is required to carry out the request.
インスタンスを作成する際にVPCを指定していないため発生しました。
インスタンス自体にはVPCを設定しなくても問題はないのですが、紐付かせるサブネットやセキュリティグループに関しては必要です。
それらについてVPCのIDを設定、もしくは作成するVPC名を指定すればエラーは解消されます。
④The parameter groupName cannot be used with the parameter subnet
サブネットにVPCが設定していないため発生しました。
上記のエラーに近いものです。
以上、こんなエラーが発生しました。
参考にしたサンプルが古いために発生したエラーが多いです、
Cloud Formation自体はかなり古く、2012年くらいから存在しています。
サンプルを探す場合はできるだけ新しい記事を参考にするのがいいでしょう。
今回は簡単に触れてみたレベルですが今後も何度か試し、実運用ができるまで持っていきたいです。