首页 > 解决方案 > 为什么我不能使用我的 Lambda 函数将文件上传到 s3?

问题描述

我正在创建一个绑定到 API 网关的 lambda 函数,并且我的代码似乎没有触发 s3.putObject 事件。

我可以毫无问题地控制台记录 AWS、s3、params 变量,但是当尝试使用 putObject 函数时,没有任何反应……我的其余代码似乎只是在运行。

有谁知道我可能需要做什么?

我在我的 s3 实例上设置了一个区域,一个 API 版本注销了我的变量检查了 cloudwatch 日志的更改

exports.handler = async (event) => {


const AWS = require('aws-sdk');
const s3 = new AWS.S3({region: "us-east-1", apiVersion: '2006-03-01'});
const params = {
Bucket: bucketName,
Key: 'file.txt',
ContentType: 'text/plain',
Body: JSON.stringify(event)};

// The below doesn't seem to run or log out
s3.putObject(params).promise().then(data => {
    console.log('complete:PUT Object',data);
    })
  .catch(err => {
    console.log('failure:PUT Object', err);
  });

 return JSON.stringify(event);

    };

我希望能够进入我的 s3 存储桶并查看上传的文件。相反,它是空的

标签: node.jsamazon-web-servicesamazon-s3aws-lambdaamazon-cloudwatch

解决方案


因为您exports.handler = async (event)在代码中使用,所以您使用的是 async/await ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function )。

在异步函数中,您可以使用await语法对同步调用做出承诺:

try {
  const res = await s3.upload(params, options).promise();
  console.log('complete:', res);
} catch(err) {
  console.log('error:', err);
}

这是一种现代的回调方法并且它是一致的(没有混合回调和异步函数)。


推荐阅读