【问题标题】:How to connect RDS instance when running SAM locally?本地运行SAM时如何连接RDS实例?
【发布时间】:2019-07-14 20:50:36
【问题描述】:

我正在使用 SAM(无服务器应用程序模型)在本地测试连接到云中 Aurora RDS 实例的 Lambda 函数。

使用以下命令:

sam local invoke "lambda function name" --event event.json

Lambda 函数正在执行,但在返回 SQL 结果时,它返回 null 作为输出。

如何配置 Docker 容器以与 RDS 实例通信?

【问题讨论】:

    标签: amazon-rds aws-sam aws-sam-cli


    【解决方案1】:

    如 sam local invoke 的帮助中所述,您可以将 Docker 容器连接到现有的 Docker 网络:

    ▶ sam local invoke --help                
    ...
      --docker-network TEXT           Specifies the name or id of an existing
                                      docker network to lambda docker containers
                                      should connect to, along with the default
                                      bridge network. If not specified, the Lambda
                                      containers will only connect to the default
                                      bridge docker network.
    

    所以,列出你的 Docker 网络:

    ▶ docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    25a03c8453a6        bridge              bridge              local
    00de89cf09d0        host                host                local
    41597d91a389        none                null                local
    

    然后,将您的 Lambda 函数的 Docker 容器连接到主机网络:

    ▶ sam local invoke "lambda function name" --event event.json \
        --docker-network 00de89cf09d0
    

    注意,你也可以使用环境变量SAM_DOCKER_NETWORK

    ▶ SAM_DOCKER_NETWORK=00de89cf09d0 sam local invoke "lambda function name" \
        --event event.json
    

    正如提到的here

    假设主机网络可以访问 RDS 实例,这应该可以解决您的问题。

    【讨论】:

    • 不适合我:“docker.errors.APIError:400 客户端错误:错误请求(“容器无法与主机网络断开连接或连接到主机网络”)”。我在 Ubuntu 20 上使用 SAM CLI 版本 1.18.1
    【解决方案2】:

    --docker-network host 传递给sam local invoke

    sam 使用默认桥接网络在 docker 容器中运行您的 lambda/api。桥接网络的访问权限有限。您可以创建一个可以访问您的 RDS 的自定义 docker-network,也可以使用模仿您的操作系统网络的“主机”网络。

    当您安装 docker 时,它会创建一个名为 host 的网络,您可以将其分配给任何 docker 容器,并授予它对操作系统可访问的所有 IP/端口的完全访问权限。

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 2023-01-23
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 2019-03-23
      • 2022-01-13
      • 2018-06-27
      相关资源
      最近更新 更多