使用AWS和NodeJS进行无服务器环境的构建第5步

首先

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

创建DynamoDB

スクリーンショット 2020-01-07 21.10.06.png
スクリーンショット 2020-01-07 21.11.36.png

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

スクリーンショット 2020-01-07 20.00.58.png
スクリーンショット 2020-01-07 20.01.32.png
スクリーンショット 2020-01-07 20.02.57.png
スクリーンショット 2020-01-07 20.03.12.png
スクリーンショット 2020-01-07 20.04.14.png

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

创建S3存储桶

スクリーンショット 2020-01-07 20.13.35.png

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

スクリーンショット 2020-01-07 20.33.45.png
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);
  }
};

确认结果

スクリーンショット 2020-01-07 21.49.15.png
[
    {
      "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"
    }
  ]
スクリーンショット 2020-01-07 21.55.54.png

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

广告
将在 10 秒后关闭
bannerAds