Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.
$ 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
motchi0214
AWS Samurai 2017 Alexa Champions
https://wp-kyoto.net
digitalcubeinc
デジタルキューブは AWS Partner Network (APN) アドバンスドテクノロジーパートナーです。
https://ja.amimoto-ami.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away