いきなりコードを書きはじめるよるよりも、まずはここで記載する前提知識を理解すると、全体のスピードをよりあげられると思います。コード記述の前に以下5項目のテンプレート基本構文、関数、CLI、クロススタック、ネストを是非学んでおいてください。
テンプレートの基本構文
コードを記述する骨組みです。主要なものだけ記載します。
Parameters
入力値を記述します。環境変数みたいなもので、あとからこのコードを流すときにパラメーターを渡してあげることができます。
Resources
ここがメイン部分です。実際に構築するリソースを記載します。Typeでリソースの種別、Propertiesで実際の設定値を記載します。
Outputs
コードを流した後に出力させるパラメータを記載します。ネストやクロススタックなどで使います。
実際のコード
VPCを構築するときのコードです。このコードを大枠として考えればよいです。Parametersで変数の設定、Resourcesで実際の設定値、Outputsでは他のファイルから参照できるようにエクスポートしています。
AWSTemplateFormatVersion: "2010-09-09"
Description: VPC,Subnet
Parameters:
sysname:
Type: String
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.1.0.0/16
Tags:
- Key: Name
Value: !Sub ${sysname}-vpc
Outputs:
Vpc:
Value: !Ref VPC
Export:
Name:
※参考
関数
コードの記述をより便利にさせてくれます。主要な関数は Ref と Sub と GetAtt です。あとはImportValueくらいをおさせておけば良いです。
Ref
コードは前述の「テンプレートの基本構文 / 記載した実際のコード」を参照してください。!Ref VPCと記載があいります。ここれではOutput部にRefが記載されていますが、ここではエクスポートしたい情報をResourcesのVPCリから取得しています。
Sub
こちらもコードは前述のコードを参照してください。!Sub ${sysname}-vpcと記載があります。Refの情報に追加の文字列を追加したいときなどに使います。まずシステム名をParameterから取得し、その後に指定した文字列を追加しています。
GetAtt
Refでとれず、Subでもかけるけど、コードが長くなってしまうパターンなどを回避できる関数です。主にArnの利用などで使われます。下記の例ではサブスクリプションフィルタ自体に付与するネストされたIAMロールと、送信先の取得で使用しています。
Resources:
SubscriptionFileter01:
Type: AWS::Logs::SubscriptionFilter
Properties:
DestinationArn: !GetAtt DeliveryStream01.Arn
FilterPattern: ""
LogGroupName: !Ref LogGroupName01
RoleArn: !GetAtt SubscriptionFileterRole.Outputs.SubscriptionFileterRole
ImpolrtValue
クロススタックのときに使います。詳細はクロススタックの箇所で記述します。
※関数についてより詳細を学びたい方はこちら
CLI(deployコマンド)
CloudFormationは一般にS3にテンプレートファイルをおいてスタックを流しますが、長期的な構築をするならこのCLIを利用しましょう。基本的にはdeployさえ使えればなんとかなります。--stacke-nameでスタック名を指定、--stacke-nameでテンプレートファイルを指定します。
aws cloudformation deploy --stack-name network-stack --template-file network.yaml
--parameter-overrides
テンプレート内で指定したparameterをコマンド内から読み込めるようにできます。ここではparameterを外出ししたファイルに統一して書いているので、一度ファイルをcatしてから読み込ませるという動作をさせています。コマンドにparameterを仕込むというのは汎用性的にあまりよろしくないと思うので、この記述を基本としてよいかと思います。
aws cloudformation deploy --stack-name network-stack --template-file network.yaml --parameter-overrides $(cat parameters.yaml)
なおparameterファイルは以下のような記述で記載します。
sysname=XXX
password=XXX
BucketNameXxx=XXX
TemplateXXX=https://XXXX
email=XXX@gmail.com
...
--capabilities CAPABILITY_NAMED_IAM
IAM関連のresourcesをデプロイするときはこのオプションをつけましょう。おまじないみたいに考えてもらえればよいです。
aws cloudformation deploy --stack-name iam-stack --template-file iam.yaml --parameter-overrides $(cat parameters.yaml) --capabilities CAPABILITY_NAMED_IAM
--no-execute-changeset(オプション)
deployに関しては変更の確認なしにデプロイされてしまうので注意です。デプロイは行わず、変更を確認したいときはこのオプションをつけましょう。
aws cloudformation deploy --stack-name test-stack --template-file template.yaml --parameter-overrides $(cat parameter.yaml) --no-execute-changeset
前チャプターでCloudformationの難点として紹介しましたが、失敗したスタックに対して再デプロイするときは、一度スタックを削除しなければならないということです。削除のスタックに対する再デプロイはGUIから実行してからdeployコマンドを流しましょう。
※その他コマンドを知りたい方はこちらへ