更新时间:2022-04-22 GMT+08:00
分享

配置环境变量

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

图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桶。

图2 环境变量

解析DNS内网域名

  1. 已获取内网域名和域名ID。

    以添加解析记录的域名为例,获取方法如下:
    1. 登录云解析服务控制台。
    2. 获取域名ID。
      图3 获取域名ID
    3. 获取对应解析记录的域名。
      图4 获取域名

  2. 创建函数。

    创建一个运行时语言为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 []

  3. 为函数创建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.

  4. 配置函数。

    进入2创建的函数页面,选择“配置”页签,执行以下配置。

    1. 在“委托名称”选择3创建的委托。
    2. 配置环境变量,输入1获取的域名和域名ID。
    图6 配置函数

  5. 保存配置,执行函数。

    执行成功后,可以正常返回域名对应的IP。如果调用DNS接口有问题,返回的域名IP为空。

    图7 执行函数

分享:

    相关文档

    相关产品

close