node.js - 为什么我无法使用 Lambda 函数将文件上传到 s3?

标签 node.js amazon-web-services amazon-s3 aws-lambda amazon-cloudwatch

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

我可以毫无问题地对 AWS、s3、params 变量进行 console.log,但是当尝试使用 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 存储桶并查看上传的文件。相反它是空的

最佳答案

由于您在代码中使用了 exports.handler = async (event),因此您正在使用 async/await ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function )。

在异步函数中,您可以使用 await 语法来 promise 同步调用:

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

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

关于node.js - 为什么我无法使用 Lambda 函数将文件上传到 s3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54318729/

相关文章:

ssl - 在 AWS 上的 ELB EC2 之间添加 SSL 通信并强制仅进行 HTTPS 通信

scala - 使用 Play2/Scala 通过 Iteratee 将文件上传流转发到 S3

hadoop - 同一个IBM账号下访问多个COS实例

javascript - ExpressJS 中的 POST 请求问题

node.js - 来自 Node 的出站 SSL 连接

javascript - 发送消息时不和谐机器人出错

amazon-web-services - 将 Minio 备份到 S3

amazon-web-services - 如何将 Lambda 响应数据引用到 CloudFormation 中的输出

django - 如何让 Django 在 AWS S3 上将某些文件设为公开,将媒体文件设为私有(private)(无 403 错误)?

javascript - 在node.js中读取文件是否保证项目的顺序