我试图更好地理解AWS Lambda和我的Web应用程序的整体流程。
我希望客户端将文件上传到公共存储桶(完全绕开我的API资源),并让客户端UI根据GUID将其放入其帐户的文件夹中。从那里开始,当lambda检测到对公共存储桶的更改时,我将运行它,然后调整文件大小并将其放入已处理的存储桶中。
但是,我需要在RDS数据库中更新一行。
问题
我正在努力了解用于标识要更新的行的最佳实践。我是否应该上传具有必要详细信息的另一个文件(每个图像上传实际上都包含两个文件-一个图像和一个json配置)?是否应该处理图像,然后客户端接收一些数据,并发出API请求以更新数据库中的行?此步骤的正确流程是什么?
谢谢。
答案 0 :(得分:1)
您应使用预先签名的URL 进行上传。这使您的应用程序可以限制上传,例如文件类型,目录和大小。这意味着,在上传文件时,您已经知道谁进行了上传。由于它不需要公开,因此还可以防止人们将其随机上传到存储桶。
然后,上传可以使用Amazon S3事件来触发Lambda函数。文件名/位置可用于标识用户,因此可以在处理文件时更新数据库。
请参阅:Uploading Objects Using Presigned URLs - Amazon Simple Storage Service
答案 1 :(得分:0)
我避免绕过API直接将文件上传到S3。从API上传文件可让您控制文件的类型,大小等,并且您将确切知道谁在上传文件(API主体中的API身份验证或用户ID)。向公开开放存储桶也是一种安全风险。
您的API客户端然后可以通过API上传文件,然后可以将文件存储在S3(触发另一个Lambda进行处理)上,然后使用该用户的适当元数据更新RDS。