繁体   English   中英

S3 触发器无法更新 DynamoDB 中的表

[英]S3 trigger failes to update table in DynamoDB

我在 AWS Amplify 中创建了一个 web 应用程序。 web 页面将文件上传到 S3 存储桶。 我创建了一个触发器,它应该在 DynamoDB 中为每个上传的文件创建一条记录。 我的触发代码被调用,我在任何地方都找不到错误,但表格没有更新。

触发代码:

exports.handler = async function (event) {
  console.log('Received S3 event:', JSON.stringify(event, null, 2));
  // Get the object from the event and show its content type
  const eventName = event.Records[0].eventName;
  const bucket = event.Records[0].s3.bucket.name; //eslint-disable-line
  let key = event.Records[0].s3.object.key.replace('%3A', ':');
  const imgSize = event.Records[0].s3.object.size;
  console.log(`Bucket: ${bucket}`, `Key: ${key}`);

  if (eventName === "ObjectCreated:Put") {
    console.log("This is a put event")
    addDBActivity(key);
   }
};

var AWS = require('aws-sdk');
var ddb = new AWS.DynamoDB();

function addDBActivity(key) {
  console.log("in addDBActivity");
//  let activityTable = "Activity-***-dev"
  let activityTable = "Activity-ctuqkflvhvbjxftdvdo64xnzle-dev"
  let name = key.split('/').pop();
  let owner = key.split('/')[0];
  let format = "tcx";
  let type = "cycling";
  var params = {
    TableName: activityTable,
    Item: {
      key: { S: key },
      name: { S: name },
      owner: { S: owner },
      format: { S: format },
      type: { S: type },
    }
  };

  console.log(params);

  ddb.putItem(params).promise()
  .then(function(data) {
    console.log(data);
  })
  .catch(function(err) {
    console.log(err);
  });

  console.log("after promise");
}

架构.graphql

type Activity @model @auth(rules: [
    { allow: owner, ownerField: "id" }
  ]) {
  id: ID!
  name: String!
  owner: String!
  key: String!
  format: String!
  type: String!
}

上传文件后,这是 CloudWatch 中的日志 output:

2021-12-18T13:14:26.093+02:00
2021-12-18T11:14:26.092Z    20cf4afe-3c96-4ee2-94c6-7c12c27c4d66    INFO    This is a put event
    2021-12-18T11:14:26.092Z 20cf4afe-3c96-4ee2-94c6-7c12c27c4d66 INFO This is a put event
    2021-12-18T13:14:26.093+02:00
2021-12-18T11:14:26.093Z    20cf4afe-3c96-4ee2-94c6-7c12c27c4d66    INFO    in addDBActivity
    2021-12-18T11:14:26.093Z 20cf4afe-3c96-4ee2-94c6-7c12c27c4d66 INFO in addDBActivity
    2021-12-18T13:14:26.123+02:00
2021-12-18T11:14:26.123Z    20cf4afe-3c96-4ee2-94c6-7c12c27c4d66    INFO    {
  TableName: 'Activity-ctuqkflvhvbjxftdvdo64xnzle-dev',
  Item: {
    key: {
      S: 'public/sourb/ramp_test2tcx-a03e6380-e0c3-4966-b4eb-b74375f930bd.tcx'
    },
    name: { S: 'ramp_test2tcx-a03e6380-e0c3-4966-b4eb-b74375f930bd.tcx' },
    owner: { S: 'public' },
    format: { S: 'tcx' },
    type: { S: 'cycling' }
  }
}
    2021-12-18T11:14:26.123Z 20cf4afe-3c96-4ee2-94c6-7c12c27c4d66 INFO { TableName: 'Activity-ctuqkflvhvbjxftdvdo64xnzle-dev', Item: { key: { S: 'public/sourb/ramp_test2tcx-a03e6380-e0c3-4966-b4eb-b74375f930bd.tcx' }, name: { S: 'ramp_test2tcx-a03e6380-e0c3-4966-b4eb-b74375f930bd.tcx' }, owner: { S: 'public' }, format: { S: 'tcx' }, type: { S: 'cycling' } } }
    2021-12-18T13:14:26.542+02:00
2021-12-18T11:14:26.522Z    20cf4afe-3c96-4ee2-94c6-7c12c27c4d66    INFO    after promise

知道可能是什么问题吗?

您正在使用异步处理程序,因此您的 function 可能在您的数据库有机会更新之前完成。 您可以将代码包装在Promise中,如文档中所示,以确保完全执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM