bokunonikki.net
JP / EN

failed bootstrapping: Error: CDK the stack named CDKToolkit failed creation

Tue Mar 28, 2023
Tue Mar 28, 2023

AWS CDKでBootstrapを実行したときに failed bootstrapping: Error: The stack named <名前>-CDKToolkit failed creation, it may need to be manually deleted from the AWS console: ROLLBACK_COMPLETEのエラーに遭遇した時の対処法をメモしておきます。

コンソールのエラーメッセージだけでは、何が原因かわからなかったのでCloudFormationでエラーの詳細が出ていないか確認しました。

Export with name CdkBootstrap-hnb659fds-FileAssetKeyArn is already exported by stack <名前>-CDKToolkit. Rollback requested by user.

エラーから考えるに「既に作ってるよとだから作れません」と。

しかし、僕は作った覚えはありませんし、CloudFormationも確認しましたがこのCDKを作った形跡はありませんでした。一体なにが原因のなのか? しかも前はこのやり方でBootstrapに成功していました。

結論から言うと原因は前に作ったCDKが原因でした

このエラーが発生する前は普通にBootstrapに成功していて、同じリージョン内でこのエラーが発生したとなるとそうなるよなと思いそうなものですが。違うCDKでスタック名も違うのにと思って、あれやこれや時間を無駄に過ごしてしまいました、、、

で、詳細はというと。

CDKはデフォルトでBootstrapやdeployをする場合はqualifierというランダムな数字がリソース内部で使われています。デフォルトはhnb659fdsです。

これが肝です!!!

–qualifierは、ブートストラップスタックのすべてのリソースの名前に追加される文字列です。修飾子を使用すると、を使用して同じ環境で複数のブートストラップスタックをプロビジョニングするときに、リソース名の衝突を回避できます–toolkit-stack-name。デフォルトはですhnb659fds (この値には意味がありません)。 修飾子を変更するには、CDK アプリが変更された値をスタックシンセサイザーに渡す必要もあります。詳細については、「スタック・シンセサイザー」を参照してください。

ブートストラッピング

CDKの--show-templateオプションを実行しテンプレートを確認してみます。

1
cdk bootstrap --show-template > bootstrap-template.yaml --profile dev --context stage=development

実際にテンプレート確認するとありました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# bootstrap-template.yaml
FileAssetKeyArn:
  Description: The ARN of the KMS key used to encrypt the asset bucket (deprecated)
  Value:
    Fn::If:
      - CreateNewKey
      - Fn::Sub: ${FileAssetsBucketEncryptionKey.Arn}
      - Fn::Sub: ${FileAssetsBucketKmsKeyId}
  Export:
    Name:
      Fn::Sub: CdkBootstrap-${Qualifier}-FileAssetKeyArn

CDKのスタック名を変更してもQualifierはそのままだとデフォルトのhnb659fdsが使われるのでエラーになるということでした。なので、エラーの解消法してはBootstrap時にQualifierを指定してやる必要があります。こんな感じでね。

1
cdk bootstrap --profile dev --context stage=development --qualifier rf4849gas

単純なエラーですがスタック名も違うし、まさか、と思うようなエラーでした。CDKのエラーメッセージは不親切なのでお気つけて。ちなみこのQualifierの面倒なエラーはこれで終わりません。それはまた次回。

See Also