【问题标题】:How to write a file in AWS S3 bucket during AWS lambda function execution?如何在 AWS lambda 函数执行期间在 AWS S3 存储桶中写入文件?
【发布时间】:2019-12-11 11:10:21
【问题描述】:

我需要使用 docx4j 和 iText 生成文件的 (.docx , .pdf)。最终生成的文档应该使用 AWS lambda 函数存储在 S3 存储桶中。

我尝试了几个选项,但没有一个解决方案适合我。我可以将本地文件上传到 S3 存储桶,并使用我的 java 代码将普通文本文件写入 AWS S3 存储桶。

但是我的要求是,首先我必须为所需位置(即 S3 存储桶)的(.docx,.pdf)创建文件路径,然后调用我的代码以生成文件(.docx,.pdf)并将其保存到 S3 存储桶中。

注意:我希望调用我的保存方法(lambda 处理程序),它将直接将文件保存在 S3 存储桶中。或者任何一种方式,如果 s3 不允许直接保存文件,那么替代 aws 提供什么来保存本地/临时文件,以便稍后我可以将这些临时文件推送到 s3 存储桶中?

如果有人在这方面工作或知道如何做,请分享他们的意见。

【问题讨论】:

  • 你需要在本地创建你的文件,做你需要做的关于这个文件的所有事情,最后把它上传到bucket。我不确定您是否可以直接向您的存储桶打开文件处理程序。它不是文件存储,而是对象存储。
  • 你的问题很难理解。您目前遇到什么具体问题?您是否在询问如何将文件从 Lambda 函数的 /tmp/ 目录上传到 Amazon S3 存储桶?随意编辑您的问题以添加详细信息。
  • @John Rotenstein,请检查我已经注意到了。

标签: java amazon-web-services amazon-s3 aws-lambda aws-sdk


【解决方案1】:

有两种方法可以做到这一点。第一种方法是先将文件存储在/tmp/ 中,然后使用 putobject API 上传到 s3,指定存储桶和键名。

第二种方法是使用相同的putobject但指定您的对象直接将对象上传到s3。

可以在here找到相关文档

这方面的详细例子可以找到here

【讨论】:

  • 让我尝试这两种方法。如果有人会为我工作,那么会接受你的回答。您能否分享 /temp/ 文件夹的示例路径层次结构??
  • tmp 文件夹就是 /tmp/。您可以 chdir 进入它或使用完整路径保存,例如:/tmp/abc.txt
  • 好的,我会尝试使用那个临时路径。让我试一次。我们可以在 /temp/ 文件夹中创建子目录吗?
  • 我不确定,但请记住这是临时存储,这意味着它会在 lambda 执行完成后被擦除。大小约为 512 mb,所以你不能在上面存储任何大的东西。
  • @KhAnSaAb 使用/tmp/,而不是/temp/。另外,请注意此目录的内容在执行后不会被删除。如果容器稍后被重新使用,那么之前的文件仍将在/tmp/ 中。因此,您应该在结束 Lambda 函数之前擦除文件,否则它可能会在以后的执行中耗尽存储空间。
猜你喜欢
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 2016-12-07
  • 2015-03-21
  • 2019-01-03
  • 2020-03-14
  • 1970-01-01
  • 2020-12-28
相关资源
最近更新 更多