¿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)
- 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" } }
- 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" } }
- 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?
- 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.
- Configurar las dependencias para la función.
- 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.