I have built a simple lambda with SAM
handler:
def lambda_handler(event, context):
print("start here")
client = boto3.client("dynamodb", region_name="us-east-1")
template:
MyLambdaFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: lambda/
Handler: MyLambdaFunction.lambda_handler
Runtime: python3.7
Events:
MyLambdaFunction:
Type: Schedule
Properties:
Schedule: cron(0 0 1 * ? *)
and try to run it locally with sam (using this solution How to connect RDS instance when running SAM locally?)
sam build --use-container
sam local invoke --no-event --docker-network host MyLambdaFunction
but got the following error
Traceback (most recent call last):
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/docker/api/client.py", line 261, in _raise_for_status
response.raise_for_status()
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/requests/models.py", line 941, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http+docker://localhost/v1.35/networks/95139d2edc48f8f7962cefa291649ec668663f9a1c0f609b56725f3c62f9fe8e/connect
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/linuxbrew/.linuxbrew/bin/sam", line 11, in <module>
load_entry_point('aws-sam-cli==1.1.0', 'console_scripts', 'sam')()
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/click/decorators.py", line 73, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/samcli/lib/telemetry/metrics.py", line 96, in wrapped
raise exception # pylint: disable=raising-bad-type
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/samcli/lib/telemetry/metrics.py", line 62, in wrapped
return_value = func(*args, **kwargs)
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/samcli/commands/local/invoke/cli.py", line 86, in cli
parameter_overrides,
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/samcli/commands/local/invoke/cli.py", line 151, in do_cli
context.function_name, event=event_data, stdout=context.stdout, stderr=context.stderr
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/samcli/commands/local/lib/local_lambda.py", line 100, in invoke
self.local_runtime.invoke(config, event, debug_context=self.debug_context, stdout=stdout, stderr=stderr)
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/samcli/local/lambdafn/runtime.py", line 83, in invoke
self._container_manager.run(container)
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/samcli/local/docker/manager.py", line 93, in run
container.create()
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/samcli/local/docker/container.py", line 138, in create
network.connect(self.id)
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/docker/models/networks.py", line 57, in connect
container, self.id, *args, **kwargs
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/docker/utils/decorators.py", line 19, in wrapped
return f(self, resource_id, *args, **kwargs)
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/docker/api/network.py", line 249, in connect_container_to_network
self._raise_for_status(res)
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/docker/api/client.py", line 263, in _raise_for_status
raise create_api_error_from_http_exception(e)
File "/home/linuxbrew/.linuxbrew/Cellar/aws-sam-cli/1.1.0/libexec/lib/python3.7/site-packages/docker/errors.py", line 31, in create_api_error_from_http_exception
raise cls(e, response=response, explanation=explanation)
docker.errors.APIError: 400 Client Error: Bad Request ("container cannot be disconnected from host network or connected to host network")
It seems I can not connect to cloud dynamodb (not a local mock dynamodb) from my local lambda.
How can I access data in dynamodb from local lambda with SAM ?