はじめに
現在運用中の環境をテスト用として複製する際にCDKv2
を用いて
コード化することになったのでその学びです。
Lambda編はこちら
Cognito編はこちら
apigateway編はこちら
StepFunctions編はこちら
準備
このへんの記事でまずは環境設定
https://aws.amazon.com/jp/getting-started/guides/setup-cdk/
今回はTypeScript
を用いて実装しました。
$ cdk init --language typescript
こちらを叩いて/lib
配下のtsファイルを編集するところからの内容です。
バージョンは2.28.1
の時でした!
DynamoDB
まずテーブル定義は以下のようになります。
import * as cdk from 'aws-cdk-lib';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
export class MainStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// DynamoDB resource -------------------
new dynamodb.Table(this, 'Sample-table', { // 'Sample-table'はStack内で一意
tableName: "samble-table", // テーブル名の定義
partitionKey: { //パーティションキーの定義
name: 'id',
type: dynamodb.AttributeType.STRING, // typeはあとNumberとbinary
},
sortKey: { // ソートキーの定義
name: 'name',
type: dynamodb.AttributeType.STRING,
},
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, // オンデマンド請求
pointInTimeRecovery: true, // PITRを有効化
timeToLiveAttribute: 'expired', // TTLの設定
removalPolicy: cdk.RemovalPolicy.DESTROY, // cdk destroyでDB削除可
});
}
}
基本的にはコメントの通り。
billingMode
はオンデマンドかプロビジョンかの設定をします。
pointInTimeRecovery
はポイントインタイムリカバリー設定。デフォルトはfalse。
timeToLiveAttribute
は対象項目名を指定。エポック時間で削除時間を指定します。デフォルトは設定無し。
removalPolicy
はCDK側の設定でcdk destroy
でテーブルを削除するか否かの設定。
デフォルトは削除されなくなってます。
これはリソースによってデフォルトの動きが異なります。
GSIの設定
import * as cdk from 'aws-cdk-lib';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
export class MainStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// DynamoDB resource -------------------
const sample_table = new dynamodb.Table(this, 'Sample-table', {
tableName: "samble-table",
partitionKey: {
name: 'id',
type: dynamodb.AttributeType.STRING
},
sortKey: {
name: 'name',
type: dynamodb.AttributeType.STRING,
},
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
pointInTimeRecovery: true,
removalPolicy: cdk.RemovalPolicy.DESTROY,
});
// GSIの設定
sample_table.addGlobalSecondaryIndex({
indexName: 'datetime-index',
partitionKey: {name: 'sampleID', type: dynamodb.AttributeType.STRING},
sortKey: {name: 'datetime', type: dynamodb.AttributeType.NUMBER},
});
}
}
一旦テーブル作成後にaddGlobalSecondaryIndex()
でGSIを作成します。
作成にはインデックス名、パーティションキー、必要であればソートキーを設定します。
もともとのテーブルの請求モードがオンデマンドであれば
自動でGSIもオンデマンドとなります!
プロビジョン設定時は何CUかを設定できます。
DynamoDB Stream
import * as cdk from 'aws-cdk-lib';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
export class MainStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// DynamoDB resource -------------------
const sample_table = new dynamodb.Table(this, 'Sample-table', {
tableName: "samble-table",
partitionKey: {
name: 'id',
type: dynamodb.AttributeType.STRING
},
sortKey: {
name: 'name',
type: dynamodb.AttributeType.STRING,
},
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
pointInTimeRecovery: true,
removalPolicy: cdk.RemovalPolicy.DESTROY,
stream: dynamodb.StreamViewType.NEW_IMAGE, // ココを設定
});
}
}
これでStream設定がONになります。
今回はNEW_IMAGE
ですが、OLD_IMAGEなど選択できます。
基本的にはドキュメントを参照しております!
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb.Table.html
日本語版がないので解読に時間がかかりましたが、
まずはリソースを選択し、DynamoであればTable
という項目を選択すれば
Tableを使用する際の設定パラメーターの記載がそのページにあります!
そして項目ごとに専用の書き方あれば、クリックするとその設定の方法が記述しているページに飛ぶという感じになってます。
そして
$ cdk deploy
とコマンド打つだけで一気に数十個(私の場合)テーブル作成できるのでホント楽です^^