AWS Lambda function to upload a file to S3 bucket

Viewed 57

My task is to upload a file into an AWS S3 bucket using a Lambda function. For preliminary testing, I am creating a file in the function and uploading it to the desired S3 bucket. Code:

import json
import os
import boto3

session = boto3.session.Session()

def lambda_handler(event, context):
    # TODO implement
    s3 = session.resource('s3')
    bucket_name = os.environ['s3_dest_bucket']
    key = 's3_lambda_function_test/' + 's3_lambda_test_DL.txt'
    
    dummy_data = b'Here we have some data'
    
    s3Obj = s3.Object(bucket_name, key=key)
    s3Obj.put(Body=dummy_data)
    print("Uploading to s3 bucket.")
    s3Obj.upload_file('s3_lambda_test_DL.txt')
    
    return {
        'statusCode': 200,
        'body': json.dumps('Successful upload')
    }

The way the code is currently written, it does exactly what I want: creates file s3_lambda_test_DL.txt, adds text to it, and uploads it to the desired S3 bucket. When I deploy and test the function on Lambda though, I get the following Response in the Execution log:

{
  "errorMessage": "[Errno 2] No such file or directory: 's3_lambda_test_DL.txt'",
  "errorType": "FileNotFoundError",
  "requestId": "274fa38d-73d7-43b7-add0-760fd78ee1f2",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 18, in lambda_handler\n    s3Obj.upload_file('s3_lambda_test_DL.txt')\n",
    "  File \"/var/runtime/boto3/s3/inject.py\", line 279, in object_upload_file\n    return self.meta.client.upload_file(\n",
    "  File \"/var/runtime/boto3/s3/inject.py\", line 130, in upload_file\n    return transfer.upload_file(\n",
    "  File \"/var/runtime/boto3/s3/transfer.py\", line 287, in upload_file\n    future.result()\n",
    "  File \"/var/runtime/s3transfer/futures.py\", line 103, in result\n    return self._coordinator.result()\n",
    "  File \"/var/runtime/s3transfer/futures.py\", line 266, in result\n    raise self._exception\n",
    "  File \"/var/runtime/s3transfer/tasks.py\", line 269, in _main\n    self._submit(transfer_future=transfer_future, **kwargs)\n",
    "  File \"/var/runtime/s3transfer/upload.py\", line 585, in _submit\n    upload_input_manager.provide_transfer_size(transfer_future)\n",
    "  File \"/var/runtime/s3transfer/upload.py\", line 244, in provide_transfer_size\n    self._osutil.get_file_size(transfer_future.meta.call_args.fileobj)\n",
    "  File \"/var/runtime/s3transfer/utils.py\", line 247, in get_file_size\n    return os.path.getsize(filename)\n",
    "  File \"/var/lang/lib/python3.9/genericpath.py\", line 50, in getsize\n    return os.stat(filename).st_size\n"
  ]
}

Any advice on this?

0 Answers
Related