问题描述
我已经用SAM构建了一个简单的lambda
处理程序:
def lambda_handler(event,context):
print("start here")
client = boto3.client("dynamodb",region_name="us-east-1")
模板:
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 * ? *)
并尝试使用sam在本地运行(使用此解决方案How to connect RDS instance when running SAM locally?)
sam build --use-container
sam local invoke --no-event --docker-network host MyLambdaFunction
但出现以下错误
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 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/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,**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,**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")
看来我无法从我的本地Lambda连接到Cloud dynamodb(不是本地模拟dynamodb)。
如何使用SAM从本地Lambda访问dynamodb中的数据?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)