Utiliser AWS lambda fonction pour convertir fichier S3 de zip gzip à l'aide de boto3 python

J'ai besoin de convertir un .fichier zip à partir de S3 à un .gzip fichier à l'aide de boto3 python dans une AWS lambda fonction. Toutes les suggestions sur la façon de faire cela?

Voici ce que j'ai à ce jour:

import json
import boto3
import zipfile
import gzip

s3 = boto3.resource('s3')

def lambda_handler(event, context):

    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']

    try: 
        s3Obj = s3.Object(bucket_name=bucket, key=key)
        response = s3Obj.get()
        data = response['Body'].read()
        zipToGzip = gzip.open(data, 'wb')
        zipToGzip.write(s3.upload_file(bucket, (s3 + '.gz')))
        zipToGzip.close()
    except Exception as e:
        print(e)
        print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket))
        raise e
Plus de détails et de votre code pourrait l'aider. Voulez-vous re-télécharger le fichier S3 gziped, ou tout simplement faire quelque chose avec localement au format gzip? Pourquoi a-t-elle à être une fonction lambda? Voulez-vous dire python lambda, ou AWS lambda?
Je veux dire AWS Lambda Fonction à l'aide de python comme il est maintenant supporté. J'ai un fichier sur S3 qui est dans .format zip, j'ai besoin de la changer .gzip format.
Super, merci pour la clarification. Ce qui se passe avec le code actuel? Améliore-t-il une exception, ou ne pas faire ce que vous voulez...?
Dans ce code actuel, quand il arrive à l'zipToGzip = gzip.open(data, 'wb') le morceau, c'erreurs en disant: file() argument 1 doit être codée à la chaîne sans octets NULS, pas de str
Sonne comme le S3 objet n'existe pas, ou le seau / clés sont incorrectes? Ou peut-être un problème de permission sur l'objet peut-être. Je vous suggère de vérifier que, et l'impression data pour vérifier ce qui est là.

OriginalL'auteur Scotty | 2015-10-14