2

我已经在 docker 容器中安装了 dynamodb,并且可以从命令行写入和读取记录。但是,当我尝试使用 Python3 连接到数据库时出现错误。

无法连接到端点 URL:“ http://localhost:8000/ ”:EndpointConnectionError

这是我的代码片段

import os
import uuid
import json
import boto3
import traceback
from botocore.exceptions import ClientError

print('Loading function')

region_name = os.environ["REGION_NAME"]
dynamo = boto3.client("dynamodb")
table_name = os.environ["TABLE_NAME"]
musicAlbum_table = boto3.resource("dynamodb", endpoint_url="http://localhost:8000/").Table(table_name)

def respond(err, res=None):
    return {
        'statusCode': '400' if err else '200',
        'body': err.message if err else json.dumps(res),
        'headers': {
            'Content-Type': 'application/json',
        },
    }


def lambda_handler(event, context):

    print("table_name="+ table_name)
    musicAlbum_table.put_item(
                Item={
                    'Artist': 'Joe Satriani',
                    'SongTitle': 'Circles',
                    'AlbumTitle': 'Surfing with an Alien'
                  }
            )
    scan_result = dynamo.scan(TableName=table_name)
    return respond(None, res=scan_result)
4

1 回答 1

1

在具有最新版本 Docker 的 Mac 和 Windows 上,在 boto 资源创建中使用主机名“host.docker.internal”和 http 协议(非安全)。然后,在容器中运行的本地 lambda 将具有对主机上运行的本地 dynamodb 的网络访问权限。

musicAlbum_table =
   boto3.resource("dynamodb",
               endpoint_url="http://host.docker.internal:8000/")
               .Table(table_name)

在 Linux 上它不太容易,可能等到v20.04并等待 cli 命令'--add-host host.docker.internal:host-gateway'。我只是在Linux上举手。

于 2020-04-01T04:28:44.640 回答