【Tips】CloudFormationでDependOnが必要なケース

2016.07.07

この記事は公開されてから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 ユーザーガイドにまとめられています。

参考

おわりに

CloudFormationテンプレートを作るにあたり、依存関係を意識する事はほとんどありません。
仮想プライベートゲートウェイとルート伝達の作成は例外の1つであり、DependsOn 属性が必要になります。
Create Stackに失敗した時に思い出して頂ければ嬉しいです。