使用AWS和Node.js构建无服务器环境的第三步
首先
在上一篇文章中,我们创建了DynamoDB表和项目,配置了在Lambda函数中使用的角色和内联策略。本次我们将继续,在API Gateway(使用REST API实现CRUD)作为触发器,调用Lambda(NodeJS)函数,并能够在DynamoDB中进行查询和更新。
如果有任何不适当的表达,请指正。
※如果对无服务器概念不熟悉的话,可以参考这里。
建筑图
一個選項是:流動
-
- ソースで直接(Api gatewayを使わず)参照や更新ができるかを確認
-
- POST(ユーザーの登録)
domain.com/users/{id}
DELETE(対象ユーザーの削除)
domain.com/users/{id}
GET(全ユーザーの取得)
domain.com/users
PATCH(対象ユーザーの更新)
domain.com/users/{id}
我可以直接在源代码中进行参考或更新而无需使用Api网关来确认吗?
为了能够查阅数据,进行源代码编辑。
我参考了这个参考资料。
'use strict';
const AWS = require('aws-sdk');
const myRegion = "us-east-2";
AWS.config.update({ region: myRegion});
exports.handler = async (event, context) => {
const documentClient = new AWS.DynamoDB.DocumentClient({ region: myRegion});
//読込用のデータ
const params1 = {
TableName: "Users",
Key: {
id: "01"
}
};
//書込用のデータ
const params2 = {
TableName: "Users",
Item: {
id: "02",
firstname: "first02",
lastname: "last02"
}
};
try {
const readData = await documentClient.get(params1).promise();
const writeData = await documentClient.put(params2).promise();
console.log(readData);
console.log(writeData);
} catch (err) {
console.log(err);
}
};
请务必注意在同一区域中创建DynamoDB和Lambda。同时,请确保将代码中的myRegion变量值与上述相匹配。如果其中有任何一项不满足条件,可能会引发未知错误AccessDeniedException。
添加和配置 API Gateway 触发器。
关于边缘优化(引用自AWS官方)
Edge optimized API是通过API网关创建和管理的通过CloudFront分配访问的端点。以前,边缘优化API是使用API网关创建API时的默认选项。
以下是参考资料:
– 我对REST API进行了研究
– 我解释了边缘优化的概念
创建和设置请求、响应映射模型。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "UsersInputModel",
"type": "object",
"properties": {
"id": {"type": "string"},
"firstname": {"type": "string"},
"lastname": {"type": "string"}
}
}
实现POST方法(用户注册)。
在这里,我们使用API Gateway创建一个POST方法来验证记录是否被成功注册。
创建并设置与API Gateway相关联的Lambda函数。
函数名为putUsers,其余设置与上次相同(参考开头创建Lambda函数的截图)。
我将贴上以下的源代码。
关于DynamoDB的配置,请参考这篇文章。(DynamoDB表的创建部分)
'use strict';
const AWS = require('aws-sdk');
const myRegion = "us-east-2";
AWS.config.update({ region: myRegion});
exports.handler = async (event, context) => {
const documentClient = new AWS.DynamoDB.DocumentClient({ region: myRegion});
let responseBody = "";
let statusCode = 0;
const { id, firstname, lastname } = JSON.parse(event.body);
const params = {
TableName: "Users",
Item: {
id: id,
firstname: firstname,
lastname: lastname
}
};
try {
const data = await documentClient.put(params).promise();
responseBody = JSON.stringify(data);
statusCode = 201;
} catch (err) {
responseBody = `Unable to put user ${err}`;
statusCode = 403;
}
const response = {
statusCode: statusCode,
headers: {
"Content-Type": "application/json"
},
body: responseBody
};
return response;
}
创建和配置POST方法 。
请在API网关上进行确认测试
{
"id": "03",
"firstname": "first03",
"lastname": "last03"
}
如果在测试状态中返回201,则表示成功。
⚠️ 顺便提一下,如果请求主体设置了原本DynamoDB表中没有的项目逻辑名称(比如故意设置成nickname而不是firstname),测试处理将会顺利执行。目标记录的firstname字段被设计成可以包含空格。
待续
因为可能会变得有点长,所以下次会继续发布剩下的部分。
接下来,将创建DELETE(删除目标用户)、GET(获取所有用户)和PATCH(更新目标用户)的方法,并将实现完整的CRUD功能。