【初級編】AWS CDKを使用してデプロイする際にハマったポイント

AWS運用自動化サービス「Cloud Automator」

こんにちは、今期から技術4課に配属になりました古川です。 最近はコロナウィルスの影響で、ジムに行くことが出来ず悶々としています。

本記事では、AWS Cloud Development Kit(以下、CDK)を使用してCDKアプリをデプロイする際にハマったポイントを紹介します。

AWS CDKとは、AWS上のインフラ構成をプログラミング⾔語で定義し、CloudFormation を通じてデプロイするためのフレームワークです。

前提

CDKスタックは既に定義済みで、AWS環境にCDKアプリをデプロイする準備ができている状態とします。

デプロイ

「cdk list」コマンドで、「cdkworkshop」が定義されていることを確認できます。

初めてデプロイする際は「cdk bootstrap」コマンドにより、CloudFormationで利⽤するデプロイ⽤のS3 バケットを作成します。※このバケットはリージョン単位で必要になります

マネージドコンソールからS3バケットを確認すると、指定したリージョンに「cdktoolkit-stagingbucket-*********」という名前のバケットが作成されています。

「cdk deploy」コマンドにより、スタックで定義されているCDKアプリをデプロイします。

3. ハマった箇所

構築したCDKアプリを修正するために、デプロイしたCDKアプリを削除する必要がありました。しかし、構築した環境の設定を一部マネージドコンソール上で変更してしまったがため、「cdk destroy」コマンドが使えませんでした。

そこで、「cdk bootstrap」で作成したS3バケットと「cdk deploy」で作成したS3バケットを、マネージドコンソール上で削除し、再度「cdk bootstrap」コマンドによりCloudFormationで利⽤するデプロイ⽤のS3バケットを作成しようと試みました。

CLI上では、削除したはずのCloudFormation⽤S3バケットが存在しています。 再度、「cdk deploy」コマンドにより、CDKアプリをデプロイすると以下のようなエラーが表示されました。

エラー文を見ると、やはり物理的にはCloudFormationイ⽤S3バケットは存在していないようです。

解決方法

解決方法は2つ考えられます。

1. cdk.jsonに追記

cdk.jsonに「”toolkitStackName”: “任意の名前”」を追記します。

再度、「cdk bootstrap」コマンドを実行すると、新たにCloudFormation⽤S3バケットが作成されました。

2. 別のリージョンにデプロイする。

aws configureにて設定したリージョンとは別のリージョンに、cdkアプリをデプロイします。
「export」コマンドにて、aws configureの環境変数を一時的に変更します。

この解決方法は、いわば応急処置のようなもので、上記エラーの根本的な解決にはなっていないので推奨はしません。

まとめ

今回のエラーは、CloudFormation⽤S3バケットを削除した場合、同じスタック名のCloudFormation⽤S3バケットは作成できないことが起因していました。

また、cdk.jsonにて「toolkitStackName」を設定していない場合、デフォルトで「CDKToolkit」というスタック名のCloudFormation⽤S3バケットが作成されることも留意しておいた方が良いです。

一度作成したCloudFormation⽤S3バケットは、なるべく削除しないよう心がけましょう

AWS運用自動化サービス「Cloud Automator」