はじめに
CloudFormationで、NAT Gatewayを作成しようとしたところ、タイトルのエラーが発生して1時間くらいハマったのでメモ。
発生したエラー
ResourceType:AWS::EC2::Route, ResourceStatusReason:Route did not stabilize in expected time.
失敗したCloudFormationの結果を見ると、NatGatewayは作成できているものの、deletedになっている。 んんんん?
原因
- ymlの記述が間違っているため
AWS::EC2::Route
タイプのプロパティに誤りがある- 具体的には、Routingの
GatewayId
が違う
- 具体的には、Routingの
NATGateway1a: Type: AWS::EC2::NatGateway Properties: AllocationId: !GetAtt - ElasticIPOnNatGateway1a - AllocationId SubnetId: Fn::ImportValue: !Sub "${ENV}-PublicSubnet1a" # ----------------- # # Routing # ----------------- # PrivateRouteAFromNAT: Type: 'AWS::EC2::Route' Properties: DestinationCidrBlock: 0.0.0.0/0 RouteTableId: Fn::ImportValue: !Sub "${ENV}-PrivateRouteTableA" # ここを修正する GatewayId: !Ref NATGateway1a
解決方法
- NatGatewayを作る場合は、
GatewayId
プロパティではなく、NatGatewayId
プロパティを使う
# ----------------- # # Routing # ----------------- # PrivateRouteAFromNAT: Type: 'AWS::EC2::Route' Properties: DestinationCidrBlock: 0.0.0.0/0 RouteTableId: Fn::ImportValue: !Sub "${ENV}-PrivateRouteTableA" # ここを修正する NatGatewayId: !Ref NATGateway1a
参考
まとめ
あー、はいはい、NatInstanceを作るときは、RoutingにInstanceId
をしたけど、NatGatewayだから、RoutingはGatewayId
だよね!!と、安易に設定したことが原因でした・・・。リファレンスはちゃんと読みましょう。反省。