【AWS】AWS Cloud Development Kit(AWS CDK)でDynamoDBに接続する
AWS

【AWS】AWS Cloud Development Kit(AWS CDK)でDynamoDBに接続する

作成日:2021年12月20日
更新日:2021年12月21日

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

aws-cdk-init

【AWS】AWS Cloud Development Kit(AWS CDK)をゼロから構築する

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

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

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

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

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

ts
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をインポートします。

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

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

ts
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 に接続するためのコンストラクターを設定します。

ts
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 を作成し、初期化処理しましょう。

ts
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 を設定します。

ts
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 をインポートします。

ts
import { DynamoDb } from "./dynamodb";

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

ts
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 のデプロイを設定します。

aws-cdk-lambda-settings

【AWS】AWS Cloud Development Kit(AWS CDK)でAWS Lambdaのデプロイを設定する

© 2024あずきぱんウェブスタジオ