我也是无服务器和 AWS 的新手。所以我的要求是这样的。我需要从 S3 下载文件。我已经尝试了很多方法。我读了很多文章,但找不到适合此目的的文档。
所以我所做的是,我使用 Serverless 创建了一个样板并获取了所有文件,例如 handler.js、serverless.yml
我需要知道从 S3 下载文件的正确步骤。
我尝试过的是。 处理程序.js
const AWS = require('aws-sdk');
const S3= new AWS.S3();
exports.hello = async (event, context) => {
console.log(`Hi from Node.js ${process.version} on Lambda!`)
S3.getObject({Bucket: '*******', Key: '******'}).promise().then( data =>{
return {
statusCode: 200,
body: data
})
}
无服务.yml
service: node11
custom:
bucket: *********
provider:
name: aws
runtime: provided # set to provided
stage: dev
region: us-east-1
iamRoleStatements:
- Effect: Allow
Action:
- s3:*
Resource: "arn:aws:s3:::${self:custom.bucket}/*"
functions:
hello:
handler: handler.hello
events:
- http:
path: /
method: get
layers: # add layer
- arn:aws:lambda:us-east-1:553035198032:layer:nodejs11:3
无论我做什么,我总是收到类似“内部服务器错误”的错误。
从 S3 获取文件的正确方法是什么?
最佳答案
试试这个:
const AWS = require('aws-sdk');
const S3= new AWS.S3();
exports.hello = async (event, context) => {
try {
console.log(`Hi from Node.js ${process.version} on Lambda!`);
// Converted it to async/await syntax just to simplify.
const data = await S3.getObject({Bucket: '*******', Key: '******'}).promise();
return {
statusCode: 200,
body: JSON.stringify(data)
}
}
catch (err) {
return {
statusCode: err.statusCode || 400,
body: err.message || JSON.stringify(err.message)
}
}
}
并确保在 serverless.yml 中,您已在 provider
下设置 runtime: nodejs8.10
。
Lambda 响应 body
必须是定义的字符串 here .
关于amazon-web-services - 使用 Serverless 和 Node js 从 S3 存储桶获取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54162354/