如何通过AWS Lambda函数在s3中解压缩文件

时间:2019-11-12 20:33:50

标签: aws-lambda

我的要求包括:

  1. 在一个s3存储桶中放置了一个压缩文件
  2. 我们需要解压缩该文件并将其放置在同一存储桶的另一个文件夹中,或者可能放到另一个存储桶中。

请帮助。

我现在尝试运行lambda函数,并将错误显示为:模块初始化错误:调用HeadObject操作时出现错误(403):禁止。

我以其角色授予lambda访问s3存储桶的权限。还有其他需要提供访问权限的地方吗?

请找到以下代码:

import sys
import zipfile
import boto3

s3 = boto3.client('s3')

bucket = 'myoriginalnewtestbucket'
unzipTmpFile='terraform_0.12.13_windows_amd64.zip'

def lambda_handler(event, context):

    s3.download_file('bucket', unzipTmpFile, '/tmp/terraform_0.12.13_windows_amd64.zip')

    with zipfile.ZipFile('/tmp/terraform_0.12.13_windows_amd64.zip', 'r') as zip_ref:
        zip_ref.extractall('/tmp/')

在s3.download_file步骤中失败。 我授予lambda角色对s3存储桶和cloudwatch日志的完全许可。

请让我知道我可能会丢失的东西。

1 个答案:

答案 0 :(得分:0)

如果您希望在将Zip文件上传到存储桶后立即触发上述过程,则可以编写一个AWS Lambda函数

触发Lambda函数时,将向其传递上载的存储桶和对象的名称。该函数然后应该:

  • 下载压缩文件到/tmp
  • 解压缩文件(请注意:最大可用存储空间:500MB)
  • 浏览解压缩的文件并将其上传到目标存储桶
  • 删除所有创建的本地文件(以释放空间以供将来执行该功能)

有关一般示例,请参见:Tutorial: Using AWS Lambda with Amazon S3 - AWS Lambda