cdkの入門として、シンプルにDynamoDBを1テーブルを作っていく流れを書きます
テーブル名はtasksとします
はじめに
- Ubuntu 18.04.4 LTS (WSL利用)
- VSCode
- aws-cdk 1.94.1
- typescript
AWS CDKをインストール
$ npm install -g aws-cdk
$ cdk --version
AWS CDKのプロジェクト作成
# プロジェクトディレクトリを作成
$ mkdir cdk-dynamodb
# 移動
$ cd cdk-dynamodb/
# プロジェクト作成
$ cdk init app --language=typescript
パッケージインストール
$ npm install @aws-cdk/aws-dynamodb
DynamoDBを作るコードを書く
taskというテーブル名のDynamoDBを作ります
プロジェクト作成時にひな形が作られているので、そこに肉付けする感じとなります
/lib/cdk-dynamodb-stack.ts
import * as cdk from '@aws-cdk/core';
import dynamodb = require("@aws-cdk/aws-dynamodb");
export class CdkDynamodbStack extends cdk.Stack {
public readonly taskTable: dynamodb.Table;
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Setup Task Table
this.taskTable = this.setupTaskTable();
}
private setupTaskTable() {
return new dynamodb.Table(this, "TaskTable", {
tableName: "tasks",
removalPolicy: cdk.RemovalPolicy.DESTROY,
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
partitionKey: {
name: "id",
type: dynamodb.AttributeType.STRING
},
stream: dynamodb.StreamViewType.NEW_AND_OLD_IMAGES
});
}
}
DynamoDBを作るコードに対するテストコードを書く
テストコードを書きます
/test/cdk-dynamodb.test.ts
import { expect as expectCDK, haveResource } from '@aws-cdk/assert';
import * as cdk from '@aws-cdk/core';
import * as CdkDynamodb from '../lib/cdk-dynamodb-stack';
test('DynamoDB Table Created', () => {
const app = new cdk.App();
// WHEN
const stack = new CdkDynamodb.CdkDynamodbStack(app, 'MyTestStack');
// THEN
expectCDK(stack).to(haveResource('AWS::DynamoDB::Table', {
TableName: "tasks"
}));
});
デプロイ前にテスト
作成したコードをテストします
$ npm run build && npm test
> cdk-dynamodb@0.1.0 build /home/xxx/cdk-dynamodb
> tsc
> cdk-dynamodb@0.1.0 test /home/xxx/cdk-dynamodb
> jest
PASS test/cdk-dynamodb.test.ts (13.729 s)
✓ DynamoDB Table Created (140 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 27.174 s
Ran all test suites.
無事通りました
AWSにデプロイ
作成したコードをAWSにデプロイします
$ cdk deploy --profile xxx
CdkDynamodbStack: deploying...
CdkDynamodbStack: creating CloudFormation changeset...
[██████████████████████████████████████████████████████████] (3/3)
✅ CdkDynamodbStack
Stack ARN:
arn:aws:cloudformation:xxxxxxxxx:xxxxxxxxxxx:stack/CdkDynamodbStack/xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CloudFormationで確認
スタックが正常に完了しています
DynamoDBで確認
tasksテーブルが作成されています
AWSから削除
デプロイしたものを削除します
$ cdk destroy --profile xxx
Are you sure you want to delete: CdkDynamodbStack (y/n)? y
CdkDynamodbStack: destroying...
✅ CdkDynamodbStack: destroyed
まとめ
- コードで構築できるので再利用できるし、テストも容易にできるので効率的です