Uma função pode invocar outra função?
Sim. Uma função pode chamar outra função usando uma API ou SDK na mesma região. Para invocação entre regiões, o chamador deve ter acesso público.
Usar uma API
Para obter detalhes, consulte Exemplo 4: uso de uma função para chamar uma subfunção.
Usar um SDK (Python)
- Crie uma função chamada FuncB, que será invocada.
Crie a função do zero com o tempo de execução do Python 3.6 e o seguinte 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" } }
- Crie uma função chamada FuncA.
1. Crie a função do zero com o tempo de execução do Python 3.6 e o código a seguir. Substitua <Your Function Region> e <Your Function URN> pela região e URN do 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" } }
- Configure dependências para a função.
Configure dependências huawei-cloud-sdk-core-python-3.x e huaweicloud-sdk-python-v3, que podem ser baixadas de Visão geral do SDK. Para obter detalhes sobre como criar uma dependência, consulte Como criar dependências de função?
- Conceda permissões para a função.
Conceda a permissão FunctionGraph CommonOperation à função criando uma agência para que a função possa chamar outras funções. Para obter detalhes, consulte Criação de uma agência.
- Configure dependências para a função.
- Verifique o resultado da execução.
Configure um evento de teste em branco para FuncA e clique em Test. Um resultado semelhante ao seguinte é exibido.
Figura 1 Visualização do resultado da execução
Visualize os logs de execução de FuncB's gerados no mesmo período.