【发布时间】:2019-12-04 10:30:46
【问题描述】:
我正在尝试使用 Lambda 函数中的 getObject 方法获取 s3 对象的预签名 URL。但是当我在浏览器中打开结果 URL 时显示 InvalidToken 错误。
我已将data.txt 文件上传到存储桶。
content.ts
import 'source-map-support/register';
import { APIGatewayProxyHandler } from 'aws-lambda';
import { S3 } from 'aws-sdk';
const s3 = new S3({
signatureVersion: 'v4'
});
export const getContent: APIGatewayProxyHandler = async (event, context) => {
const signedUrl = s3.getSignedUrl('getObject', {
Bucket: process.env.BUCKET,
Key: 'data.txt',
Expires: 60
});
return {
statusCode: 200,
body: JSON.stringify({
url: signedUrl
})
};
}
serverless.yml
service:
name: purchased-content
custom:
bucket: "project-paid-content"
plugins:
- serverless-webpack
provider:
name: aws
runtime: nodejs10.x
region: us-east-2
iamRoleStatements:
- Effect: "Allow"
Action:
- "s3:GetObject"
Resource:
- "arn:aws:s3:::${self:custom.bucket}"
- "arn:aws:s3:::${self:custom.bucket}/*"
functions:
getContent:
handler: content.getContent
events:
- http:
method: get
path: get
environment:
BUCKET: ${self:custom.bucket}
resources:
Resources:
PaidContentBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:custom.bucket}
AccessControl: Private
【问题讨论】:
-
您的代码在哪里运行(在 AWS 内部或 AWS 外部)?
-
这是一个 AWS Lambda 函数。它究竟如何在 AWS 之外运行?
标签: node.js amazon-web-services amazon-s3 lambda serverless-framework