CDK + Typescript で DynamoDB のテーブルを作成する
サーバーレスアーキテクチャでアプリケーションを構成する場合、クラウドリソース作成用のテンプレートをどのように管理すべきか悩む。
今回は、
という構成。 AmplifyでもCFnは書けるが、フロントのデプロイの影響を受けてしまいそうなのと、フロントとバックエンドは疎結合にしたほうが良かろう思ってAPIのリソース定義はAWS SAMで書くことにした。DBも同じくバックエンドということでSAMで定義している。
なのでこのCDKのコードは不要になってしまったのだけど、供養ということで。
import * as cdk from '@aws-cdk/core'; import { Table, AttributeType, BillingMode, GlobalSecondaryIndexProps } from "@aws-cdk/aws-dynamodb"; export class DynamodbStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // NOTE: RemovalPolicy.DESTROYは // テーブルにデータが入っている状態でcdk destroyが実行された時、データごとテーブルを削除する const table = new Table(this, "myTable", { partitionKey: { name: "userId", type: AttributeType.STRING, }, sortKey: { name: "timestamp", type: AttributeType.NUMBER }, tableName: "monologue", removalPolicy: cdk.RemovalPolicy.DESTROY, billingMode: BillingMode.PAY_PER_REQUEST }); table.addGlobalSecondaryIndex({ indexName: "gql-keywords", partitionKey: { name: "keyword", type: AttributeType.STRING }, sortKey: { name: "timestamp", type: AttributeType.NUMBER } }); new cdk.CfnOutput(this, "DynamoDB tablename", { value: table.tableName }) } }