从 AWS Lambda 连接到 Redshift

kab*_*kab 4 python amazon-s3 amazon-redshift aws-lambda

Redshift我正在尝试从我的函数连接到我的数据库AWS Lambda

con = psycopg2.connect(
    dbname="my_dbname",
    host="my_url",
    port= 5439,
    user="username",
    password="my_password")

cur = con.cursor()
Run Code Online (Sandbox Code Playgroud)

但我无法访问我的数据库,我的函数引发以下错误:

OperationalError: could not connect to server: Connection timed out
    Is the server running on host "my_url" (54.217.83.88) and accepting
    TCP/IP connections on port 5439?
Run Code Online (Sandbox Code Playgroud)

我可以得到一些帮助吗?(如果可能的话,我希望得到一个非常详细的答案,因为我是 AWS 新手)

PS:我知道我必须配置VPC,但我不知道具体该怎么做

提前谢谢你

Joh*_*ein 6

您的目标是让 AWS Lambda 函数通过私有 IP 地址与同一 VPC 内的 Amazon Redshift 集群进行通信。这会将流量保留在 VPC 内。

  • AWS Lambda函数需要配置为连接到与 Amazon Redshift 集群位于同一 VPC 中的私有子网。

请参阅:配置 Lambda 函数以访问 Amazon VPC 中的资源

  • 连接到集群的私有 IP 地址,或者(最好)按照管理 Amazon Virtual Private Cloud (VPC) 中的集群中的说明在 VPC 上启用DNS HostnamesDNS Resolution,以便主机名自动解析为私有 IP 地址。

  • 与 Amazon Redshift 集群关联的安全需要允许来自 VPC 的 CIDR 范围(或适当情况)的端口 5439 上的入站流量。

请参阅:Amazon Redshift 集群安全组