route table rtb-xxxxx and network gateway igw-xxxxx belong to different networksと言われて困った時の話

  • 1
    いいね
  • 0
    コメント
    この記事は最終更新日から1年以上が経過しています。

    概要

    awsのcloudformationを使って色々管理してて、タイトルのようなエラーが出て困ったときの話です。
    再現できたので、解決方法とか書いておこうと思います。
    cloudformationのeventsは下記のような感じでした。

    20:41:25 UTC+0900   UPDATE_ROLLBACK_IN_PROGRESS AWS::CloudFormation::Stack  test-stack  The following resource(s) failed to update: [WebGroup, PublicRoute, AttachGateway, SSHGroup, PublicSubnetA].
    20:41:24 UTC+0900   UPDATE_FAILED   AWS::EC2::SecurityGroup WebGroup    Resource creation cancelled
    20:41:24 UTC+0900   UPDATE_FAILED   AWS::EC2::SecurityGroup SSHGroup    Resource creation cancelled
    20:41:18 UTC+0900   UPDATE_FAILED   AWS::EC2::VPCGatewayAttachment  AttachGateway   Resource update cancelled
    20:41:18 UTC+0900   UPDATE_FAILED   AWS::EC2::Subnet    PublicSubnetA   Resource creation cancelled
    20:41:17 UTC+0900   UPDATE_FAILED   AWS::EC2::Route PublicRoute route table rtb-xxxxx and network gateway igw-xxxxx belong to different networks
    20:41:16 UTC+0900   UPDATE_IN_PROGRESS  AWS::EC2::Route PublicRoute Requested update requires the creation of a new physical resource; hence creating one.
    20:41:10 UTC+0900   UPDATE_COMPLETE AWS::EC2::RouteTable    PublicRouteTable    
    20:41:08 UTC+0900   UPDATE_IN_PROGRESS  AWS::EC2::RouteTable    PublicRouteTable    Resource creation Initiated
    20:41:08 UTC+0900   UPDATE_IN_PROGRESS  AWS::EC2::Subnet    PublicSubnetA   Resource creation Initiated
    20:41:08 UTC+0900   UPDATE_IN_PROGRESS  AWS::EC2::RouteTable    PublicRouteTable    Requested update requires the creation of a new physical resource; hence creating one.
    20:41:08 UTC+0900   UPDATE_IN_PROGRESS  AWS::EC2::SecurityGroup WebGroup    Requested update requires the creation of a new physical resource; hence creating one.
    20:41:08 UTC+0900   UPDATE_IN_PROGRESS  AWS::EC2::Subnet    PublicSubnetA   Requested update requires the creation of a new physical resource; hence creating one.
    20:41:08 UTC+0900   UPDATE_IN_PROGRESS  AWS::EC2::SecurityGroup SSHGroup    Requested update requires the creation of a new physical resource; hence creating one.
    20:41:05 UTC+0900   UPDATE_IN_PROGRESS  AWS::EC2::VPCGatewayAttachment  AttachGateway   
    20:41:01 UTC+0900   UPDATE_COMPLETE AWS::EC2::VPC   VPC 
    20:40:44 UTC+0900   UPDATE_IN_PROGRESS  AWS::EC2::VPC   VPC Resource creation Initiated
    20:40:43 UTC+0900   UPDATE_IN_PROGRESS  AWS::EC2::VPC   VPC Requested update requires the creation of a new physical resource; hence creating one.
    20:40:29 UTC+0900   UPDATE_IN_PROGRESS  AWS::CloudFormation::Stack  test-stack  User Initiated
    

    実際のテンプレート

    テンプレート1(変更前)
    https://gist.github.com/ara-ta3/27b47ec058710b419a28#file-cloudformation-template-for-error-before-json

    テンプレート2(変更後)
    https://gist.github.com/ara-ta3/27b47ec058710b419a28#file-cloudformation-template-for-error-after-json

    変更前後でVPCとPublicSubnetのCIDRを変更してます。
    間違えて作っちゃったんで変更してupdateするかみたいなシナリオです。

    原因

    VPCを変更したためRouteTableが作り直しになり、
    InternetGatewayを参照しているRoute設定が作り直しになります。
    さらに、VPCの変更によりInternetGatewayをAttachするVPCGatewayAttachmentも作り直しになるのですが、
    RouteがVPCGatewayAttachmentに依存していることがここではわからないので、
    Attachされる前のInternetGatewayを参照してしまうことで起きています。
    なので、DependsOn属性をつければ解決されます。

    DependsOnをつけて治したものがこれです。
    https://gist.github.com/ara-ta3/27b47ec058710b419a28#file-cloudformation-template-for-error-fixed-json

    これでupdate-stackすると成功しています。
    https://gist.github.com/ara-ta3/27b47ec058710b419a28#file-cloudformation-events-tsv

    参考