AWS CDKでcdk.jsonのコンテキスト(context)を使用する方法

AWS CDKでcdk.jsonのコンテキスト(context)を使用する方法

AWS CDKでは、開発環境ごとに異なる設定値をcdk.jsonのコンテキスト(context)で設定することができます。

cdk.json(contextキー部分のみ抜粋)

"context": {
  "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true,
  "@aws-cdk/core:stackRelativeExports": true,
  // 省略
  "@aws-cdk/core:target-partitions": [
    "aws",
    "aws-cn"
  ],
  // 設定値追加 start
  "target": "dev",
  "dev": {
    "instanceType": { // EC2インスタンス設定(dev)
      "instanceClass": "t2",
      "instanceSize": "micro"
    }
  },
  "prod": {
    "instanceType": { // EC2インスタンス設定(prod)
      "instanceClass": "t3",
      "instanceSize": "medium"
    }
  }
  // 設定値追加 end
}
// 以下省略

lib配下のts修正

constructor内の場合、コンテキストで指定した値は以下のように取得することができます。

import { Stack, StackProps, aws_lambda_nodejs as lambda, Duration } from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import { Construct } from 'constructs';

export class Sample001Stack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);
    const target = this.node.tryGetContext('target'); // 設定値取得 dev or prod
    const env = this.node.tryGetContext(target); // devならその値を取得

    const instanceClass = env.instanceType.instanceClass
    const instanceSize = env.instanceType.instanceSize
    // 省略

デプロイする際に-cオプションでkey=valueを指定すると設定値が変更されます。

cdk deploy -c target=prod

このようにデプロイすればprodに変更されます。

cdk deploy

このようにデプロイすればtargetにはdev(デフォルト値)が入ります。

参考サイト

Get a value from a context variable - AWS Cloud Development Kit (AWS CDK) v2
You can specify a context variable either as part of an AWS CDK CLI command, or in cdk.json .

コメント

タイトルとURLをコピーしました