繁体   English   中英

无法将 AWS SAM 本地 API 连接到在 docker 实例中运行的 dynamodb-local

[英]Unable to connect AWS SAM local API to dynamodb-local running in docker instance

我正在尝试开发一个 Lambda API 来与 DynamoDB 交互,但我的本地测试设置有问题。

我正在使用 AWS SAM 进行开发,但出于某种原因,我的本地 API 服务器(使用sam local start-api )无法连接到在 Docker 中运行的 DynamoDB Local 实例。我已经能够调用 DynamoDB Local 端点 http ://localhost:8000,使用 AWS CLI,但据我所知,由于 .network 网桥,我需要为端点使用容器名称。

这是我得到的错误:

"errorMessage":"Inaccessible host: `ddb-local' at port `undefined'. This service may not be available in the `localhost' region.

这是我正在使用的配置:

  docClient = new dynamodb.DocumentClient({
    accessKeyId: "0600k",
    secretAccessKey: "k3hwkb",
    region: "localhost",
    endpoint: "http://ddb-local/:8000",
  });

这是 docker-compose.yml:

version: '3.8'
services:
  dynamodb-local:
    command: "-jar DynamoDBLocal.jar -sharedDb -optimizeDbBeforeStartup -dbPath ./data"
    image: "amazon/dynamodb-local:latest"
    container_name: ddb-local
    ports:
      - "8000:8000"
    volumes:
      - "./docker/dynamodb:/home/dynamodblocal/data"
    working_dir: /home/dynamodblocal

如何成功连接这两个服务?

Dynamodb 本地端点应该是http://ddb-local:8000

此外,您可能需要设置一个有效的区域名称,例如us-west-2

对于遇到同样问题的其他人,我在这里找到了我的解决方案: connecting AWS SAM Local with dynamodb in docker

本质上,您需要将 SAM 本地 API 的 Docker 网络设置为与您的 DynamoDB 本地 docker 实例相同,然后将端点设置为您的 DynamoDB 本地容器名称。 以下是对我有用的设置:

DynamoDB 文档客户端:

  docClient = new dynamodb.DocumentClient({
    accessKeyId: "0600k",
    secretAccessKey: "k3hwkb",
    region: "eu-west-2",
    endpoint: "http://ddb-local:8000",
  });

DynamoDB Docker 编写文件

version: '3.8'
services:
  dynamodb-local:
    command: "-jar DynamoDBLocal.jar -sharedDb -optimizeDbBeforeStartup -dbPath ./data"
    image: "amazon/dynamodb-local:latest"
    container_name: ddb-local
    ports:
      - "8000:8000"
    volumes:
      - "./docker/dynamodb:/home/dynamodblocal/data"
    working_dir: /home/dynamodblocal
    networks:
      dynamodb-local-network: {}

networks:
  dynamodb-local-network:
    name: dynamodb-local-network

将以下标志添加到您的 start-api 命令:

--docker-network dynamodb-local-network

在“amazon/dynamodb-local:1.13.5”之后构建的图像存在问题

只需更改此行: image: "amazon/dynamodb-local:latest" by image: amazon/dynamodb-local:1.13.5在您的 Docker Compose 文件中。

现在您可以检查 http://localhost:8000/shell/ 是否运行良好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM