首页 文章

无法从AWS Lambda连接到默认VPC中的AWS RDS实例

提问于
浏览
0

I have a RDS mysql instance running

  • 在默认VPC中为所有默认子网分配

  • 有一个安全组,入站规则设置为侦听所有流量,所有协议,所有端口范围和源0.0.0.0/0

  • Publicly accessible设置为True

我能够从SQl Workbench连接到RDS,也可以从本地python脚本连接到RDS

-In my python lambda function -

  • 已使用AWSLambdaVPCAccessExecutionRole,lambda_basic_execution分配角色

2.Lambda未分配给任何VPC

我从lambda "errorMessage": "RequestId: xx Process exited before completing request" 得到以下错误消息

代码在尝试连接到DB get_database_connection()和除了块记录消息 logger.error("ERROR: Unexpected error: Could not connect to MySql instance.") 之外的位置失败

lambda甚至可以连接到默认VPC中的RDS实例吗? lambda未分配给任何VPC

Lambda Code

import sys
import logging
import package.pymysql
import logging
import package.pymysql.cursors

DATABASE_HOST = 'XXX'
DATABASE_USER = 'XXX'
DATABASE_PASSWORD = 'XXX'
DATABASE_DB_NAME = 'XXX'
port = 3306

def get_database_connection():
    "Build a database connection"
    conn = pymysql.connect(DATABASE_HOST, user=DATABASE_USER,
                           passwd=DATABASE_PASSWORD, db=DATABASE_DB_NAME, connect_timeout=5)
    return conn

try:
    conn = get_database_connection() 
except:
    logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
    sys.exit()
logger.info("SUCCESS: Connection to RDS mysql instance succeeded")    

def lambda_handler(event, context):
    print("Lambda executed")

点击此链接[https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds-deployment-pkg.html][1]

3 回答

  • 0

    你需要做的是:

    为默认VPC创建2个私有子网

    xxx.xxx.64.0/20
    xxx.xxx.128.0/20
    

    转到控制台中的Lambda函数 .

    向下滚动并在左侧选择默认VPC .

    Select the 2 Private Subnets as your subnets on your lambda function.
    
  • 0

    是的,您的lambda不在vpc中,因此实例无法联系rds公共实例,请按照此文档为您的lambda函数提供Internet“功能”

    https://aws.amazon.com/it/premiumsupport/knowledge-center/internet-access-lambda-function/

  • 0
    • 有许多文档说VPC中有2个私有子网用于lambda,并且使用NAT网关等连接互联网 .

    • 实际上我可以直接从lambda连接到默认VPC中的RDS(不将其放在私有子网中) . 问题是我在pacakage文件夹中导入了pymysql文件,所以我得到了
      该连接超时错误 .

    • 我只需要从pymysql(package.mysql)中输入package in
      except Exception as error: 确实骗了我

相关问题