我正在尝试在我的本地系统中创建一个应用程序并使用 SAM CLI 将其部署到 AWS 云。该应用程序的基本轮廓如图所示。
我为此应用程序创建了一个名为myproj的目录,所有子文件夹和文件如下图所示。
template.yaml文件包含以下代码-
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
myDB:
Type: AWS::Serverless::SimpleTable
Properties:
TableName: tabmine
PrimaryKey:
Name: id
Type: String
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
LambdaWrite:
Type: AWS::Serverless::Function
Properties:
CodeUri: functionWrite/
Handler: write.handler
Runtime: nodejs12.x
Events:
apiForLambda:
Type: Api
Properties:
Path: /writedb
Method: post
Policies:
DynamoDBWritePolicy:
TableName: !Ref myDB
LambdaRead:
Type: AWS::Serverless::Function
Properties:
CodeUri: functionRead/
Handler: read.handler
Runtime: nodejs12.x
Events:
apiForLambda:
Type: Api
Properties:
Path: /readdb
Method: post
Policies:
DynamoDBReadPolicy:
TableName: !Ref myDB
在functionRead文件夹中,package.json具有以下内容 -
{
"name": "myproj",
"version": "1.0.0",
"description": "",
"main": "read.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"aws-sdk": "^2.783.0"
}
}
read.js文件包含以下代码 -
var AWS = require('aws-sdk');
var ddb = new AWS.DynamoDB.DocumentClient();
exports.handler = function(event, context, callback) {
var ID = event.id;
var params = {
TableName: 'tabmine',
Key: {
'id': ID
}
};
ddb.get(params, callback);
};
在functionWrite文件夹中,文件package.json具有以下内容 -
{
"name": "myproj",
"version": "1.0.0",
"description": "",
"main": "write.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"aws-sdk": "^2.783.0"
}
}
并且文件write.js具有以下内容 -
var AWS = require('aws-sdk');
var ddb = new AWS.DynamoDB.DocumentClient();
exports.handler = function(event, context, callback) {
var ID = event.id;
var NAME = event.name;
var params = {
TableName: 'tabmine',
Item: {
'id': ID,
'name': NAME
}
};
ddb.put(params, callback);
};
然后,我导航回终端中的myproj目录并运行命令sam build
。构建完成后,我运行命令sam deploy --guided
并按照步骤将堆栈部署到云端。然后,我检查了控制台以确认部署,并且成功。然后,在终端中,我跑了 curl -X POST -d '{"id":"one","name":"john"}' https://0000000000.execute-api.ap-south-1.amazonaws.com/Prod/writedb
. 但我得到了{message : 'Internal server Error'}
。
为了确认 lambda 和 dynamoDB 是否正确链接,我转到 Lambda 控制台并为名称为write.js的 lambda 函数创建了一个测试事件,具有相同的有效负载。它成功运行并将这两项输入到 dyanmoDB 表中. 同样,我为 lambda 函数创建了另一个测试事件,名称为read.js和 payload 。它也成功运行并显示了数据。{"id":"one","name":"john"}
{"id":"one"}
为了确认 API 网关和 lambda 是否正确链接,我在 API 网关中对资源/writedb
和进行了测试/readdb
,但它给了我{message : 'Internal server Error'}
.
请帮我解决这个问题。