実践!AWS CDK #24 デバッグ

題字・息子たち
2021.09.09

はじめに

今更ながら、CDK におけるデバッグの方法を紹介します。

前回の記事はこちら。

2 つの方法

今回説明する方法は以下の 2 つです。

  • cdk synth コマンドでログを出力する
  • VS Code のデバッガを使う

それぞれ説明していきます。

cdk synth コマンドでログを出力する

こちらは console.log() メソッドを利用して、出力したいログをターミナルで確認する方法です。

既存のコードに以下の行を追加します。

lib/devio-stack.ts

~ 省略 ~

export class DevioStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // VPC
    const vpc = new Vpc();
    vpc.createResources(this);

    // Subnet
    const subnet = new Subnet(vpc.vpc);
    subnet.createResources(this);

    console.log(`subnet.public1a.cidrBlock = ${subnet.public1a.cidrBlock}`);

    // Internet Gateway
    const internetGateway = new InternetGateway(vpc.vpc);
    internetGateway.createResources(this);

    ~ 省略 ~

subnet.public1a オブジェクト(CfnSubnet クラスのインスタンス)の cidrBlock プロパティをログ出力するプログラムです。

この状態で cdk synth コマンドを実行します。

$ cdk synth

subnet.public1a.cidrBlock = 10.0.11.0/24
Resources:
  Vpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      Tags:
        - Key: Name
          Value: devio-stg-vpc
~ 省略 ~

このように目的のログが テンプレート出力の前 に表示されます。(4 行目以降がテンプレート出力)

ログだけを出力したい場合は --quiet オプションを付けてください。テンプレートは出力されません。

$ cdk synth --quiet

subnet.public1a.cidrBlock = 10.0.11.0/24

cdk synthesize [STACKS..]

Synthesizes and prints the CloudFormation template for this stack

Options:

-q, --quiet Do not output CloudFormation Template to stdout [boolean] [default: false]

以上が 1 つ目の方法です。

VS Code のデバッガを使う

こちらは IDE のデバッガを利用する方法です。

VS Code でデバッグを有効化するには launch.json というファイルを作成する必要があります。

手順

1.CDK プロジェクトのエントリポイントファイル(ここでは bin/devio.ts)を選択します

1

2.サイドバーにある Run and Debug アイコンをクリックします

2

3.左側の領域で create a launch.json file をクリックします

3

4.環境の選択で Node.js を指定します

4

※現在の環境によって同じ項目が複数表示されることがありますが、適当に選んでみてください

5.launch.json が自動生成されます

5

program 部分のファイルパスが手順 1 で選択したファイルとなります(選択したファイルを間違えた場合はここを書き換えても OK です)

6.name の値を好きなものに変更することもできます

6

7.任意の箇所にブレイクポイントを設置します

7

8.ソースコードをビルドします

$ npm run build

重要な作業です。ソースコードを変更した際はデバッグ実行前に必ずビルドしてください。そうしないと意図したブレイクポイントでデバッガが停止しないことがあります。
$ npm run watch でプロジェクトディレクトリを監視している場合、ビルドは不要です。

9.デバッグを実行します

8

10.ブレイクポイントで止まります

9

11.好きな値を確認します

10

画面上のビューからデバッグ操作を実行できます。

左から

  • Continue
  • Step Over
  • Step Into
  • Step Out
  • Restart
  • Stop

です。

以上が方法 2 つ目の VS Code デバッガ利用手順でした。

GitHub

今回のソースコードは コチラ です。

おわりに

CDK は CFn のテンプレートを出力するという割と単純な処理を行うものなので、もしかしたら深いデバッグは不要かもしれません。(テンプレートを出力して確認すればいいので)
たまに発生する原因不明のエラーや、テンプレートを見ても意図した値になっていない場合などはこれらの方法でデバッグしてみてください。

リンク