🧩

AWS CDK で作成したリソースを変更するとどうなる?

に公開

はじめに

AWS CDK で作成したリソースをコンソールから変更すると、実機とコードに差分が生まれてしまいます。このときの挙動を Terraform と比べたく調査しました。

検証内容と検証結果(概要)

  1. CDK で S3 バケットを作成
  2. cdk deploy する
  3. S3 バケットにマネコンから新規にタグを付与
  4. cdk diff を実行 → 差分表示なし Number of stacks with differences: 0
  5. cdk deploy を実行 → 変更なし CdkTestStack (no changes)
  6. CDK のコード内で上記と異なる新規のタグを付与
  7. cdk diff を実行 →差分表示あり ただしマネコンで付与したタグが消える表示はなし
  8. 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