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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:14:13