Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2023-05-09 GMT+08:00

¿Puede una función invocar otra función?

Sí. Una función puede invocar otra función usando una API o un SDK en la misma región. Para la invocación entre regiones, la persona que invoca debe tener el acceso público.

Uso de una API

Para obtener más información, consulte el Ejemplo 4: Uso de una función para invocar una subfunción.

Uso de un SDK (Python)

  1. Cree una función llamada FuncB que será invocada.

    Cree la función desde cero con el tiempo de ejecución de Python 3.6 y el siguiente código:

    # -*- coding:utf-8 -*-
    import json
    def handler (event, context):
           # Prints input parameters to verify the invocation result.
        logger = context.getLogger()
        logger.info(event)
        return {
            "statusCode": 200,
            "isBase64Encoded": False,
            "body": json.dumps(event),
            "headers": {
                "Content-Type": "application/json"
            }
        }
  2. Cree una función invocadora llamada FuncA.

    1. Cree la función desde cero con el tiempo de ejecución de Python 3.6 y el siguiente código. Reemplace <Your Function Region> y <Your Function URN> con la región y URN de FuncB.

    # -*- coding:utf-8 -*-
    from huaweicloudsdkcore.auth.credentials import BasicCredentials
    from huaweicloudsdkfunctiongraph.v2.region.functiongraph_region import FunctionGraphRegion
    from huaweicloudsdkcore.exceptions import exceptions
    from huaweicloudsdkfunctiongraph.v2 import *
    def handler (event, context):
        logger = context.getLogger()
        ak = context.getAccessKey()
        sk = context.getSecretKey()
    
        credentials = BasicCredentials(ak, sk)
        client = FunctionGraphClient.new_builder() \
            .with_credentials(credentials) \
            .with_region(FunctionGraphRegion.value_of("<Your Function Region>")) \
            .build()
    
        try:
            request = InvokeFunctionRequest()
            request.function_urn = "<Your Function URN>"
            # Input parameters.
            request.body = "{'input_key':'input_value'}"
            # Response body format. v0: text; v1: JSON.
            request.x_cff_request_version = "v1"
            response = client.invoke_function(request)
            logger.info(response)
        except exceptions.ClientRequestException as e:
            logger.error(e.status_code)
            logger.error(e.request_id)
            logger.error(e.error_code)
            logger.error(e.error_msg)
        return {
            "statusCode": 200,
            "isBase64Encoded": False,
            "body": "",
            "headers": {
              "Content-Type": "application/json"
            }
        }
    1. Configurar las dependencias para la función.

      Configure las dependencias huawei-cloud-sdk-core-python-3.x y huaweicloud-sdk-python-v3, que se pueden descargar desde SDK. Para obtener más información sobre cómo crear una dependencia, vea ¿Cómo creo dependencias de función?

    2. Conceder permisos a la función.

      Conceda el permiso FunctionGraph CommonOperation a la función creando una delegación para que la función pueda invocar otras funciones. Para obtener más información, consulte la sección Creación de una delegación.

  3. Comprobar el resultado de la ejecución.

    Configure un evento de prueba en blanco para FuncA y haga clic en Test. Se muestra un resultado similar al siguiente.

    Figura 1 Consulta del resultado de la ejecución

    Vea los logs de ejecución de FuncB's generados en el mismo período.