Home > Blockchain >  AWS lambda function with container working locally but not on aws
AWS lambda function with container working locally but not on aws

Time:08-19

i have create a lambda function with container. The code work well when i test locally.

curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations"  -d ......

But when i push it to ECR and deploy on lambda, it did not worked. Error is in the first line of code

with open(os.path.join('../tmp',video_name), 'wb') as f:
    s3_client.download_fileobj('mybucketname', video_name, f)

I dont know where the issue is Here is complete error

START RequestId: 5facecee-e48f-4575-beb8-8afb0710f3e5 Version: $LATEST
[ERROR] 2022-08-18T12:07:09.814Z    5facecee-e48f-4575-beb8-8afb0710f3e5    An error occurred running the application.
Traceback (most recent call last):
File "/var/task/mangum/protocols/http.py", line 58, in run
await app(self.scope, self.receive, self.send)
File "/var/task/fastapi/applications.py", line 269, in __call__
await super().__call__(scope, receive, send)
File "/var/task/starlette/applications.py", line 124, in __call__
await self.middleware_stack(scope, receive, send)
File "/var/task/starlette/middleware/errors.py", line 184, in __call__
raise exc
File "/var/task/starlette/middleware/errors.py", line 162, in __call__
await self.app(scope, receive, _send)
File "/var/task/starlette/exceptions.py", line 93, in __call__
raise exc
File "/var/task/starlette/exceptions.py", line 82, in __call__
await self.app(scope, receive, sender)
File "/var/task/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/var/task/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/var/task/starlette/routing.py", line 670, in __call__
await route.handle(scope, receive, send)
File "/var/task/starlette/routing.py", line 266, in handle
await self.app(scope, receive, send)
File "/var/task/starlette/routing.py", line 65, in app
response = await func(request)
File "/var/task/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/var/task/fastapi/routing.py", line 162, in run_endpoint_function
return await run_in_threadpool(dependant.call, **values)
File "/var/task/starlette/concurrency.py", line 41, in run_in_threadpool
return await anyio.to_thread.run_sync(func, *args)
File "/var/task/anyio/to_thread.py", line 31, in run_sync
return await get_asynclib().run_sync_in_worker_thread(
File "/var/task/anyio/_backends/_asyncio.py", line 937, in run_sync_in_worker_thread
return await future
File "/var/task/anyio/_backends/_asyncio.py", line 867, in run
result = context.run(func, *args)
File "/var/task/app.py", line 17, in read_item
download_video(video_name)
File "/var/task/botos3.py", line 9, in download_video
with open(os.path.join('../tmp',video_name), 'wb') as f:
END RequestId: 5facecee-e48f-4575-beb8-8afb0710f3e5

CodePudding user response:

You need to change this:

with open(os.path.join('../tmp',video_name), 'wb') as f:

to this:

with open(os.path.join('/tmp',video_name), 'wb') as f:

Only /tmp is writeable in the AWS Lambda runtime environment.

  • Related