😎
cdk-bootstrapの謎を追う

2023年4月26日
aws

cdk diffやsynthをした時に無限にbootstrapのエラーが出るのでcdkの処理内容や問題の切り分けなどをする

# context

現在社内のリファクタ運動(通称: 祭り)でcdkのバージョンが古いプロダクトについて一斉にcdkのバージョンをv1からv2にアップグレードしている。

その際に下記のようなエラーが複数のプロダクトで出ており困っている。

Other Changes
[+] Unknown Rules: {"CheckBootstrapVersion":{"Assertions":[{"Assert":{"Fn::Not":[{"Fn::Contains":[["1","2","3","4","5"],{"Ref":"BootstrapVersion"}]}]},"AssertDescription":"CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."}]}}

cdk bootstrapを打てば治るかなと思ったのですが治らず。

cdk synth cfnテンプレートを読むと下記のようになっていた。

Parameters:
  BootstrapVersion:
    Type: AWS::SSM::Parameter::Value<String>
    Default: /cdk-bootstrap/hnb659fds/version
    Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]
Rules:
  CheckBootstrapVersion:
    Assertions:
      - Assert:
          Fn::Not:
            - Fn::Contains:
                - - "1"
                  - "2"
                  - "3"
                  - "4"
                  - "5"
                - Ref: BootstrapVersion
        AssertDescription: CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.

CheckBootstrapVersionに渡される値が1~5が含まれていない場合エラーが出るというルールになっている。

https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/migrating-v2.html

awsのマイグレーションガイドを読むと、このCheckBootstrapVersionのruleはv2から追加されたものらしい。なおかつv1からv2に上げる時には必ず一回はcdk bootstrapを打つ必要があるとのこと。

ちなみに弊社のssmの下記のパラメーターには17が入っていた。 /cdk-bootstrap/hnb659fds/version

# 結論

awsのドキュメント通り、下記の文はエラーではなくルールの追加の変更だけなので気にしなくて良い。v2に上げると自動的に入るassertであってdiffが出るのはそれはそう。

Other Changes
[+] Unknown Rules: {"CheckBootstrapVersion":{"Assertions":[{"Assert":{"Fn::Not":[{"Fn::Contains":[["1","2","3","4","5"],{"Ref":"BootstrapVersion"}]}]},"AssertDescription":"CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."}]}}

逆にこういうエラーが出た場合、cdkのバージョンが低いのでcdk bootstrapをするなり、ssmパラメータの中身を見て適切な対応をするなどする必要がある。(まぁcdk bootstrapすれば自動的に上がるはずだけど)

$ cdk diff
Could not assume arn:aws:iam::756312589703:role/cdk-hnb659fds-lookup-role-756312589703-ap-northeast-1, proceeding anyway.
(To get rid of this warning, please upgrade to bootstrap version >= 8)

# 次回予告

下記のdiffの詳細や影響があるのか、ECRの指定の仕方やscheduleの指定方法などでwarningが出るようになったのでそれの解決法やなぜ出たのかなどについてやる気があれば書きたい。

[~] AWS::ElasticLoadBalancingV2::TargetGroup m2m-users-dev-target-group-id m2musersdevtargetgroupid16970582 
 └─ [+] TargetGroupAttributes
     └─ [{"Key":"stickiness.enabled","Value":"false"}]
[~] AWS::ElasticLoadBalancingV2::LoadBalancer m2m-users-dev-alb-id m2musersdevalbidD2ACCEAB 
 └─ [+] LoadBalancerAttributes
     └─ [{"Key":"deletion_protection.enabled","Value":"false"}]