我有個問題。我創建了一個 SAM 專案,我想在所有連續的 lambda 函式之間使用全域變數。例如,我想連接到資料庫并在步驟函式的所有 lambda 中使用連接,而無需重新連接。如你看到的 :
連接到資料庫的 Lambda 函式:
# import requests
'''
Get authetication token from RDS
'''
rds_client = boto3.client('rds')
auth_token = rds_client.generate_db_auth_token( os.environ['DB_HOST_PROD'], 3306, os.environ['DB_USER_PROD'])
logging.debug("response from generate_db_auth_token")
logging.debug(auth_token)
'''
This method will return an authentication token in the
form of a signed url. The we will use this token to create the bd connection
'''
# construct SSL
ssl = {'ca': '/opt/python/rds-combined-ca-bundle.pem'}
# Creating connection
db_connection_dw = pymysql.connect(
host=os.environ['DB_HOST_PROD'],
port=3306,
user=os.environ['DB_USER_PROD'],
passwd=auth_token,
db=os.environ['DB_NAME_PROD'],
charset='utf8',
ssl=ssl,
connect_timeout=5)
logging.debug("SUCCESS: Connection to MySQL database succeeded")
SAM 專案的模板 yaml:
Parameters:
LambdaSg:
Description: "Lambda security group ID"
Type: "CommaDelimitedList"
# Type: List<AWS::EC2::SecurityGroup::Id>
LambdaSubnets:
Description: "Lambda subnets"
Type: List<AWS::EC2::Subnet::Id>
DBResourceId:
Type: String
Description: "RDS-DB instance resource identifier"
DBEndpoint:
Type: String
Description: "Amazon RDS MySQL endpoint"
DBName:
Type: String
Description: "Name of the database connected"
DBUsername:
Type: String
NoEcho: true
編輯:Lambda 函式是無狀態和隔離的環境。所以連接不能在另一個 lambda 函式中重用。因此,打開許多資料庫連接不是問題。
uj5u.com熱心網友回復:
不可能在 lambda 之間共享連接。Lambda 函式是無狀態和隔離的環境。在處理程式函式之外為每個 lambda 啟動一個連接。此連接將在后續 lambda 呼叫中(只要 lambda 容器處于活動狀態)重用(僅在同一個 lambda 中)。
因此最好避免關閉連接,以便它可以在同一個 lambda 容器中重復使用。除非您有太多的 lambdas 并達到資料庫連接限制,否則這應該不是問題。這是某種“連接池”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/350307.html
上一篇:如何在aws中使用函式迭代器
