Amazon dynamodb 如何将Dynamodb Local集成到AWS云开发工具包中
使用aws cdk时,如何将DynamoDB Local集成到开发过程中?例如,下面的应用程序(使用“示例应用程序”模板)可以工作,但是如何运行Amazon dynamodb 如何将Dynamodb Local集成到AWS云开发工具包中,amazon-dynamodb,aws-cdk,amazon-dynamodb-local,Amazon Dynamodb,Aws Cdk,Amazon Dynamodb Local,使用aws cdk时,如何将DynamoDB Local集成到开发过程中?例如,下面的应用程序(使用“示例应用程序”模板)可以工作,但是如何运行sam local invoke,并指向在您的计算机上运行的DynamoDB本地实例(而不是必须运行cdk deploy)来查看操作 // lib/minimal-app-stack.ts import * as apiGateway from "@aws-cdk/aws-apigateway"; import * as cdk f
sam local invoke
,并指向在您的计算机上运行的DynamoDB本地实例(而不是必须运行cdk deploy
)来查看操作
// lib/minimal-app-stack.ts
import * as apiGateway from "@aws-cdk/aws-apigateway";
import * as cdk from "@aws-cdk/core";
import {MinimalBackend} from "./minimal-backend";
export class MinimalAppStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const minimalBackend = new MinimalBackend(this, "MinimalBackend");
new apiGateway.LambdaRestApi(this, "Endpoint", {
handler: minimalBackend.handler
});
}
}
// lib/minimal-backend.ts
import * as cdk from "@aws-cdk/core";
import * as dynamodb from "@aws-cdk/aws-dynamodb";
import * as lambda from "@aws-cdk/aws-lambda";
export class MinimalBackend extends cdk.Construct {
public readonly handler: lambda.Function;
constructor(scope: cdk.Construct, id: string) {
super(scope, id);
const minimalTable = new dynamodb.Table(this, "MinimalTable", {
partitionKey: {
name: "id",
type: dynamodb.AttributeType.STRING
}
});
this.handler = new lambda.Function(this, "BackendHandler", {
code: lambda.Code.fromAsset("lambda"),
handler: "backendHandler.handler",
runtime: lambda.Runtime.NODEJS_12_X,
environment: {
TABLE_NAME: minimalTable.tableName
}
});
minimalTable.grantReadWriteData(this.handler);
}
}
// lambda/backendHandler.ts
// @ts-ignore
/// <reference types="aws-sdk" />
import AWS = require("aws-sdk");
const tableName = process.env.TABLE_NAME || "";
const dynamo = new AWS.DynamoDB.DocumentClient();
async function getAllItems() {
const scanResult = await dynamo
.scan({
TableName: tableName
})
.promise();
return scanResult;
}
exports.handler = async function (event: AWSLambda.APIGatewayEvent) {
const response = await getAllItems();
const data = response.Items || [];
const stringifiedData = JSON.stringify(data, undefined, 2);
return {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "OPTIONS,GET,POST,DELETE"
},
body: stringifiedData
}
};
但不知道如何将其集成到aws cdk中。有什么想法吗?为什么不能在lambda中使用第二个片段?这就是我访问本地DB所做的——我只是使用一个env var来确定是否是本地的,并将其传递给本地dynamo的端点。
const docClient = new AWS.DynamoDB.DocumentClient( {
region: "us-west-2",
endpoint: "http://localhost:8000",
convertEmptyValues: true
});