使用数据在 AWS 上上传媒体 - Lambda 和 S3
Media upload on AWS with data - Lambda and S3
我正在制作一个简单的应用程序,用户可以在其中创建文本 post 并可选择包含媒体(目前仅包含图片,但将来会包含视频)。
目前,用户向 API 网关发送 POST
请求,调用 Lambda 函数将 post 数据插入数据库。这很好用。 API Gateway 使用正文映射来格式化事件数据。
为了上传媒体,我似乎至少有三个选择:
使 HTTP POST
请求正常 然后 将媒体上传到 S3(通过 Cloudfront?)。
- S3 将触发 Lambda 函数,该函数使用媒体 url.
更新 post 记录
- 这至少需要在前端调用 2 API 次。 -.-
- 媒体上传失败怎么办?我将不得不调用另一个 Lambda 函数来删除 post。如果失败了怎么办?这是一个兔子洞。
将媒体上传到 S3(通过 Cloudfront?)然后 发出 HTTP POST
请求。
- 这需要在前端调用 2 API 次。 -.-
- 如果
POST
请求失败怎么办?我的桶里会有多余的东西。我想我可以有一个桶清洁计划任务但是 ugg。
- 会不会S3键不对应post的
id
? (id
在数据库插入时生成。)
在 multipart/form
中使用 HTTP POST
请求上传媒体。
- 这就是我过去的做法,但我也有一个网络服务器(不是 lambda)。如果照片不是很大,传输到 S3 应该 相对较快并且我的 lambda 成本不会增加太多。但是,如果我决定添加视频怎么办?现在我的 lambda 调用将持续几秒钟。
此处的最佳做法是什么?这似乎是一个常见问题,但我在网上找到的所有指南都不关心 post 数据(仅媒体数据)。
(来自评论)
您的对象由两个同等重要的部分(文本和媒体)组成,您希望在一次操作中传输它们以避免一致性问题。
如果您可以将文本限制为少于 1024 个 Unicode 字符:将文本放入包含您的媒体的 s3 对象的键中。你会希望在键的前面保留一些字符,即在用户文本开始之前,因为 S3 的 ListObjects API 有一个有用的 "Prefix" 参数,你可以使你的前缀有利于搜索。然后附加一个 lambda 侦听器以在上传后创建数据库条目。
如果您的 post 超过 1000 个字符:那么是的,您需要两个操作和一个清理过程来捕获失败的字符。 S3 的对象过期应该有助于清理您将首先上传的媒体部分(您的选项 #2),您当然会在成功提交 post 上的文本部分后将媒体移出自动过期存储桶.
很高兴为您提供帮助
我正在制作一个简单的应用程序,用户可以在其中创建文本 post 并可选择包含媒体(目前仅包含图片,但将来会包含视频)。
目前,用户向 API 网关发送 POST
请求,调用 Lambda 函数将 post 数据插入数据库。这很好用。 API Gateway 使用正文映射来格式化事件数据。
为了上传媒体,我似乎至少有三个选择:
使 HTTP
POST
请求正常 然后 将媒体上传到 S3(通过 Cloudfront?)。- S3 将触发 Lambda 函数,该函数使用媒体 url. 更新 post 记录
- 这至少需要在前端调用 2 API 次。 -.-
- 媒体上传失败怎么办?我将不得不调用另一个 Lambda 函数来删除 post。如果失败了怎么办?这是一个兔子洞。
将媒体上传到 S3(通过 Cloudfront?)然后 发出 HTTP
POST
请求。- 这需要在前端调用 2 API 次。 -.-
- 如果
POST
请求失败怎么办?我的桶里会有多余的东西。我想我可以有一个桶清洁计划任务但是 ugg。 - 会不会S3键不对应post的
id
? (id
在数据库插入时生成。)
在
multipart/form
中使用 HTTPPOST
请求上传媒体。- 这就是我过去的做法,但我也有一个网络服务器(不是 lambda)。如果照片不是很大,传输到 S3 应该 相对较快并且我的 lambda 成本不会增加太多。但是,如果我决定添加视频怎么办?现在我的 lambda 调用将持续几秒钟。
此处的最佳做法是什么?这似乎是一个常见问题,但我在网上找到的所有指南都不关心 post 数据(仅媒体数据)。
(来自评论)
您的对象由两个同等重要的部分(文本和媒体)组成,您希望在一次操作中传输它们以避免一致性问题。
如果您可以将文本限制为少于 1024 个 Unicode 字符:将文本放入包含您的媒体的 s3 对象的键中。你会希望在键的前面保留一些字符,即在用户文本开始之前,因为 S3 的 ListObjects API 有一个有用的 "Prefix" 参数,你可以使你的前缀有利于搜索。然后附加一个 lambda 侦听器以在上传后创建数据库条目。
如果您的 post 超过 1000 个字符:那么是的,您需要两个操作和一个清理过程来捕获失败的字符。 S3 的对象过期应该有助于清理您将首先上传的媒体部分(您的选项 #2),您当然会在成功提交 post 上的文本部分后将媒体移出自动过期存储桶.
很高兴为您提供帮助