通过 SQLalchemy URI 调用 RDS 时 Lambda 函数卡住
Lambda function gets stuck when calling RDS via SQLalchemy URI
我有一个快速的 API 应用程序。最初,我在 SAM 模板中像这样通过 ngrok 隧道传递我的 DB URI。在此设置中,Lambda 将使用我本地计算机的 PSQL 数据库。
DbConnnectionString:
Type: String
Default: postgresql://<uname>:<pwd>@x.tcp.ngrok.io:PORT/DB
这就是我在 Python 代码中读取 URI 的方式
# config.py
DATABASE_URL = os.environ.get('DB_URI')
db_engine = create_engine(DATABASE_URL)
db_session = sessionmaker(autocommit=False, autoflush=False,bind=db_engine)
print(f"Configs initialized for {API_V1_STR}")
# app.py
# 3rd party
from fastapi import FastAPI
# Custom
from config.app_config import PROJECT_NAME, db_engine
from models.db_models import Base
print("Creating all database")
Base.metadata.create_all(bind=db_engine)
app = FastAPI(title=PROJECT_NAME)
print("APP created")
在此设置中,一切似乎都按预期工作。
但是每当我用 RDS 数据库替换数据库 URL 时,调用突然卡在 create all database
步骤,如下图所示。发生这种情况时,lambda 总是超时并抛出异常。
如果我 运行 在本地使用 uvicorn 的代码,则不会发生此错误。
一切都按预期工作。
当我使用 sam local invoke
时,即使使用 RDS URL,API 调用也没有任何问题。
此问题仅在部署在 AWS Lambda 中时出现。
我注意到配置在此设置中初始化了两次,一次在 START 请求 ID 之前,一次之后。
我已经尝试阅读它,但不清楚我能做些什么来解决这个问题。任何帮助将不胜感激。
是我的错!我没有注意安全组。一直都是连接超时。在我修复安全组中的端口访问后,lambda 开始按预期工作。
我有一个快速的 API 应用程序。最初,我在 SAM 模板中像这样通过 ngrok 隧道传递我的 DB URI。在此设置中,Lambda 将使用我本地计算机的 PSQL 数据库。
DbConnnectionString:
Type: String
Default: postgresql://<uname>:<pwd>@x.tcp.ngrok.io:PORT/DB
这就是我在 Python 代码中读取 URI 的方式
# config.py
DATABASE_URL = os.environ.get('DB_URI')
db_engine = create_engine(DATABASE_URL)
db_session = sessionmaker(autocommit=False, autoflush=False,bind=db_engine)
print(f"Configs initialized for {API_V1_STR}")
# app.py
# 3rd party
from fastapi import FastAPI
# Custom
from config.app_config import PROJECT_NAME, db_engine
from models.db_models import Base
print("Creating all database")
Base.metadata.create_all(bind=db_engine)
app = FastAPI(title=PROJECT_NAME)
print("APP created")
在此设置中,一切似乎都按预期工作。
但是每当我用 RDS 数据库替换数据库 URL 时,调用突然卡在 create all database
步骤,如下图所示。发生这种情况时,lambda 总是超时并抛出异常。
如果我 运行 在本地使用 uvicorn 的代码,则不会发生此错误。 一切都按预期工作。
当我使用
sam local invoke
时,即使使用 RDS URL,API 调用也没有任何问题。此问题仅在部署在 AWS Lambda 中时出现。
我注意到配置在此设置中初始化了两次,一次在 START 请求 ID 之前,一次之后。
我已经尝试阅读它,但不清楚我能做些什么来解决这个问题。任何帮助将不胜感激。
是我的错!我没有注意安全组。一直都是连接超时。在我修复安全组中的端口访问后,lambda 开始按预期工作。