前回は、ゼロから AWS CDK を構築しました。

今回は、hello のデータを DynamoDB に接続します。

まずは、lib フォルダの cdk-stack.ts を開きます。

aws-cdk-libからaws_apigatewayをインポートします。

import { Stack, StackProps, aws_lambda, aws_apigateway } from "aws-cdk-lib"

aws_apigatewayLambdaRestApiを使って、エンドポイントを設定します。

export class CdkStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props)

    const hello = new aws_lambda.Function(this, "HelloHandler", {
      runtime: aws_lambda.Runtime.NODEJS_14_X,
      code: aws_lambda.Code.fromAsset("lambda"),
      handler: "hello.handler",
    })

    new aws_apigateway.LambdaRestApi(this, "Endpoint", {
      handler: hello,
    })
  }
}

ターミナルでプロジェクトのディレクトリに移動し、cdk deploy を実行します。

デプロイしてもいいかを聞かれるので、『y』を入力し、エンターキーを押します。

image2

ターミナルにエンドポイントが表示されるので、アクセスすると、

image3

hello.js の body の内容が表示されました。

次は、DynamoDB と接続してみます。

lib フォルダに、dynamodb.ts を作成します。

aws-cdk-libからaws_dynamodbをインポートします。

import { aws_dynamodb } from "aws-cdk-lib"

DynamoDb クラスを作成し、privatenameprimaryKeystacktableを設定します。

import { aws_dynamodb, Stack } from "aws-cdk-lib"

export class DynamoDb {
  private name: string
  private primaryKey: string
  private stack: Stack
  private table: aws_dynamodb.Table
}

DynamoDB に接続するためのコンストラクターを設定します。

import { aws_dynamodb, Stack } from "aws-cdk-lib"

export class DynamoDb {
  private name: string
  private primaryKey: string
  private stack: Stack
  private table: aws_dynamodb.Table

  public constructor(name: string, primaryKey: string, stack: Stack) {
    this.name = name
    this.primaryKey = primaryKey
    this.stack = stack
  }
}

createTable を作成し、初期化処理しましょう。

export class DynamoDb {
  private name: string
  private primaryKey: string
  private stack: Stack
  private table: aws_dynamodb.Table

  public constructor(name: string, primaryKey: string, stack: Stack) {
    this.name = name
    this.primaryKey = primaryKey
    this.stack = stack
    this.initialize()
  }

  private initialize() {
    this.createTable()
  }
  private createTable() {}
}

createTable を設定します。

export class DynamoDb {
  private name: string
  private primaryKey: string
  private stack: Stack
  private table: aws_dynamodb.Table

  public constructor(name: string, primaryKey: string, stack: Stack) {
    this.name = name
    this.primaryKey = primaryKey
    this.stack = stack
    this.initialize()
  }

  private initialize() {
    this.createTable()
  }
  private createTable() {
    this.table = new aws_dynamodb.Table(this.stack, this.name, {
      partitionKey: {
        name: this.primaryKey,
        type: aws_dynamodb.AttributeType.STRING,
      },
      tableName: this.name,
    })
  }
}

lib フォルダの cdk-stack.ts を開きます。

dynamodb.ts をインポートします。

import { DynamoDb } from "./dynamodb"

CdkStack クラスに設定しましょう。

export class CdkStack extends Stack {
  private table = new DynamoDb("HelloTable", "helloId", this)

  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props)

    const hello = new aws_lambda.Function(this, "HelloHandler", {
      runtime: aws_lambda.Runtime.NODEJS_14_X,
      code: aws_lambda.Code.fromAsset("lambda"),
      handler: "hello.handler",
    })

    new aws_apigateway.LambdaRestApi(this, "Endpoint", {
      handler: hello,
    })
  }
}

では、ターミナルで、cdk deploy を実行します。

ターミナルに表示されているエンドポイントにアクセスすると、

image4

変わりがないようです。

では、DynamoDB( https://console.aws.amazon.com/dynamodbv2/home )で確認します。

左メニューのテーブルをクリックしてみます。

image5

HelloTable が出来上がっていました。

次回は、AWS CDK で AWS Lambda のデプロイを設定します。

ブログ一覧