gpt4 book ai didi

python-3.x - SAM Lambda : [ERROR] Runtime. ImportModuleError:无法导入模块 'index':没有名为 'pg8000' 的模块

转载 作者:行者123 更新时间:2023-12-04 01:37:25 26 4
gpt4 key购买 nike

我部署了一个使用 pg8000 的 lambda (python3.7)

import pg8000
..
def get_connection():
"""
Method to establish the connection.
"""
try:
print ("Connecting to database")
# Create a low-level client with the service name for rds
client = boto3.client("rds")
# Read the environment variables to get DB EndPoint
DBEndPoint = os.environ.get("DBEndPoint")
# Read the environment variables to get the Database name
DatabaseName = os.environ.get("DatabaseName")
# Read the environment variables to get the Database username which has access to database.
DBUserName = os.environ.get("DBUserName")
# Generates an auth token used to connect to a db with IAM credentials.
password = client.generate_db_auth_token(
DBHostname=DBEndPoint, Port=5432, DBUsername=DBUserName
)
# Establishes the connection with the server using the token generated as password
conn = pg8000.connect(
host=DBEndPoint,
user=DBUserName,
database=DatabaseName,
password=password,
ssl={"sslmode": "verify-full", "sslrootcert": "rds-ca-2015-root.pem"},
)
print("Succesful connection!")
return conn
except Exception as e:
print ("While connecting failed due to :{0}".format(str(e)))
return None
...

我有一个 requirements.txt,其中包含:
pg8000==1.13.2
boto3==1.9.67

我正在执行 sam build、sam package 和 sam deploy。 sam build 不处理 pg8000 等依赖项的下载吗?

确切的命令:
sam build
sam package --template-file ./template.yml --output-template-file output.yml --s3-bucket xxx-bucket
sam deploy --template-file ./output.yml --stack-name demo --capabilities CAPABILITY_IAM

触发 lambda 后出错:
[ERROR] Runtime.ImportModuleError: Unable to import module 'index': No module named 'pg8000'

最佳答案

根据文档

sam build looks for a manifest file (such as requirements.txt) that contains the dependencies, and automatically creates deployment artifacts.



似乎您的模块根本没有部署。

我将逐步解释如何修复它:
  • sam build创建了一个文件夹 .aws-sam/build其中包含您的 lambda 函数,包括依赖项和另一个非常重要的文件:您的 使用这个 template.ymlCodeUri (lambdas src 代码的路径)相对于 .aws-sam/build文件夹。
  • sam package命令应该传递您的 template.yml 的位置作为参数,意思是山姆构建 目标文件夹网址。运行 sam package --template-file .\.aws-sam\build\template.yml --output-template-file .\.aws-sam\build\output.yml --s3-bucket your_bucket
  • 最后运行sam deploy --template-file .\.aws-sam\build\output.yml --stack-name demo --capabilities CAPABILITY_IAM

  • 当您执行此命令时: sam package --template-file ./template.yml --output-template-file output.yml --s3-bucket xxx-bucket
    ,模板文件 ./template.yml指向没有位于 .\.aws-sam\build\your_lambda. 中的依赖项的 lambda 函数

    还有一件事:

    如果您使用多个模块,您应该考虑使用 Layers

    希望这可以帮助

    关于python-3.x - SAM Lambda : [ERROR] Runtime. ImportModuleError:无法导入模块 'index':没有名为 'pg8000' 的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59019965/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com