amazon-s3 - 如何在 Amazon S3 节点 Lambda 函数中创建文件
问题描述
我正在尝试创建对象并将其加载到 s3 容器中,但 PUT 事件似乎没有创建对象
const AWS = require('aws-sdk');
const fs = require('fs');
const s3 = new AWS.S3();
exports.handler = async (event) => {
// I've tried the full arn as well as just the bucket name
const bucket ='someBucketName';
const key = 'sample.csv';
// for testing purposes I am just loading a 30 row csv file.
// I've also tried a json object with no luck
// ex: const data = JSON.stringify({'label': 'foo'});
const data = fs.readFileSync('trees.csv','utf-8');
const params ={
Bucket : bucket,
Key : key,
Body: data
};
await s3.putObject(params, function (err, data) {
if(err){
console.log(`Error creating file ${err.stack}`);
}else{
console.log('File Created');
}
});
};
当我执行 lambda 时,它运行时没有错误。但是从来没有在存储桶中创建任何文件,而且我从来没有看到“文件已创建”的输出。如果我在 put 之前添加一个 console.log() ,我可以看到参数都已设置。lambda 具有完全的 s3 访问权限以及对 cloudWatch 的完全访问权限。这只是一个测试,所以我直接从 aws 中的 lambda 控制台运行它。
关于我遗漏或做错了什么的任何建议?
解决方案
找到感兴趣的人的答案。我省略了 putObject 函数上的 promise()。
const AWS = require('aws-sdk');
const fs = require('fs');
const s3 = new AWS.S3();
exports.handler = async (event) => {
const bucket ='someBucketName';
const key = 'sample.csv';
const data = fs.readFileSync('trees.csv','utf-8');
const params ={
Bucket : bucket,
Key : key,
Body: data
};
await s3.putObject(params, function (err, data) {
if(err){
console.log(`Error creating file ${err.stack}`);
}else{
console.log('File Created');
}
}).promise();
};
推荐阅读
- react-native - 是否可以在 ExpoKit 中使用交互式推送通知?
- c# - UWP 中几个 ui 元素的动画
- python - 创建列表列表并添加到 for 循环中的字典
- c# - 设备重启时如何重新连接tcp连接
- c++ - 将 unordered_map 的新实例插入 unordered_map
- php - Symfony:带有 GET 方法的表单,凌乱的 URL
- r - 如何在 RStudio 中导入带有汉字的大型 csv 数据
- node.js - 将 $lookup 与条件连接一起使用
- git-bash - 启动新终端时 bash 脚本不运行(Windows 10)
- algorithm - 处理大量的微依赖