为什么我不能使用我的 Lambda 函数将文件上传到 s3?
Why can't I upload a file to s3 with my Lambda function?
我正在创建一个已绑定到 API 网关的 lambda 函数,我的代码似乎没有触发 s3.putObject 事件。
我可以 console.log 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 存储桶并查看上传的文件。相反它是空的
在告诉 lambda 得到 return 结果之前,您并不是在等待 return 的承诺。如果你有一堆链接,Promises 很棒,但在这个简单的例子中,一个回调就足够了。
此外,如果您使用异步,则需要确保运行时为 8.10 或更高版本。
exports.handler = async (event, context, callback) => {
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)};
console.log(JSON.stringify(event));
// The below doesn't seem to run or log out
s3.upload(params, options, function(err, data) {
console.log(err, data);
if(!err) {
callback(null, "All Good");
}
else {
callback(err);
}
});
};
多读一点上下文对象。 https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html
因为您在代码中使用了 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);
}
这是一种现代的回调方法,它是一致的(没有混合回调和异步函数)。
我正在创建一个已绑定到 API 网关的 lambda 函数,我的代码似乎没有触发 s3.putObject 事件。
我可以 console.log 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 存储桶并查看上传的文件。相反它是空的
在告诉 lambda 得到 return 结果之前,您并不是在等待 return 的承诺。如果你有一堆链接,Promises 很棒,但在这个简单的例子中,一个回调就足够了。
此外,如果您使用异步,则需要确保运行时为 8.10 或更高版本。
exports.handler = async (event, context, callback) => {
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)};
console.log(JSON.stringify(event));
// The below doesn't seem to run or log out
s3.upload(params, options, function(err, data) {
console.log(err, data);
if(!err) {
callback(null, "All Good");
}
else {
callback(err);
}
});
};
多读一点上下文对象。 https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html
因为您在代码中使用了 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);
}
这是一种现代的回调方法,它是一致的(没有混合回调和异步函数)。