无服务器云函数间调用

本页将向您介绍并演示如何使用 Tencent Cloud SDK for Python 轻松实现无服务器云函数间调用

概述

通常情况下,我们可能需要在一个无服务器云函数中依赖另一个或多个无服务器云函数。通过在无服务器云函数中集成并使用 Tencent Cloud SDK for Python,无服务器云函数间调用将非常易于实现。

在下文中我们将通过一个简单的应用场景向您进一步介绍并演示如何使用 Tencent Cloud SDK for Python 快速实现在无服务器云函数之间相互调用。

场景

设定

假定我们在数据中心 ap-shanghai 的命名空间 default 中拥有 2 个已创建就绪的无服务器云函数,其名称分别是 helloaddend。这些无服务器云函数的配置如下:

要求

在该场景中,我们要求在无服务器云函数 hello 中以友好且可供人类直接阅读的字符串返回一次加法运算的结果,其加法运算过程要求在无服务器云函数 addend 中实现。

指导

在下文中,我们将通过几个步骤向您演示编写符合当前场景要求的代码示例:

编写 addend 函数

首先,我们需要先编写无服务器云函数 hello 的依赖函数 addend 的函数源代码:

def main(
    event: dict,
    context: dict
) -> int:
    try:
        return event['value1'] + event['value2']
    except KeyError as error:
        raise ValueError('event missing field: ' + str(error))

在无服务器云函数 addend 中,我们尝试获取当前函数调用事件中的字段 value1value2 的值,并将字段 value1value2 的值相加后返回,期望相加值类型为整形。

编写 hello 函数

接着,我们需要编写依赖无服务器云函数 addend 的主函数 hello 的函数源代码:

导入模块

首先我们需要在无服务器云函数 hello 中导入 Tencent Cloud SDK for Python 相关命名空间和模块:

from tencent.cloud.serverless import functions

入口函数

接着我们需要为无服务器云函数 hello 编写入口函数。

在入口函数中我们将尝试使用 Tencent Cloud SDK for Python 所提供的无服务器云函数间调用功能调用无服务器云函数 addend 完成一次加法运算并获取结果:

def main(
    event: dict,
    context: dict
) -> str:
    try:
        result: int = functions.invoke('addend', function_event = {
            'value1': 10,
            'value2': 20    
        })
        
        return 'addend result: ' + str(result)
    except functions.errors.InvokeError as error:
        return 'invoke addend function error: ' + str(error)

在无服务器云函数 hello 中,我们尝试使用 Tencent Cloud SDK for Python 函数间调用功能调用无服务器云函数 addend 计算数值 1020 的相加结果并以人类易读的描述性字符串返回。

如果无服务器云函数 addend 运行出错,则返回错误原因的描述性字符串。

请注意,无服务器云函数间调用仅支持已配置 运行角色 的无服务器云函数发起调用。

运行

现在我们尝试运行无服务器云函数 hello,如果一切正常其运行结果为:

"addend result: 30"

探究

在上文的演示代码中我们导入 Tencent Cloud SDK for Python 的无服务器云函数产品软件包,使用 functions.invoke 函数完成无服务器云函数之间相互调用的工作。

您或许已经注意到,无服务器云函数间调用的方式不需要您维护一个访问凭据和无服务器云函数产品客户端实例,这是因为 Tencent Cloud SDK for Python 的无服务器云函数间调用机制已代您维护一个有效的临时访问凭据和产品客户端实例。

当您初次使用 functions.invokefunctions.invoke_async 函数时,Tencent Cloud SDK for Python 会尝试在内部实例化一个无服务器云函数产品客户端并搜寻采用非持久环境凭据。

当无服务器云函数已配置具有有效访问权限的 运行角色 时,其函数在运行代码之前将自动申请并获得一个非持久性的临时访问凭据并将其存储在当前运行环境的环境变量中,这就是环境凭据的由来。

如果当前无服务器云函数已配置 运行角色,实例化通用或产品客户端时允许不提供访问凭据,此时 Tencent Cloud SDK for Python 将自动搜寻并采用环境凭据。

并且,函数 functions.invokefunctions.invoke_async 在内部将依赖无服务器云函数产品客户端的 easy_invoke 实例方法,其具有与依赖方法相同的行为和返回值。

请注意,使用无服务器云函数间调用方式调用的目标无服务器云函数必须与当前无服务器云函数所在数据中心相同,且命名空间为 default。

否则,您应该将参数 namespace_name 和 region_id 设置为有效值。

因此,无服务器云函数间调用机制并非真正地脱离无服务器云函数产品客户端,只是 Tencent Cloud SDK for Python 为开发者提供更佳便利的封装调用机制。

最后更新于