S3のファイルをダウンロードして圧縮し、S3にアップロードするLambda(paython3.6)のソースコードです。
# coding: utf-8 import boto3 import zipfile S3_BUCKET = 'blue21.local' S3_KEY = 'sample.dat' def lambda_handler(event, context): print(event) # download s3 = boto3.client('s3') response = s3.get_object(Bucket=S3_BUCKET, Key=S3_KEY) body = response['Body'].read() bodystr = body.decode('utf-8') # zip zip_path = '/tmp/%s.zip' % S3_KEY zf = zipfile.ZipFile(zip_path, mode="w", compression=zipfile.ZIP_DEFLATED) zf.writestr(S3_KEY, bodystr) zf.close() # upload upload_path = '%s.zip' % S3_KEY s3 = boto3.resource('s3') bucket = s3.Bucket(S3_BUCKET) bucket.upload_file(zip_path, upload_path) return { "status": "ok" }
Lambdaの /tmp は 512MB 制限があるので、S3からファイルをダウンロードして /tmpに保存するのはやめました。
S3のファイルのデータを変数に取り込んで、ZIP圧縮しています。