更新时间:2025-06-25 GMT+08:00
分享

配置函数的环境变量

本章节介绍如何通过函数工作流控制台,为函数配置环境变量,便于调整函数的执行行为。

操作场景

为函数配置环境变量,可以在不修改代码的情况下,将动态参数传递到函数,调整函数的执行行为。

环境变量在函数中适用于以下场景:

  • 区分多环境:相同的函数逻辑,可根据部署环境的不同,配置不同的环境变量以区分。例如,通过环境变量给测试和开发环境配置不同的数据库。
  • 加密配置:函数中访问其他服务的认证信息,如账号和密码,可通过配置加密环境变量在代码中动态获取,确保敏感数据的安全。
  • 动态配置:函数逻辑中需要动态调整的配置,如查询周期、超时时间,可提取为环境变量,以避免业务每次变化都需要修改代码。

约束与限制

设置环境变量时,FunctionGraph会明文展示所有输入信息,请不要输入敏感信息(如账户密码等),以防止信息泄露。

配置环境变量

  1. 登录函数工作流控制台函数工作流控制台,在左侧的导航栏选择“函数 > 函数列表”。
  2. 单击函数的名称,进入函数详情页。
  3. 在“设置”页签下选择“环境变量”,单击“编辑环境变量”。
    图1 添加环境变量
  4. “编辑环境变量”弹窗中单击“添加环境变量”,配置环境变量信息。
  5. (可选,仅“拉美-圣保罗一”区域支持配置)选择为环境变量是否使用“静态加密配置”
    如选择使用KMS静态加密,请先将“委托权限策略”添加至该函数的委托中。支持选择以下两种KMS静态加密:
    • (默认)functiongraph/default:函数会在DEW服务中自动创建默认密钥,您无需手动创建。
    • 使用用户主密钥:选择已创建的用户主密钥加密函数代码。创建用户主密钥可参考创建自定义密钥
  6. 配置完成后,单击“确定”保存环境变量。

    环境变量配置完成后,即可在函数中使用环境变量,具体应用示例可参见环境变量应用示例

环境变量预置值

FunctionGraph预置的环境变量如表2所示。

表2 环境变量预置值说明

环境变量名

含义

获取方式

RUNTIME_PROJECT_ID

函数的项目ID。

Context类提供接口或通过系统环境变量获取。

RUNTIME_FUNC_NAME

函数名称。

Context类提供接口或通过系统环境变量获取。

RUNTIME_FUNC_VERSION

函数版本。

Context类提供接口或通过系统环境变量获取。

RUNTIME_HANDLER

函数执行入口。

通过系统环境变量获取。

RUNTIME_TIMEOUT

函数执行的超时时间。

通过系统环境变量获取。

RUNTIME_USERDATA

用户通过环境变量传入的值。

Context类提供接口或通过系统环境变量获取。

RUNTIME_CPU

函数占用的CPU资源,取值与MemorySize成比例。

Context类提供接口或通过系统环境变量获取。

RUNTIME_MEMORY

函数配置的内存大小,单位MB。

Context类提供接口或通过系统环境变量获取。

RUNTIME_MAX_RESP_BODY_SIZE

最大返回值限制,系统默认值为6,291,456 Byte。

通过系统环境变量获取。

RUNTIME_INITIALIZER_HANDLER

函数初始化入口。

通过系统环境变量获取。

RUNTIME_INITIALIZER_TIMEOUT

函数初始化超时时间。

通过系统环境变量获取。

RUNTIME_ROOT

Runtime包的路径,系统默认路径为/home/snuser/runtime。

通过系统环境变量获取。

RUNTIME_CODE_ROOT

代码在容器中的存放目录,系统默认路径为/opt/function/code

通过系统环境变量获取。

RUNTIME_LOG_DIR

系统日志在容器中存放的目录,系统默认路径为/home/snuser/log。

通过系统环境变量获取。

环境变量应用示例

使用环境变量设置以下信息:安装文件的目录、存储输出的位置、存储连接和日志记录设置等。这些设置与应用程序逻辑解耦,在需要变更设置时,无需更新函数代码。

  1. 设置环境变量obs_output_bucket,用于灵活设置存储输出图片的OBS桶。
    图4 环境变量
  2. 在函数代码中使用环境变量。

    在如下函数代码片段中,参数“obs_output_bucket”为图片处理后存储地址。

    • 非HTTP函数使用context.getUserData('xxx')方式获取环境变量。
    • HTTP函数使用系统方法获取环境变量,例如Python函数使用os.Environ['xx'];Node.js函数使用process.env.xx,Node.js获取加密环境变量使用process.env.RUNTIME_USERDATA。
    • Python语言示例
      def handler(event, context):
          srcBucket, srcObjName = getObsObjInfo4OBSTrigger(event)
          obs_address = context.getUserData('obs_address')
          outputBucket = context.getUserData('obs_output_bucket')
          if obs_address is None:
              obs_address = '{obs_address_ip}'
          if outputBucket is None:
              outputBucket = 'casebucket-out'
                  
          ak = context.getSecurityAccessKey()
          sk = context.getSecuritySecretKey()
          st = context.getSecurityToken()
      
          # download file uploaded by user from obs 
          # TODO: Replace with actual implementation
          GetObject(obs_address, srcBucket, srcObjName, ak, sk, st)
      
          outFile = watermark_image(srcObjName)
          
          # 将转换后的文件上传到新的obs桶中
          # TODO: Replace with actual implementation
          PostObject(obs_address, outputBucket, outFile, ak, sk, st)
      
          return 'OK'
      
    • NodeJS语言示例
      exports.handler = async (event, context) => {
          let bucket = context.getUserData('obs_output_bucket');
          console.log(bucket);
          const output =
          {
              'statusCode': 200,
              'headers':
              {
                  'Content-Type': 'application/json'
              },
              'isBase64Encoded': false,
              'body': JSON.stringify(event),
          }
          return output;
      }

相关文档

相关文档