🧩
AWS CDK で作成したリソースを変更するとどうなる?
はじめに
AWS CDK で作成したリソースをコンソールから変更すると、実機とコードに差分が生まれてしまいます。このときの挙動を Terraform と比べたく調査しました。
検証内容と検証結果(概要)
- CDK で S3 バケットを作成
-
cdk deploy
する - S3 バケットにマネコンから新規にタグを付与
-
cdk diff
を実行 → 差分表示なしNumber of stacks with differences: 0
-
cdk deploy
を実行 → 変更なしCdkTestStack (no changes)
- CDK のコード内で上記と異なる新規のタグを付与
-
cdk diff
を実行 →差分表示あり ただしマネコンで付与したタグが消える表示はなし -
cdk deploy
を実行 → 変更あり CDK のタグが付与され、マネコンで付与したタグが消失
検証結果(詳細)
マネコンからタグを付与したのみで、コードは変更しない場合
ターミナル
namusour@DESKTOP-K4JMPSM:~/cdk_test$ cdk diff --profile some-profile
Stack CdkTestStack
Hold on while we create a read-only change set to get a diff with accurate replacement information (use --no-change-set to use a less accurate but faster template-only diff)
There were no differences
✨ Number of stacks with differences: 0
namusour@DESKTOP-K4JMPSM:~/cdk_test$ cdk deploy --profile some-profile
✨ Synthesis time: 4.26s
CdkTestStack: deploying... [1/1]
✅ CdkTestStack (no changes)
✨ Deployment time: 0.18s
Stack ARN:
arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:stack/CdkTestStack/75d7de10-a80c-11ef-96c9-0e569e4b2f3d
✨ Total time: 4.44s
手動でつけた owner: alice タグが残っている
マネコンからタグを付与し、コードからも変更した場合
ターミナル
namusour@DESKTOP-K4JMPSM:~/cdk_test$ cdk diff --profile some-profile
Stack CdkTestStack
Hold on while we create a read-only change set to get a diff with accurate replacement information (use --no-change-set to use a less accurate but faster template-only diff)
Resources
[~] AWS::S3::Bucket CDKFirstBucket-20241121 CDKFirstBucket202411217D68ED46
└─ [+] Tags
└─ [{"Key":"CreatedBy","Value":"CDK"}]
✨ Number of stacks with differences: 1
namusour@DESKTOP-K4JMPSM:~/cdk_test$ cdk deploy --profile some-profile
✨ Synthesis time: 4.28s
CdkTestStack: deploying... [1/1]
CdkTestStack: creating CloudFormation changeset...
✅ CdkTestStack
✨ Deployment time: 37.15s
Stack ARN:
arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:stack/CdkTestStack/75d7de10-a80c-11ef-96c9-0e569e4b2f3d
✨ Total time: 41.43s
手動でつけた owner: alice タグが消え、コードの値で上書きされる
CloudFormation の画面から、手動でドリフトの検出をした場合
コンソールからドリフトの検出をした場合は、実機との差分がわかる
まとめ
-
terarform plan
は「手元の tf ファイル」と「デプロイ済みの実リソース」を比較する -
cdk diff
は「手元の CDK App の Synth 結果」と「デプロイ済みの CloudFormation Stack」を比較する - ゆえに CDK では実機の変更に気付かず巻き戻してしまう可能性が高く、より注意が必要
コンソール操作あり | コンソール操作+コード変更あり | |
---|---|---|
terraform plan |
差分あり(巻き戻り) | 差分あり(巻き戻り+変更差分) |
cdk diff |
差分なし | 差分あり(コード変更差分のみ) |
terraform apply |
変更あり(巻き戻り) | 変更あり(巻き戻り+変更) |
cdk deploy |
変更なし | 変更あり(巻き戻り+変更) |
Discussion