配置函数的环境变量-j9九游会登录
本章节介绍如何通过函数工作流控制台,为函数配置环境变量,便于调整函数的执行行为。
操作场景
为函数配置环境变量,可以在不修改代码的情况下,将动态参数传递到函数,调整函数的执行行为。
环境变量在函数中适用于以下场景:
- 区分多环境:相同的函数逻辑,可根据部署环境的不同,配置不同的环境变量以区分。例如,通过环境变量给测试和开发环境配置不同的数据库。
- 加密配置:函数中访问其他服务的认证信息,如账号和密码,可通过配置加密环境变量在代码中动态获取,确保敏感数据的安全。
- 动态配置:函数逻辑中需要动态调整的配置,如查询周期、超时时间,可提取为环境变量,以避免业务每次变化都需要修改代码。
约束与限制
设置环境变量时,functiongraph会明文展示所有输入信息,请不要输入敏感信息(如账户密码等),以防止信息泄露。
配置环境变量
- 登录,在左侧的导航栏选择“函数 > 函数列表”。
- 单击函数的名称,进入函数详情页。
- 在“设置”页签下选择“环境变量”,单击“编辑环境变量”。
图1 添加环境变量
- 在“编辑环境变量”弹窗中单击“添加环境变量”,配置环境变量信息。
- (可选,仅“拉美-圣保罗一”区域支持配置)选择为环境变量是否使用“静态加密配置”。
如选择使用kms静态加密,请先将“委托权限策略”添加至该函数的委托中。支持选择以下两种kms静态加密:
- (默认)functiongraph/default:函数会在dew服务中自动创建默认密钥,您无需手动创建。
- 使用用户主密钥:选择已创建的用户主密钥加密函数代码。创建用户主密钥可参考创建自定义密钥。
若选择“使用用户主密钥”,在后续使用中请勿在dew服务中删除用于函数加密的主密钥,否则将因加密数据无法解密而导致函数执行失败。
- 配置完成后,单击“确定”保存环境变量。
环境变量配置完成后,即可在函数中使用环境变量,具体应用示例可参见环境变量应用示例。
环境变量预置值
functiongraph预置的环境变量如表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。 |
通过系统环境变量获取。 |
环境变量应用示例
使用环境变量设置以下信息:安装文件的目录、存储输出的位置、存储连接和日志记录设置等。这些设置与应用程序逻辑解耦,在需要变更设置时,无需更新函数代码。
- 设置环境变量obs_output_bucket,用于灵活设置存储输出图片的obs桶。
图4 环境变量
- 在函数代码中使用环境变量。
在如下函数代码片段中,参数“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; }
相关文档
- 除使用控制台外,函数工作流支持通过api的方式管理函数的生命周期,详情请参见。
- 函数环境变量相关常见问题详情请参见配置函数常见问题。
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

