LoginSignup
0
0

More than 3 years have passed since last update.

AWS CDKでDynamoDBを作る

Posted at

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で確認

スタックが正常に完了しています

image.png

DynamoDBで確認

tasksテーブルが作成されています

image.png

AWSから削除

デプロイしたものを削除します

$ cdk destroy --profile xxx
Are you sure you want to delete: CdkDynamodbStack (y/n)? y
CdkDynamodbStack: destroying...

 ✅  CdkDynamodbStack: destroyed

まとめ

  • コードで構築できるので再利用できるし、テストも容易にできるので効率的です
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