如何通过CloudFormation为Lambda函数传递可通过os.environ['key']访问的变量
解决Lambda通过
os.environ访问CloudFormation传递变量的问题 我来帮你搞定这个问题!要让Lambda函数能通过os.environ['key']读取到CloudFormation里的变量,只需要在Lambda资源定义中添加Environment配置块,把需要传递的变量放在Variables字典里就行。结合你给出的模板参数,我给你写个完整的示例:
AWSTemplateFormatVersion: '2010-09-09' Description: '将对象从生产环境存储桶复制到开发环境数据存储桶' Parameters: CustomerName: Description: 客户名称 Type: String Default: incoming ProjectName: Description: 项目名称 Type: String Default: TEST ENV: Description: 环境(dev, prd) Type: String Default: dev srcBucket: Description: 源存储桶名称 Type: String Resources: # 定义你的Lambda函数 CopyBucketObjectLambda: Type: AWS::Lambda::Function Properties: Handler: index.lambda_handler Runtime: python3.12 # 根据你的实际Python版本调整 Role: !GetAtt LambdaExecutionRole.Arn # 关联Lambda执行角色 # 核心配置:传递环境变量 Environment: Variables: # 这里的键就是你在Lambda中用os.environ访问的key CUSTOMER_NAME: !Ref CustomerName PROJECT_NAME: !Ref ProjectName ENVIRONMENT: !Ref ENV SRC_BUCKET: !Ref srcBucket # Lambda代码包配置(根据你的实际存储位置调整) Code: S3Bucket: your-lambda-code-bucket S3Key: copy-bucket-object.zip Timeout: 30 # 配套的Lambda执行角色(如果还没定义的话) LambdaExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: # 基础执行权限(日志输出等) - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole # S3复制所需的权限(建议根据实际需求缩小范围) - arn:aws:iam::aws:policy/AmazonS3FullAccess
怎么在Lambda里访问这些变量?
在你的Python代码里,直接通过os.environ读取对应键名即可:
import os def lambda_handler(event, context): # 读取CloudFormation传递的变量 customer_name = os.environ['CUSTOMER_NAME'] project_name = os.environ['PROJECT_NAME'] env = os.environ['ENVIRONMENT'] src_bucket = os.environ['SRC_BUCKET'] # 后续业务逻辑... print(f"正在从{src_bucket}复制对象,所属客户:{customer_name},环境:{env}") return {"status": "success"}
几个注意点
- 环境变量键名建议用大写字母加下划线,符合Python环境变量的命名习惯
- 如果要传递敏感信息(比如API密钥),可以通过
KmsKeyArn属性指定KMS密钥加密环境变量 - 确保Lambda执行角色拥有足够权限访问相关资源(比如示例中的S3权限)
内容的提问来源于stack exchange,提问作者radhika
相关产品推荐
相关产品推荐

