はじめに
今回は仕事でちょっと触る機会があった、AWS CDKのちょっとした共有になります。
Document見てもこれ結局どうやって使うんだ?となったので、記事にまとめておこうと思い立ちました。
(AWSのドキュメントって基本的に分かりづらいって思ってるのは自分だけですか。。?)
CDKのCfn系の記事は以外に少ないので、誰か悩んだ方の助けになると幸いです。
環境
- AWS CDK 2.47.0
- TypeScript 4.8.4
- AWS CDKのドキュメント
やったこと
- CfnBucketを使ったS3のバケット作成
- CfnTagを使ったバケットに紐付けるTagの作成
コード
s3を作成するコードと、実行するコードは分けたほうがわかりやすいと教えてもらったので、今回は2つのファイルを作成しています。
ここを分けてると、他のリソース(EC2とか)を作るときも書きやすくなりますよね。
コード全体
今回のコードの動きは、バケットを作ってタグを付与するだけです。
ちなみに実行する上ではAWSのアクセスキーを払い出してから実行してください。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { S3 } from './resource/s3';
export class TestStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
//アカウントID取得
const accountId = cdk.Stack.of(this).account;
//s3作成
const cfn_s3 = new S3('Test', accountId);
cfn_s3.createResouces(this);
}
}
import * as cdk from 'aws-cdk-lib';
import { CfnBucket, CfnBucketPolicy } from 'aws-cdk-lib/aws-s3';
import { Construct } from 'constructs';
export class S3 {
bucketName: string;
accountID: string;
constructor(bucket: string, account: string) {
this.bucketName = bucket;
this.accountID = account;
};
createResouces(scope: Construct) {
// Tag作成
const cfnTag: cdk.CfnTag = {
key: 'TestTag',
value: 'Test',
};
// bucket作成
const bucket = new CfnBucket(scope, 'CreateBucket', {
bucketName: this.bucketName,
// Tag付与
tags: [cfnTag]
});
}
}
ちょこっと解説
CfnBucket
を使ってバケットを作成するための設定を色々書くことができます。
Cfn系はCDKのL1にあたるので、設定したものしか反映されません。(ここではL1とかL2の話は置いときます)
その中でバケットにタグをつけるときは
スコープの中でなにかしらの変数を定義してあげて(ここはドキュメントのまんま:ドキュメント)
const cfnTag: cdk.CfnTag = {
key: 'TestTag',
value: 'Test',
};
CfnBucketの中で以下のように指定して上げる必要があります。
tags: [cfnTag]
以下の書き方はできないみたいなのでご注意ください。
新しいバージョン(おそらく2.47.0より上)だとできました。
tags: [{
key: 'hogehoge',
value, 'fuga'
}]
終わりに
今回はAWS CDKのことについて記事を書いてみました。
初めて触るということもあり、結構理解するのに時間がかかってしまいましたが、yamlでCFNを書かなくて良いのは個人的には助かるなと感じています。