Notei que apenas para capturar a exceção usando botocore.exceptions.ClientError
precisamos instalar o botocore. O botocore ocupa 36M de espaço em disco. Isso é particularmente impactante se usarmos as funções aws lambda. Em vez disso, se usarmos exceção, podemos pular usando a biblioteca extra!
- Estou validando para que a extensão do arquivo seja '.csv'
- Isso não emitirá uma exceção se o bucket não existir!
- Isso não emitirá uma exceção se o bucket existir, mas o objeto não existir!
- Isso gera uma exceção se o balde estiver vazio!
- Isso lança uma exceção se o bucket não tiver permissões!
O código fica assim. Por favor, compartilhe seus pensamentos:
import boto3
import traceback
def download4mS3(s3bucket, s3Path, localPath):
s3 = boto3.resource('s3')
print('Looking for the csv data file ending with .csv in bucket: ' + s3bucket + ' path: ' + s3Path)
if s3Path.endswith('.csv') and s3Path != '':
try:
s3.Bucket(s3bucket).download_file(s3Path, localPath)
except Exception as e:
print(e)
print(traceback.format_exc())
if e.response['Error']['Code'] == "404":
print("Downloading the file from: [", s3Path, "] failed")
exit(12)
else:
raise
print("Downloading the file from: [", s3Path, "] succeeded")
else:
print("csv file not found in in : [", s3Path, "]")
exit(12)