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
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
Vous devez vous connecter pour publier un commentaire.
OK, got it compris. Merci pour vos commentaires Lee.
Je suis sûr que le problème est que le Boto3 objet n'est pas être lus correctement en tant que binaire. Donc, Scotty est d'avoir à télécharger le fichier à partir de la S3 seau, au lieu d'utiliser
response['Body'].read()
avec un rendez - vous qui devrait être le fichier binaire contenu. Je vais avoir le même problème - en essayant d'imprimerresponse['Body'].read()
me donne juste la chaîne "PK". Pas sûr de ce que cela signifie. Avoir à tirer sur le seau est assez gênant.OriginalL'auteur Scotty