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

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

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

$ 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(); 
こちらのほうがパット見はわかりやすいかもしれない。

ネストしたスタックなどを作り出すと地獄が見えるけども。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)