概述
环境变量可以在不修改代码的情况下,将动态参数传递到函数,调整函数的执行行为。
应用场景
- 区分多环境:相同的函数逻辑,可根据部署环境的不同,配置不同的环境变量以区分。例如,通过环境变量给测试和开发环境配置不同的数据库。
- 配置加密:函数中访问其他服务的认证信息,例如账号和密码,ak/sk,可通过配置加密环境变量,在代码中动态获取,保证敏感数据的安全。
- 动态配置:函数逻辑中需要动态调整的配置,例如查询周期、超时时间,可提取为环境变量避免业务每次变化都需要修改代码。
操作步骤
设置FunctionGraph函数的加密配置和环境变量,无需对代码进行任何更改,可以将设置动态参数传递到函数代码和库。
添加环境变量
例如Node.js语言加密配置和环境变量的值(value)可以通过Context类中的getUserData(string key)获取。
注意
设置加密配置、环境变量时,用户自定义的键(key)/值(value),键(key)输入规范:可包含字母、数字、下划线_,以大/小写字母开头。
设置“键”和“值”的总长度不超过4096个字符。
设置环境变量时,FunctionGraph会明文展示所有输入信息,请不要输入敏感信息(如帐户密码等),以防止信息泄露。
打开加密开关之后,界面上会对键值进行加密,参数传输过程中键值也处于加密状态。
预设值
环境变量存在如下预设值,您无法配置和预设值同名的环境变量。
预设值及说明
环境变量名 | 含义 | 获取方式和默认值 |
---|---|---|
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 |
示例
使用环境变量设置以下信息:安装文件的目录、存储输出的位置、存储连接和日志记录设置等。这些设置与应用程序逻辑解耦,在需要变更设置时,无需更新函数代码。
在如下函数代码片段中,参数“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'
通过设置环境变量obs_output_bucket,可以灵活设置存储输出图片的OBS桶。
环境变量