LoginSignup
14
2

More than 5 years have passed since last update.

AWS CDKでスタックを複数作ったりYAML出力する覚書

Posted at
$ cdk --version
0.23.0 (build 1d705e7)

AWS CDKでは、cdk.Stackクラスを継承することでスタックを定義できる。

import cdk = require('@aws-cdk/cdk');
import sqs = require('@aws-cdk/aws-sqs');

export class TestStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    new sqs.Queue(this, 'ProjdynamoQueue', {
      visibilityTimeoutSec: 300
    });
  }
}

以下のよう書くことでcdk deployでデプロイできる。

#!/usr/bin/env node
import cdk = require('@aws-cdk/cdk');
import { TestStack } from '../lib/test-stack';

const app = new cdk.App();
new TestStack(app, 'TestStack');
app.run();

cdk.Stackクラスをインスタンス化すればスタックができるので、以下のようにすると同じスタックを複数作れる。

#!/usr/bin/env node
import cdk = require('@aws-cdk/cdk');
import { TestStack } from '../lib/test-stack';

const app = new cdk.App();
new TestStack(app, 'TestStack');
new TestStack(app, 'TestStack1');
new TestStack(app, 'TestStack2');
new TestStack(app, 'TestStack3');
app.run();

そしてconstructorの第二引数でスタック名を決めているので、cdk deploycdk synthにスタック名を渡してやれば任意のスタックのみ操作ということができる。

$ cdk synth TestStack2

Resources:
  ProjdynamoQueueF6B39BFE:
    Type: AWS::SQS::Queue
    Properties:
      VisibilityTimeout: 300
    Metadata:
      aws:cdk:path: TestStack2/ProjdynamoQueue/Resource
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Modules: aws-cdk=0.23.0,@aws-cdk/aws-iam=0.23.0,@aws-cdk/aws-kms=0.23.0,@aws-cdk/aws-s3-notifications=0.23.0,@aws-cdk/aws-sqs=0.23.0,@aws-cdk/cdk=0.23.0,@aws-cdk/cx-api=0.23.0,jsii-runtime=node.js/v10.5.0

複数スタック設定時のsynth

cdk synthは複数スタック設定していると引数必須になる。
標準出力では1スタックしか出せないらしい。

$ cdk synth

Multiple stacks selected (TestStack, TestStack1, TestStack2), but output is directed to stdout. Either select one stack, or use --output to send templates to a directory.

スタック名の指定かoutputディレクトリの指定すればOK。

$ mkdir output
$ cdk synth --output ./output && tree output/
./output/TestStack.template.yaml
./output/TestStack1.template.yaml
./output/TestStack2.template.yaml
output/
├── TestStack.template.yaml
├── TestStack1.template.yaml
└── TestStack2.template.yaml
14
2
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
14
2