【问题标题】:Lambda function gets stuck when calling RDS via SQLalchemy URI通过 SQLalchemy URI 调用 RDS 时 Lambda 函数卡住
【发布时间】:2021-04-13 04:56:55
【问题描述】:

我有一个快速的 API 应用程序。最初,我在我的 SAM 模板中通过 ngrok 隧道传递我的 DB URI。在此设置中,Lambda 将使用我本地机器的 PSQL DB。

  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 DB 替换 DB URL 时,突然调用就会卡在create all database 步骤,如下图所示。当这种情况发生时,lambda 总是超时并抛出异常。

  • 如果我使用 uvicorn 在本地运行代码,则不会发生此错误。 一切正常。

  • 当我使用 sam local invoke 时,即使是 RDS URL,API 调用也没有任何问题。

    只有在 AWS Lambda 中部署时才会出现此问题。

我注意到在此设置中配置被初始化了两次,一次在 START 请求 ID 之前和一次之后。

我已经尝试阅读它,但不清楚我能做些什么来解决这个问题。任何帮助将不胜感激。

【问题讨论】:

  • 曾经考虑过Alembic?
  • 可能是您的 URL 格式。你试过f'postgresql+psycopg2://{user}:{pw}@{url}/{db}'
  • @RakeshAdhikesavan:尝试过,但存在同样的错误。我在想一些奇怪的原因 create_all 被调用了两次,第一次调用以某种方式阻止了第二次调用。

标签: python-3.x aws-lambda sqlalchemy amazon-rds fastapi


【解决方案1】:

这是我的错!我没有注意安全组。一直都是连接超时。修复安全组中的端口访问后,lambda 开始按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多