LoginSignup
0
0

More than 1 year has passed since last update.

AWS CDK:CfnTagのちょっとした共有

Last updated at Posted at 2022-12-15

はじめに

今回は仕事でちょっと触る機会があった、AWS CDKのちょっとした共有になります。
Document見てもこれ結局どうやって使うんだ?となったので、記事にまとめておこうと思い立ちました。
(AWSのドキュメントって基本的に分かりづらいって思ってるのは自分だけですか。。?)
CDKのCfn系の記事は以外に少ないので、誰か悩んだ方の助けになると幸いです。

環境

やったこと

  • CfnBucketを使ったS3のバケット作成
  • CfnTagを使ったバケットに紐付けるTagの作成

コード

s3を作成するコードと、実行するコードは分けたほうがわかりやすいと教えてもらったので、今回は2つのファイルを作成しています。
ここを分けてると、他のリソース(EC2とか)を作るときも書きやすくなりますよね。

コード全体

今回のコードの動きは、バケットを作ってタグを付与するだけです。
ちなみに実行する上ではAWSのアクセスキーを払い出してから実行してください。

main.ts
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);
  }
}
s3.ts
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の話は置いときます)
その中でバケットにタグをつけるときは

スコープの中でなにかしらの変数を定義してあげて(ここはドキュメントのまんま:ドキュメント

.ts
const cfnTag: cdk.CfnTag = {
            key: 'TestTag',
            value: 'Test',
        };

CfnBucketの中で以下のように指定して上げる必要があります。

.ts
tags: [cfnTag]

以下の書き方はできないみたいなのでご注意ください。
新しいバージョン(おそらく2.47.0より上)だとできました。

.ts
tags: [{
        key: 'hogehoge',
        value, 'fuga'
      }]

終わりに

今回はAWS CDKのことについて記事を書いてみました。
初めて触るということもあり、結構理解するのに時間がかかってしまいましたが、yamlでCFNを書かなくて良いのは個人的には助かるなと感じています。

0
0
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
0
0