【问题标题】:Unable to connect AWS SAM local API to dynamodb-local running in docker instance无法将 AWS SAM 本地 API 连接到在 docker 实例中运行的 dynamodb-local
【发布时间】:2023-01-23 11:08:27
【问题描述】:

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

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

这是我得到的错误:

"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

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

【问题讨论】:

    标签: amazon-web-services docker amazon-dynamodb local


    【解决方案1】:

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

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

    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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我试过这种配置但没有成功。它仍然说端口是“未定义的”,这可能是问题的根源。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-29
        • 2020-07-10
        • 2019-11-18
        • 1970-01-01
        • 2019-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多