🧊

[CDK] AWS CDKを扱う前提をまとめた

に公開

はじめに

AWS CDKを初めて触ったときに、「IaCって何が嬉しいん」というのがピンときていなかった。また、AWS CLIとの違いも曖昧で、操作を理解するまでにいくつかの疑問にぶつかった。
CDKを触る最初の第一歩として背景や基本的な概念を知っておきたく、自分なりに解釈した結果をまとめる。

CDKのQ&A

最初にぶつかった疑問ベースで記載

  • Q1: AWS CLIとの違いは何?
  • Q2: CLIとCDKで使うコマンドは違う?
  • Q3: CLI, CDKを使う上での環境設定を知りたい
  • Q4: CDKを実際に使うには何のコマンドを実行すればいい?

Q1: AWS CLIとの違いは何?

  • AWS CLI: マネジメントコンソール画面の操作をCLI上で実行できるツール
    • 画面と同等、それ以上(画面では用意されていないが本来は可能な設定)の操作を実行できる。
    • GUIからCLIに置き換えただけなので、複数のサービスを設定するには操作が煩雑になりがち
    • 別のAWS環境で同じ設定を再現したい時に、同様のコマンドを打つ必要がある
  • CDK: IaC(Infra as Code)として、コードベースでAWSの設定を管理できる。
    • dev,staging,prod環境など、同じ設定を使う他の環境でも、容易に同環境の再現・構築ができる。
    • コードにはお金がかからないため、設定を保存しておくのにも便利

Q2: CLIとCDKで使うコマンドは違う?

profile設定は共通だが、実行コマンドは異なる。
CLIが操作をGUIからCLIに置き換えたもの、CDKはコードの固まりを元に環境構築・削除等の操作を行うもの、という役割なので、実行コマンドが異なる。
公式にてReferenceが提供されている。
https://docs.aws.amazon.com/ja_jp/cli/latest/index.html
https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/cli.html

Q3: CLI, CDKを使う上での環境設定を知りたい

導入と初期設定が必要だった。設定手順をまとめて、記事を投稿した。
https://zenn.dev/anri99103/articles/29f72ec3daf7da

Q4: CDKを実際に使うには何のコマンドを実行すればいいのか

コマンドリファレンスは以下参照。
https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/ref-cli-cmd-deploy.html

主要な操作として、以下のコマンドがある。

  • cdk list: 対象のStackを表示する。Stack名を確認できる。
  • cdk diff: 差分を確認する。今回の反映で変更される箇所を確認できる。
  • cdk deploy: AWS上に環境が構築される。stack, profileの対象の設定に注意。
  • cdk destory: AWS上の環境を削除する。stack, profileの対象の設定に注意。
# CDKのStack名を確認する 
# cdk.jsonがあるディレクトリに移動してから実行
$ cdk list

# CDKで差分を確認する
$ cdk diff --profile {profile-name}

# CDKでDeploy実行する
$ cdk deploy {StackName} --profile {profile-name}

# CDKを削除実行する
$ cdk destroy {StackName} --profile {profile-name}

補足

StackというのはCDKでデプロイする単位である。CloudFormationサービスからログを確認できる。
https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/stacks.html

また、deploy実行時に必要な引数が足りずに失敗する場合がある。
Contextと呼ばれる、キーと値のペアを渡す必要がある。
cdk.jsonに記述するか、--contextオプションとして実行時に渡してあげれば良い。

最後に

本記事では、CDKを触り始める際に自身がぶつかった疑問点と自分なりの解釈をまとめた。
CDKを使うことで、コードで設定を管理できるため、設定の再現が容易だったり、コードにはお金が発生しないという明確なメリットがある。
Udemyや記事で紹介されているAWS構成について、CDKで再現してみるのも面白そうなので今後じっくりやっていきたい。

参考記事

AWS公式

ブログ

Discussion