この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。
くコ:彡がトレードマークの阿部です。
CloudFormationでDependOnが必要なケースをご紹介します。
CloudFormationの依存関係
CloudFormationで作成するリソースの構築順は、依存関係に基づき、CloudFormationが自動的に判断します。
例えば、VPCとEC2のテンプレートでCreate Stackした場合、VPCやサブネットが正しく作られてから、EC2が構築されます。
CloudFormationテンプレートを作成するにあたり、ユーザーが依存関係を意識することは"基本的に"ありません。
仮想プライベートゲートウェイとルート伝達の作成は例外の1つです。
ルート伝達の有効化
ルート伝達を有効化するには、AWS::EC2::VPNGatewayRoutePropagation リソースを使います。
VPNGatewayRoutePropagation リソースは、仮想プライベートゲートウェイがVPCにアタッチされるまで、ゲートウェイを利用することが出来ません。
この依存関係は、DependsOn 属性で明示的に示す必要があります。
DependsOn 属性では、VPNGatewayAttachment を指定します。
これにより、ルート伝達は仮想プライベートゲートウェイのアタッチ後に作成されます。
DependOn 属性がない場合、Create Stackに失敗します。
"RoutePropagation": {
"Type": "AWS::EC2::VPNGatewayRoutePropagation",
"DependsOn": "VPNGatewayAttachment",
"Properties": {
"RouteTableIds": [
{
"Ref": "RouteTableID"
}
],
"VpnGatewayId": {
"Ref": "VPNGateway"
}
}
}
サンプルテンプレート
検証に利用したテンプレートを置いておきました。
テンプレートでは、仮想プライベートゲートウェイを作成し、指定したルートテーブルのルート伝達を有効化します。
よろしければ、参考にして下さい。
その他のDependOnが必要なケース
DependsOn 属性が必要になるケースは、AWS CloudFormation ユーザーガイドにまとめられています。
参考
- AWS CloudFormation ユーザーガイド - DependsOn 属性
- AWS CloudFormation ユーザーガイド - AWS::EC2::VPNGatewayRoutePropagation
おわりに
CloudFormationテンプレートを作るにあたり、依存関係を意識する事はほとんどありません。
仮想プライベートゲートウェイとルート伝達の作成は例外の1つであり、DependsOn 属性が必要になります。
Create Stackに失敗した時に思い出して頂ければ嬉しいです。