in python/s3-object-lambda/lambda/retrieve_transformed_object_lambda/index.py [0:0]
def handler(event, context):
event_object = event["getObjectContext"]
s3_url = event_object["inputS3Url"]
request = urllib.request.Request(
s3_url, method="GET"
)
try:
with urllib.request.urlopen(request) as response:
response = Response(
status=response.status,
headers=response.headers,
body=response.read().decode(response.headers.get_content_charset("utf-8")),
)
except urllib.error.HTTPError as e:
response = Response(
status=e.code,
headers=e.headers,
body=str(e.reason),
)
if response.status != 200:
# Write object back to S3 Object Lambda with an error
output_response = client.write_get_object_response(
RequestRoute=event_object["outputRoute"],
RequestToken=event_object["outputToken"],
StatusCode=400,
ErrorCode="SomethingWentWrong", ErrorMessage=response.body)
else:
# Transform object to the desired result if the object retrieval was successful
transformed_object = {
"metadata": {
"length": len(response.body),
"md5": hashlib.md5(response.body.encode()).hexdigest(),
"sha1": hashlib.sha1(response.body.encode()).hexdigest(),
"sha256": hashlib.sha256(response.body.encode()).hexdigest()
}
}
# Write object back to S3 Object Lambda with the transformed object
output_response = client.write_get_object_response(
RequestRoute=event_object["outputRoute"],
RequestToken=event_object["outputToken"],
Body=json.dumps(transformed_object),
)
print(f"Response: {json.dumps(output_response)}")
return {
"statusCode": 200,
"body": json.dumps({
"message": "Success" if response.status == 200 else "Failed"
})
}