LoginSignup
2
1

More than 5 years have passed since last update.

AWS CDKでクラスを使わずにスタックを定義する

Posted at

使うかどうかわからないけど、見つけたのでとりあえず覚書。

$ cdk --version
0.23.0 (build 1d705e7)

よくやる書き方

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
    });
  }
}

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

これがこうなる。


Resources:
  ProjdynamoQueueF6B39BFE:
    Type: AWS::SQS::Queue
    Properties:
      VisibilityTimeout: 300
    Metadata:
      aws:cdk:path: TestStack/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

クラスを使わずに書く

注目すべきなのはSQSのリソースを定義している部分。

new sqs.Queue(this, 'ProjdynamoQueue', {
      visibilityTimeoutSec: 300
    });

thisを第一引数にしているが、これはcdk.Stackを渡している。

ということはcdk.Stackインスタンスを渡してやれば別にこの書き方をする必要はない。

import cdk = require('@aws-cdk/cdk');
import sqs = require('@aws-cdk/aws-sqs');
const app = new cdk.App();
const stack = new cdk.Stack(app, 'TestStack');
new sqs.Queue(stack, 'ProjdynamoQueue', {
  visibilityTimeoutSec: 300
});

app.run();

こちらのほうがパット見はわかりやすいかもしれない。
ネストしたスタックなどを作り出すと地獄が見えるけども。

2
1
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
2
1