配置环境变量
设置FunctionGraph函数的加密配置和环境变量,无需对代码进行任何更改,可以将设置动态参数传递到函数代码和库,如图1所示。
例如Node.js语言加密配置和环境变量的值(value)可以通过Context类中的getUserData(string key)获取,详细请参见Node.js函数开发指南。其他语言的环境变量的值(value)获取方法请参见如何开发函数。

- 设置加密配置、环境变量时,用户自定义的键(key)/值(value),键(key)输入规范:可包含字母、数字、下划线_,以大/小写字母开头。
- 设置“键”和“值”的总长度不超过2048个字符。
预设值
环境变量存在如下预设值,您无法配置和预设值同名的环境变量。
RUNTIME_PROJECT_ID
RUNTIME_FUNC_NAME
RUNTIME_FUNC_VERSION
RUNTIME_PACKAGE
RUNTIME_HANDLER
RUNTIME_TIMEOUT
RUNTIME_USERDATA
RUNTIME_CPU
RUNTIME_MEMORY
RUNTIME_MAX_RESP_BODY_SIZE
RUNTIME_INITIALIZER_HANDLER
RUNTIME_INITIALIZER_TIMEOUT
RUNTIME_ROOT
RUNTIME_CODE_ROOT
RUNTIME_LOG_DIR
RUNTIME_SHARE_DIR
RUNTIME_TMP_DIR
RUNTIME_SOCKET_ADDRESS
RUNTIME_USE_REPLAYABLE
RUNTIME_FSS_REPOSITORY_ROOT
_APP_SHARE_DIR
示例
使用环境变量设置以下信息:安装文件的目录、存储输出的位置、存储连接和日志记录设置等。这些设置与应用程序逻辑解耦,在需要变更设置时,无需更新函数代码。
在如下函数代码片段中,参数“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桶。

解析DNS内网域名
- 已获取内网域名和域名ID。以添加解析记录的域名为例,获取方法如下:
- 登录云解析服务控制台。
- 获取域名ID。图3 获取域名ID
- 获取对应解析记录的域名。图4 获取域名
- 创建函数。
创建一个运行时语言为Python 2.7版本的函数,代码示例如下:
其中,url的加粗斜体内容表示DNS服务的终端节点信息,请根据实际情况修改。DNS服务终端节点信息,您可以从地区和终端节点中查询,以下示例以华北-北京4为例。
# -*- coding:utf-8 -*- import json import os import requests def handler(event, context): zone_id = context.getUserData("zone_id") domain = context.getUserData("domain") token=context.getToken() ips = domainResolved(zone_id, domain,token) if ips != []: print(ips) return ips # GET /v2/zones/{zone_id}/recordsets def domainResolved(zone_id, domain,token): url = "https://dns.cn-north-4./v2/zones/%s/recordsets" % zone_id headers = {'content-type': 'application/json', "X-Auth-Token": token} resp = requests.get(url, headers=headers) if resp.status_code == 200: text = json.loads(resp.text) for record in text["recordsets"]: if record["name"] == domain: ips = record["records"] return ips else: print("[GET /v2/zones/{zone_id}/recordsets] failed, response: %s" % resp.text) return []
- 为函数创建DNS委托。
在IAM页面,创建配置了DNS ReadOnlyAccess系统策略的委托。
图5 创建DNS委托在进行解析域名时,函数需要查看云解析服务资源,所以必须要配置DNS资源数据读取权限,否则在执行函数时,会提示如下错误,获取不成功。
2020/08/20 10:37:12 GMT+08:00 Start invoke request 'a2f105b4-2e72-4fda-94a5-86d3837e961d', version: latest [GET /v2/zones/{zone_id}/recordsets] failed, response: {"code":"DNS.1802","message":"Policy doesn't allow dns:recordset:list to be performed."} 2020/08/20 10:37:13 GMT+08:00 Finish invoke request 'a2f105b4-2e72-4fda-94a5-86d3837e961d', duration: 1030.072ms, billing duration: 1100ms, memory used: 77.039MB.
- 配置函数。
进入2创建的函数页面,选择“配置”页签,执行以下配置。
图6 配置函数 - 保存配置,执行函数。
执行成功后,可以正常返回域名对应的IP。如果调用DNS接口有问题,返回的域名IP为空。
图7 执行函数
