当前位置: 首页 > 知识库问答 >
问题:

docker AWS SAM local未连接到docker dynamodb

苏鸿羽
2023-03-14

因此,在生成AWS SAM模板“web后端”lambda后,我的函数不会连接到我的dynamodb docker实例。

这是我正在使用的JavaScript代码:

const docClient = new dynamoDb.DocumentClient({region: 'localhost', endpoint: 'http://127.0.0.1:8000/'});
const data = await docClient.scan(params).promise();

在我的终端上运行:

sam local start-api --docker-network lambda-local
docker run -d -p 8000:8000 --network=lambda-local amazon/dynamodb-local

命中生成的endpointhttp://127.0.0.1:3000/终端给出错误信息:

ERROR   Invoke Error    {"errorType":"NetworkingError","errorMessage":"connect ECONNREFUSED 127.0.0.1:8000","code":"NetworkingError","message":"connect ECONNREFUSED 127.0.0.1:8000","errno":"ECONNREFUSED","syscall":"connect","address":"127.0.0.1","port":8000,"region":"localhost","hostname":"localhost","retryable":true,"time":"2021-01-03T15:21:11.468Z","stack":["Error: connect ECONNREFUSED 127.0.0.1:8000","    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1144:16)"]}

如果我试着通过邮递员打发电机,我会得到:

{
    "__type": "com.amazonaws.dynamodb.v20120810#MissingAuthenticationToken",
    "message": "Request must contain either a valid (registered) AWS access key ID or X.509 certificate."
}

所以dynamodb服务器正在运行,因为我可以通过noSQL工作台连接到它,但是我的假设是sam本地api的docker容器看不到dynamodb的docker容器?

任何想法将不胜感激!谢谢。

共有3个答案

柯清野
2023-03-14

充分披露:我作为一名无服务器开发倡导者为AWS工作,并经常直接与SAM合作。这不是你问题的答案,但我强烈鼓励你远离这种模式。SAM local可以轻松地在云中命中DynamoDB,就像它命中DDB local一样。事实上,这更容易,因为您不必与Docker网络搏斗。我在这段视频中讲述了它。希望有帮助!https://youtu.be/NzPqMrdgD1s

全宪
2023-03-14

问题是您试图在endpoint:'http://127.0.0.1:8000/'上命中本地DynamodDb终结点的方式

在sam中,本地容器127.0.0.1指的是该容器,而不是dynamodb本地容器。

为了解决这个问题,您可以在启动dynamodb本地容器时给它一个名称,然后将endpoint更改为http://name_of_the_dynamodb_container:8000,它会工作的。

例如,在本地启动dynamodb,如下所示:

docker run -name ddb_local -d -p 8000:8000 --network=lambda-local amazon/dynamodb-local

然后在其他容器中配置连接,如下所示:

const docClient = new dynamoDb.DocumentClient({region: 'localhost', endpoint: 'http://ddb_local:8000/'});
const data = await docClient.scan(params).promise();

这不是唯一的方法,但它应该适合你。

我认为埃里克·约翰逊是对的,在进行本地开发时,除了运行密封单元测试之外,你几乎永远不会想使用Dynamodb本地,但是能够做到这一点还是很好的。

石超
2023-03-14

我几乎可以向你保证这是一个Docker网络问题。当你有两个这样的容器需要互相交谈时,几乎总是这样。我建议您使用Docker Compose,它可以为您设置所有这些功能,而且要简单得多。DynamoDB文档为您提供了一个模板。

对于访问ID错误,您需要在运行Postman的位置运行aws configure。ID等可以是任何东西,但必须有填充的内容。

 类似资料:
  • 更新:将非工作版本发布到https://github.com/justsomecoder/boot-rabbit-issue 我正在尝试实现一些基本的RabbitMQ发送和接收功能,但似乎无法让它在我的Spring Boot项目中运行。虽然我尝试了多个示例,但到目前为止,我在https://spring.io/guides/gs/messaging-rabbitmq/实现了该示例,唯一的例外是我在

  • 当我试图运行我的Azure功能时,我在application insight中不断得到一个错误,它在我的计算机上本地工作,但在Azure中不工作。下面是错误消息: System.InvalidOperationExceptionMicrosoft.Azure.WebJobs.Extensions.CosmosDB.CosmosDBTriggerAttributeBindingProvider.Re

  • 收到以下错误当我尝试连接到Salesforce时,我遗漏了什么重要的东西吗? //TID[-1234][EI][2019-03-19 20:40:40,174]错误{org.apache.axis2.description.clientutils}-系统无法从/services/createsfbuzz URL推断传输信息。 //tid[-1234][EI][2019-03-19 20:40:40

  • 我是CI新手,我尝试使用普通的HMTL文件作为模板。因此,我在“应用程序/视图”中创建了一个名为“教育”的文件夹。我头球得分。php,导航。php,内容。php和页脚。php文件。在我写的控制器里 然后我像“http://localhost:8080/mvc/index.php/education/”一样访问了链接 但是样式表没有附加,它与文件位于同一文件夹中。我还尝试将样式表链接的href改为“

  • 现在当我启动基于spring的应用程序时。我在调试器中看到,我的侦听器方法注册了,但是Spring不连接到ActiveMQ队列,我可以通过查看ActiveMQ web控制台轻松地看到这一点。此外,我没有看到任何来自spring的日志输出,而JMS的东西是这样做的。 我错过什么了吗?从这里走下去最好的路是什么?当然,我也测试了从ActiveMQ的web控制台中发送消息,但是如果没有客户端连接,就没有

  • Durpal 8的目录结构: 我的settings.php数据库配置 我的docker-compose.yml代码 使用上面的代码,我能够将phpmyadmin连接到mysql,并且工作正常,但是我无法将Drupal连接到mysql,并且出现以下错误: PDOException:79#0/var/www/html/core/lib/Drupal/Component/DependencyInject