1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【AWS CDK (Python)】 よく使うCDKコマンド

Posted at

はじめに

本記事は、私自身の備忘録を兼ねてAWS CDKをこれから始める方の一助になればと思い、AWS CDKの使い方等をまとめたものです。
今回は、よく使うAWS CDKのコマンドの使い方を確認しています。
なお、本記事は私自身の経験を基に記載していますが、間違いがあったらすみません。

環境

本記事は以下の環境を使用して記載しています。

  • AWS Cloud9
  • AWS CDK:2.80.0
  • Python: 3.10.11
  • Node.js: 16.20.0

また、以下の記事に基づいてAWS CDKの環境を作成しています。

よく使うCDKコマンド

以下のコマンドをそれぞれ確認していきます。

cdk list (ls)

cdk listは、アプリケーション内のスタックをリスト表示します。
以下は、アプリケーション内に2つのスタックがある例です。

(.venv) user_name:~/environment/cdk-app (master) $ cdk list
CdkAppStack-dev
CdkAppStack-prod

以下のようにワイルドカード(*)を使用することでフィルタすることもできます。

(.venv) user_name:~/environment/cdk-app (master) $ cdk list CdkAppStack-p*
CdkAppStack-prod

cdk diff

cdk diffは、既にデプロイされているスタックと比較し変更点を表示します。リソースの追加や削除だけでなく、リソース内の設定変更も変更箇所がある場合は表示してくれます。
以下は、既にデプロイしているS3バケットに対してバージョニングを有効にするように変更し、さらにS3バケットをもう一つ新たに作成する場合の例です。

(.venv) user_name:~/environment/cdk-app (master) $ cdk diff
Stack CdkAppStack-dev
Resources
[~] AWS::S3::Bucket MyS3Bucket-dev MyS3BucketdevXXXXXXXX 
 └─ [+] VersioningConfiguration
     └─ {"Status":"Enabled"}

Stack CdkAppStack-prod
Resources
[+] AWS::S3::Bucket MyS3Bucket-prod MyS3BucketprodXXXXXXXX 

以下のようにスタック名を指定することで、任意のスタックの変更点だけを表示することもできます。

(.venv) user_name:~/environment/cdk-app (master) $ cdk diff CdkAppStack-dev
Stack CdkAppStack-dev
Resources
[~] AWS::S3::Bucket MyS3Bucket-dev MyS3BucketdevXXXXXXXX 
 └─ [+] VersioningConfiguration
     └─ {"Status":"Enabled"}

cdk synthesize (synth)

cdk synthesizeは、スタックのCloudFormation Templateを作成します。

(.venv) user_name:~/environment/cdk-app (master) $ cdk synthesize
Successfully synthesized to /home/ec2-user/environment/cdk-app/cdk.out
Supply a stack id (CdkAppStack-dev, CdkAppStack-prod) to display its template.

作業ディレクトリ/cdk.outを確認するとCloudFormation Templateが作成されていることが分かります。デプロイする内容をCloudFormation Templateで確認したい場合は便利ですね。

cdk.out/CdkAppStack-dev.template.json
{
 "Resources": {
  "MyS3BucketdevXXXXXXXX": {
   "Type": "AWS::S3::Bucket",
   "Properties": {
    "BucketName": "cdk-test-bucket-dev",
    "VersioningConfiguration": {
     "Status": "Enabled"
    }
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete",
   "Metadata": {
    "aws:cdk:path": "CdkAppStack-dev/MyS3Bucket-dev/Resource"
   }
  },
(以下省略)

cdk deploy

cdk deployは、実際にリソースをデプロイします。実際のCloudFormationの処理としては、変更セットの作成⇒変更セットの実行 という流れになっているようです。

(.venv) user_name:~/environment/cdk-app (master) $ cdk deploy

✨  Synthesis time: 16.1s

(中略)
CdkAppStack-dev: deploying... [1/1]
CdkAppStack-dev: creating CloudFormation changeset...

 ✅  CdkAppStack-dev

✨  Deployment time: 36.6s

Stack ARN:
(中略)

✨  Total time: 52.7s

アプリケーション内にスタックが複数ある場合は、--all(全てのスタックをデプロイ)かスタック名(任意のスタックのみをデプロイ)を付けないとエラーになります。
なお、スタック名指定してデプロイする場合、指定したスタックの依存関係にあるスタックもデプロイされます。

(.venv) user_name:~/environment/cdk-app (master) $ cdk deploy --all
(.venv) user_name:~/environment/cdk-app (master) $ cdk deploy CdkAppStack-dev

スタック内でIAMロールの作成などセキュリティに関するリソースがある場合は、スタック毎に確認を求められます。いちいち確認するのが面倒な場合は、--require-approval neverを付けると確認をスキップできます。

(.venv) user_name:~/environment/cdk-app (master) $ cdk deploy --require-approval never

cdk deploy--no-executeを付けて実行するとデプロイせずにCloudFormationの変更セットだけ作成してくれます。デプロイする前に変更セットを確認することで、リソースの置換(再作成)などサービスに影響のあるデプロイの発生を事前に確認することができます。サービス中のシステムでデプロイする際は、いきなりデプロイせずに変更セットを確認した方が安心ですね。

(.venv) user_name:~/environment/cdk-app (master) $ cdk deploy --no-execute

image.png

image.png

cdk destroy

cdk destroyは、既にデプロイしたリソースを削除します。

(.venv) user_name:~/environment/cdk-app (master) $ cdk destroy
Are you sure you want to delete: CdkAppStack-dev (y/n)? y
CdkAppStack-dev: destroying... [1/1]

 ✅  CdkAppStack-dev: destroyed

アプリケーション内にスタックが複数ある場合は、--all(全てのスタックを削除)かスタック名(任意のスタックのみを削除)を付けないとエラーになります。
なお、スタック名指定して削除する場合、指定したスタックに依存関係のあるスタックも削除されるのでご注意を。

(.venv) user_name:~/environment/cdk-app (master) $ cdk destroy --all
(.venv) user_name:~/environment/cdk-app (master) $ cdk destroy CdkAppStack-dev

まとめ

AWS CDKのよく使うコマンドを確認しました。他にもcdk initcdk bootstrapなどのコマンドがありますが、頻繁に使用するコマンドではないと思いますので、省略しました。
最後まで読んでいただいてありがとうございます。
少しでも参考になれば幸いです。

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?