Amazon S3 预签名 URL 项目教程
项目地址:https://gitcode.com/gh_mirrors/am/amazon-s3-presigned-urls-aws-sam
1. 项目介绍
amazon-s3-presigned-urls-aws-sam
是一个开源项目,展示了如何使用 AWS SAM (Serverless Application Model) 生成预签名 URL,以便从客户端直接上传对象到 Amazon S3。预签名 URL 允许用户在特定时间段内上传或下载文件,而无需 AWS 凭证。
该项目的主要目的是帮助开发者理解如何在无服务器环境中使用预签名 URL 进行安全的文件上传。通过 AWS Lambda 和 API Gateway,开发者可以轻松生成预签名 URL,并将其提供给客户端应用程序。
2. 项目快速启动
2.1 环境准备
在开始之前,请确保您已经安装了以下工具:
- AWS CLI(已配置管理员权限)
- AWS SAM CLI(最低版本 0.48)
- Node.js 16.x
2.2 克隆项目
首先,克隆项目到本地开发环境:
git clone https://github.com/aws-samples/amazon-s3-presigned-urls-aws-sam.git
cd amazon-s3-presigned-urls-aws-sam
2.3 部署应用
项目提供了两个 SAM 模板:一个提供开放的 API,另一个使用授权器。以下是部署开放 API 模板的步骤:
sam deploy --guided
在部署过程中,系统会提示您输入一些参数。建议您使用默认值,但需要特别注意以下参数:
- Stack Name: 输入堆栈名称,例如
s3Uploader
。 - AWS Region: 选择您偏好的 AWS 区域,例如
us-east-1
。
部署完成后,记下输出中的 APIendpoint
值,它看起来类似于 https://ab123345677.execute-api.us-west-2.amazonaws.com
。
2.4 测试前端应用
前端代码位于 frontend
子目录中。在运行前端应用之前,您需要在 index.html
文件的第 29 行设置 API Gateway 的端点。
由于 CORS 限制,您不能直接在本地浏览器中运行此文件。您可以将文件复制到 S3 桶中,或使用 AWS Amplify Console 进行部署。
部署完成后,访问前端页面并上传一个 JPG 文件。上传成功后,您将在后端的 S3 桶中看到该对象。
3. 应用案例和最佳实践
3.1 应用案例
- 文件上传服务: 通过预签名 URL,用户可以直接将文件上传到 S3,而无需通过服务器中转。这减少了服务器的负载,并提高了上传速度。
- 临时文件访问: 预签名 URL 可以用于临时访问私有 S3 对象,例如在用户下载私有文件时生成一个临时的下载链接。
3.2 最佳实践
- 设置合理的过期时间: 预签名 URL 的过期时间应根据业务需求设置,避免过长的过期时间导致安全风险。
- 使用授权器: 在生产环境中,建议使用带有授权器的 SAM 模板,以确保只有授权用户才能生成预签名 URL。
4. 典型生态项目
- AWS Lambda: 用于生成预签名 URL 的无服务器函数。
- Amazon API Gateway: 用于暴露 Lambda 函数,提供 HTTP 端点。
- Amazon S3: 用于存储上传的文件。
- AWS SAM: 用于定义和部署无服务器应用。
通过这些生态项目的结合,开发者可以轻松构建一个安全、高效的无服务器文件上传服务。