更新时间:2024-12-16 GMT+08:00
分享

配置函数的环境变量

概述

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

应用场景

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

操作步骤

设置FunctionGraph函数的加密配置和环境变量,无需对代码进行任何更改,可以将设置动态参数传递到函数代码和库。

图1 添加环境变量

例如Node.js语言加密配置和环境变量的值(value)可以通过Context类中的getUserData(string key)获取,详细请参见Node.js函数开发指南

  • 设置加密配置、环境变量时,用户自定义的键(key)/值(value),键(key)输入规范:可包含字母、数字、下划线_,以大/小写字母开头。
  • 设置“键”和“值”的总长度不超过4096个字符。(当前支持局点:利雅得、汽车一、约翰内斯堡、伊斯坦布尔、乌兰察布一、圣保罗一、香港、新加坡、上海二、圣地亚哥、雅加达、贵阳二零一)
  • 设置环境变量时,FunctionGraph会明文展示所有输入信息,请不要输入敏感信息(如账户密码等),以防止信息泄露。
  • 打开加密开关之后,界面上会对键值进行加密,参数传输过程中键值也处于加密状态。

预设值

环境变量存在如下预设值,您无法配置和预设值同名的环境变量。

表1 预设值及说明

环境变量名

含义

获取方式和默认值

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

函数配置的内存大小

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

单位MB

RUNTIME_MAX_RESP_BODY_SIZE

最大返回值限制

通过系统环境变量获取

系统默认为6291456 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

示例

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

python语言示例

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

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.getAccessKey()
    sk = context.getSecretKey()

    # download file uploaded by user from obs
    GetObject(obs_address, srcBucket, srcObjName, ak, sk)

    outFile = watermark_image(srcObjName)
    
    # 将转换后的文件上传到新的obs桶中
    PostObject (obs_address, outputBucket, outFile, ak, sk)

    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;
}
  • 非HTTP函数使用context.getUserData('xxx')方式获取环境变量。
  • HTTP函数使用系统方法获取环境变量,比如python函数使用os.Environ['xx']、nodejs函数使用process.env.xx。

通过设置环境变量obs_output_bucket,可以灵活设置存储输出图片的OBS桶。

图2 环境变量

相关文档