紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【CloudFormation】Route, ResourceStatusReason:Route did not stabilize in expected time. エラーの解決方法

f:id:yokoyantech:20181207175720p:plain

はじめに

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が違う
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

参考

aws.amazon.com

まとめ

あー、はいはい、NatInstanceを作るときは、RoutingにInstanceIdをしたけど、NatGatewayだから、RoutingはGatewayIdだよね!!と、安易に設定したことが原因でした・・・。リファレンスはちゃんと読みましょう。反省。