从本地Lambda连接到“真实” AWS Dynmodb

问题描述

我已经用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 (将#修改为@)