使用AWS和NodeJS进行无服务器环境的构建第5步
首先
在上一次中,我们使用了API Gateway(REST API)+ Lambda(NodeJS)+ DynamoDB的组合来创建了CRUD。这一次,我们将使用S3 + Lambda + DynamoDB的组合。我们将将S3作为触发器(在将Json文件上传到S3存储桶时),使用Lambda(NodeJS)将获取到的Json数据保存到DynamoDB表中。
如果有任何表达不清楚的地方,请毫不犹豫地指出。
* 如果对无服务器的概念不明白,请参考这篇文章。
创建DynamoDB


使用IAM创建角色和内联策略。





请参考这里来创建内联策略。
顺便提一下,因为这次只是将写入操作写入到DynamoDB表中,所以只需要使用PutItem一项权限即可。
创建S3存储桶

创建和配置Lambda函数。 hé Lambda .)

const AWS = require('aws-sdk');
const s3 = new AWS.S3();
const documentClient = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event) => {
const { name } = event.Records[0].s3.bucket;
const { key } = event.Records[0].s3.object;
const getObjectParams = {
Bucket: name,
Key: key
};
try {
const s3Data = await s3.getObject(getObjectParams).promise();
const usersStr = s3Data.Body.toString();
const usersJSON = JSON.parse(usersStr);
console.log(`Jsonファイル取得結果 ::: ${usersStr}`);
//取得した文のJson結果をDynamoDBテーブルに追加する
await Promise.all(usersJSON.map(async user => {
const { id, firstname, lastname } = user;
const putParams = {
TableName: "JsonDataFromS3",
Item: {
id: id,
firstname: firstname,
lastname: lastname
}
};
await documentClient.put(putParams).promise();
}));
} catch(err) {
console.log(err);
}
};
确认结果

[
{
"id": "5ac6be6b-8064-4159-9de6-89178a9f8a54",
"firstname": "Matt",
"lastname":"Hansen"
},
{
"id": "4b912da3-66aa-45c1-a87f-9f79a256e570",
"firstname": "Brad",
"lastname":"Lunsford"
},
{
"id": "8ef0c795-42d4-439d-962e-75afe957e069",
"firstname": "Jeremy",
"lastname":"Kane"
}
]

我计划最后使用无服务器的方式创建RESTful Web服务。我打算结合Lambda(NodeJS)+ API Gateway + DynamoDB + Cognito。