无法将AWS SAM本地API连接到Docker示例中运行的dynamodb-local

f4t66c6m  于 2023-01-25  发布在  Docker
关注(0)|答案(3)|浏览(132)

我正在尝试开发一个Lambda API来与DynamoDB交互,但是我的本地测试设置出现了问题。
我正在使用AWS SAM进行开发,但由于某种原因,我的本地API服务器(使用sam local start-api)无法连接到Docker内部运行的DynamoDB Local示例。我已经能够使用AWS CLI调用DynamoDB Local端点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

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

z9smfwbn

z9smfwbn1#

对于其他遇到同样问题的人,我在这里找到了我的解决方案: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
camsedfj

camsedfj2#

Dynamodb本地终结点应为http://ddb-local:8000
此外,您可能需要设置有效的区域名称,例如us-west-2

kognpnkq

kognpnkq3#

在"amazon/dynamodb-local:1.13.5"之后构建的图像有问题
只需更改此行:在Docker合成文件中按image: amazon/dynamodb-local:1.13.5排列。
现在您可以检查http://localhost:8000/shell/是否运行良好。

相关问题