amazon-web-services - 使用 Serverless 和 Node js 从 S3 存储桶获取文件

标签 amazon-web-services amazon-s3 serverless-framework serverless aws-serverless

我也是无服务器和 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/

相关文章:

php - 尝试将 sql 文件上传到 amazon s3 时出现数组到字符串的转换错误

java - 返回图像 AWS S3 (S3Object) Spring REST Controller

amazon-web-services - 如何安排 AWS 中的 IOT 作业在特定时间运行?

ruby-on-rails - 使用 S3 预签名 URL 上传一个文件,该文件将具有公共(public)读取权限

amazon-web-services - AWS : Cloudformation script create S3 bucket for CloudTrail based on conditionals

node.js - SequelizeJS 无法连接到 "MY"互联网上的 RDS 实例

amazon-web-services - AWS Serverless 如何通过 lambda 提供 S3 和其他一些静态文件

javascript - 无服务器以合理的方式读取 POST 变量

postgresql - RDS 上的 PostgreSQL 顺序扫描速度慢?

java - 用于多个 JSON 对象模式的 Spring IntegrationFlow