You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python全局作用域(Lambda函数外)访问AWS Lambda环境变量

在Lambda全局作用域访问CDK配置的环境变量

解决方案代码(app.py)

import os
import json
import boto3
from sqlalchemy import create_engine, func, select, and_, text

# 初始化Secrets Manager客户端
secrets_manager = boto3.client('secretsmanager')

# 获取CDK配置的环境变量(Secrets Manager ARN)
rds_secret_arn = os.environ.get("rds")

# 从Secrets Manager拉取数据库凭证
secret_response = secrets_manager.get_secret_value(SecretId=rds_secret_arn)
db_config = json.loads(secret_response['SecretString'])

# 拼接SQLAlchemy连接字符串(以PostgreSQL为例,可根据数据库类型调整)
db_conn_str = f"postgresql://{db_config['username']}:{db_config['password']}@{db_config['host']}:5432/{db_config['dbname']}"

# 在全局作用域创建SQLAlchemy Engine
engine = create_engine(db_conn_str)


def get_games(event, context):
    # Lambda业务逻辑示例
    with engine.connect() as conn:
        query_result = conn.execute(select(func.count()).select_from(text('games')))
        return {"games_count": query_result.scalar()}

关键配置说明

  1. 访问环境变量
    直接通过os.environ.get("rds")获取CDK中配置的环境变量,键名需与CDK代码里environment字典的键完全一致。

  2. Secrets Manager权限配置
    Lambda默认没有访问Secrets Manager的权限,需在CDK栈代码中为Lambda角色添加权限:

    from aws_cdk import aws_iam as iam
    
    # 给Lambda添加Secrets Manager读取权限
    get_games_lambda.add_to_role_policy(iam.PolicyStatement(
        actions=["secretsmanager:GetSecretValue"],
        resources=["arn:aws:secretsmanager:..."]  # 替换为你的Secret ARN,若用CDK创建Secret可直接引用secret.secret_arn
    ))
    
  3. 全局作用域的优势与注意事项

    • 全局代码会在Lambda容器初始化时执行一次,后续请求复用容器,Engine的连接池也会被复用,提升性能。
    • 若Secrets Manager中的凭证更新,需等待Lambda容器回收重启后,才会加载新的凭证;若需实时刷新,可将凭证获取逻辑移至函数内部。

内容的提问来源于stack exchange,提问作者Rony Tesler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:42:54