Todos os produtos
Search
Central de documentação

API Gateway:Function Compute

Última atualização: Jun 27, 2026

Este tópico explica como integrar o API Gateway ao Function Compute usando o Function Compute 3.0 como exemplo.

Pré-requisitos

Você já criou uma instância do API Gateway. Para informações sobre seleção de instâncias, consulte Guia de tipos e seleção de instâncias.

Visão geral

O API Gateway oferece suporte a dois tipos de funções do Function Compute: funções HTTP e funções de evento.

Integrar uma função HTTP ao API Gateway

Etapa 1: Criar uma função web

Antes de configurar o API Gateway, crie uma função web no console do Function Compute 3.0. Para mais informações, consulte Criar uma função web.

Etapa 2: Criar um serviço de backend

Defina um serviço de backend no API Gateway e configure o endereço para apontar para o serviço do Function Compute.

  1. Faça login no console do API Gateway. No painel de navegação à esquerda, escolha Manage APIs > Backend Services. Na barra de navegação superior, selecione uma região e clique em Create Backend Service.

    image

  2. Na caixa de diálogo Create Backend Service, configure os parâmetros e clique em OK.

    Defina Name como FC-backend, Type como Function Compute, Product Version como Function Compute 3.0 e Function Type como HTTP function.

  3. Na página Backend Services, clique no serviço de backend recém-criado. Na página de definição de serviço exibida, selecione a aba Production. Na seção Basic Information, clique em Create.

  4. Na página Basic Information, configure o endereço de acesso do trigger path e clique em Publish.

    O endereço de acesso é a url da função HTTP. Exemplo: https://helloworld-xxx-hangzhou-vpc.fcapp.run.

Etapa 3: Criar uma API

Crie uma API no console do API Gateway. Para mais informações, consulte Criar uma API.

  • Selecione um grupo de APIs. Recomendamos criar o grupo na mesma região da função do Function Compute.

Nota

Se a função do Function Compute e a API estiverem em regiões diferentes, o API Gateway encaminhará as solicitações ao serviço do Function Compute pela internet, o que pode gerar custos de transferência de dados. Se a segurança dos dados e a latência de rede forem críticas, garanta que a API e a função do Function Compute estejam na mesma região.

Crie e defina a API. Na etapa Define Backend Service, configure os seguintes parâmetros:

Backend Configuration: Use um serviço de backend existente.

Backend Service Type: Function Compute.

Product Version: Function Compute 3.0.

Function Type: HTTP function.

Backend Service: Selecione o nome do serviço de backend criado.

Backend Request Path: Especifique um caminho personalizado ou insira uma barra (/).

HTTP Method: Selecione o método compatível com a função do Function Compute no backend. Se houver suporte para vários métodos, selecione ANY.

Usar uma função de outra conta

O API Gateway pode invocar uma função do Function Compute pertencente a uma conta diferente da Alibaba Cloud. Esta seção descreve como uma instância do API Gateway na Conta A pode invocar uma função na Conta B.

  1. A Conta B deve conceder permissão à instância do API Gateway da Conta A para invocar a função do Function Compute.

    Etapa 1: Faça login no console do Resource Access Management (RAM) como Conta B e crie uma função do RAM. Para mais informações, consulte Criar uma função do RAM para uma conta confiável da Alibaba Cloud.

    Etapa 2: Conceda à função do RAM criada na Etapa 1 permissão para invocar a função do Function Compute. Anexe a política de sistema AliyunFCInvocationAccess. Para mais informações, consulte Conceder permissões a uma função do RAM.

    Etapa 3: Edite a política de confiança da função do RAM criada na Etapa 1. Para mais informações, consulte Editar a política de confiança de uma função do RAM. Adicione o ID da Conta A (por exemplo, 123456789012****) à política de confiança. A política modificada fica assim:

    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "123456789012****@apigateway.aliyuncs.com"
            ]
          }
        }
      ],
      "Version": "1"
    }

    Etapa 4: A Conta B fornece o Alibaba Cloud Resource Name (ARN) da função do RAM criada na Etapa 1 para a Conta A. Para mais informações, consulte Visão geral das funções do RAM.

  2. No console do API Gateway, a Conta A adiciona um serviço de backend que acessa a função do Function Compute da Conta B. No campo trigger path, insira a url de acesso da função na Conta B. No campo role ARN, insira o ARN fornecido pela Conta B.

Importante

Quando uma função HTTP atua como serviço de backend, o API Gateway sobrescreve o cabeçalho Authorization do cliente. Recomendamos usar um nome de parâmetro diferente no cliente.

Integrar uma função de evento ao API Gateway

Etapa 1: Criar uma função acionada por evento

Para criar uma função de evento no console do Function Compute 3.0, consulte Criar uma função acionada por evento.

Etapa 2: Criar um serviço de backend

Defina um serviço de backend no API Gateway e configure o endereço para apontar para o serviço do Function Compute.

  1. Faça login no console do API Gateway. Selecione uma região. No painel de navegação à esquerda, escolha Manage APIs > Backend Services. No canto superior direito, clique em Create Backend Service.

    Defina Name como FC-mobile, Type como Function Compute, Product Version como Function Compute 3.0 e Function Type como event function.

  2. Na página Backend Services, clique no serviço de backend recém-criado. Na página de definição de serviço exibida, selecione a aba Production. Na seção Basic Information, clique em Create.

  3. Selecione o nome da função de evento criada e clique em Publish.

    Defina Region como China (Hangzhou) e Function Alias como LATEST.

Etapa 3: Criar uma API

Crie uma API no console do API Gateway. Para mais informações, consulte Criar uma API.

  • Selecione um grupo de APIs. Recomendamos criar o grupo na mesma região da função do Function Compute.

Nota

Se a função do Function Compute e a API estiverem em regiões diferentes, o API Gateway encaminhará as solicitações ao serviço do Function Compute pela internet, o que pode gerar custos de transferência de dados. Se a segurança dos dados e a latência de rede forem críticas, garanta que a API e a função do Function Compute estejam na mesma região.

Backend Configuration: Use um serviço de backend existente.

Backend Service Type: Function Compute.

Product Version: Function Compute 3.0.

Function Type: event function.

Backend Service: Selecione o nome do serviço de backend criado.

Formatos de dados da função de evento

Ao invocar uma função de evento, o API Gateway converte os dados relacionados à API em formato de mapa e os transmite ao serviço do Function Compute. Após o processamento, a função retorna dados como código de status, cabeçalhos e corpo no formato de saída ilustrado na figura a seguir. O API Gateway mapeia esse conteúdo retornado para o código de status, cabeçalho e corpo da resposta enviada ao cliente.

Formato do payload da solicitação (do API Gateway para o Function Compute)

Ao usar o Function Compute como serviço de backend para uma API, o API Gateway passa os parâmetros da solicitação em uma estrutura de mapa fixa para o parâmetro de entrada event da função. Assim, a função obtém e processa os parâmetros dessa estrutura.

{
        "path":"api request path",
        "httpMethod":"request method name",
        "headers":{all headers,including system headers},
        "queryParameters":{query parameters},
        "pathParameters":{path parameters},
        "body":"string of request payload",
        "isBase64Encoded":"true|false, indicate if the body is Base64-encode"
}
  • Se o valor de "isBase64Encoded" for "true", o API Gateway transmitirá um corpo codificado em Base64. A função deve decodificá-lo antes do processamento.

  • Se o valor de "isBase64Encoded" for "false", o API Gateway não aplicará codificação Base64 ao conteúdo do corpo.

Formato do payload da resposta (do Function Compute para o API Gateway)

A função deve retornar a saída no seguinte formato JSON para que o API Gateway possa analisá-la.

{
        "isBase64Encoded":true|false,
        "statusCode":httpStatusCode,
        "headers":{response headers},
        "body":"..."
}
  • Para conteúdo binário no corpo, codifique-o em Base64 dentro da função e defina "isBase64Encoded" como "true". Se a codificação Base64 do corpo não for necessária, defina "isBase64Encoded" como "false". O API Gateway decodifica qualquer conteúdo de corpo onde "isBase64Encoded" seja "true" antes de retornar a resposta ao cliente.

  • Em ambiente Node.js, a função define o callback conforme os resultados.

    • Solicitação bem-sucedida: callback(null,{"statusCode":200,"body":"..."})

    • Exceção: callback(new Error('internal server error'),null)

    • Erro do cliente: callback(null,{"statusCode":400,"body":"param error"})

  • Se a função retornar um resultado fora do formato exigido, o API Gateway enviará um erro 503 Service Unavailable ao cliente.

Exemplos de invocação de função de evento

A seção a seguir apresenta amostras de código de função de evento, uma solicitação e uma resposta do API Gateway.

Amostra de código de função de evento

Configure o exemplo de código abaixo na página de execução de código da função.

module.exports.handler = function(event, context, callback) {
    var responseCode = 200;
    console.log("request: " + JSON.stringify(event.toString()));
    // Convert the event to a JSON object.
    event=JSON.parse(event.toString());
    var isBase64Encoded=false;
        // Return a response based on the statusCode entered by the user. This can be used to test different status codes.
    if (event.queryParameters !== null && event.queryParameters !== undefined) {
        if (event.queryParameters.httpStatus !== undefined && event.queryParameters.httpStatus !== null && event.queryParameters.httpStatus !== "") {
            console.log("Received http status: " + event.queryParameters.httpStatus);
            responseCode = event.queryParameters.httpStatus;
        }
    }
    // If the body is Base64-encoded, decode the body in Function Compute.
    if(event.body!==null&&event.body!==undefined){
            if(event.isBase64Encoded!==null&&event.isBase64Encoded!==undefined&&event.isBase64Encoded){
                    event.body=new Buffer(event.body,'base64').toString();
            }
    }
    // The input is the content sent from API Gateway to Function Compute.
    var responseBody = {
        message: "Hello World!",
        input: event
    };
        // Base64-encode the body content as needed.
    var base64EncodeStr=new Buffer(JSON.stringify(responseBody)).toString('base64');
        // The response from Function Compute to API Gateway must be in the required format. The isBase64Encoded setting depends on whether the body is Base64-encoded.
    var response = {
                isBase64Encoded:true,
                statusCode: responseCode,
                headers: {
                "x-custom-header" : "header value"
                },
                body: base64EncodeStr
    };
    console.log("response: " + JSON.stringify(response));
    callback(null, response);
};        

Amostra de solicitação de função de evento

O exemplo abaixo mostra uma solicitação POST para uma API com o seguinte caminho:

/fc/test/invoke/[type]        
POST http://test.alicloudapi.com/fc/test/invoke/test?param1=aaa&param2=bbb
"X-Ca-Signature-Headers":"X-Ca-Timestamp,X-Ca-Version,X-Ca-Key,X-Ca-Stage",
"X-Ca-Signature":"TnoBldxxRHrFferGlzzkGcQsaezK+ZzySloKqCOsv2U=",
"X-Ca-Stage":"RELEASE",
"X-Ca-Timestamp":"1496652763510",
"Content-Type":"application/x-www-form-urlencoded; charset=utf-8",
"X-Ca-Version":"1",
"User-Agent":"Apache-HttpClient\/4.1.2 (java 1.6)",
"Host":"test.alicloudapi.com",
"X-Ca-Key":"testKey",
"Date":"Mon, 05 Jun 2017 08:52:43 GMT","Accept":"application/json",
"headerParam":"testHeader"
{"bodyParam":"testBody"}        

Amostra de resposta do API Gateway

200
Date: Mon, 05 Jun 2017 08:52:43 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 429
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,HEAD,OPTIONS , PATCH
Access-Control-Allow-Headers: X-Requested-With, X-Sequence,X-Ca-Key,X-Ca-Secret,X-Ca-Version,X-Ca-Timestamp,X-Ca-Nonce,X-Ca-API-Key,X-Ca-Stage,X-Ca-Client-DeviceId,X-Ca-Client-AppId,X-Ca-Signature,X-Ca-Signature-Headers,X-Forwarded-For,X-Ca-Date,X-Ca-Request-Mode,Authorization,Content-Type,Accept,Accept-Ranges,Cache-Control,Range,Content-MD5
Access-Control-Max-Age: 172800
X-Ca-Request-Id: 16E9D4B5-3A1C-445A-BEF1-4AD8E31434EC
x-custom-header: header value
{"message":"Hello World!","input":{"body":"{\"bodyParam\":\"testBody\"}","headers":{"X-Ca-Api-Gateway":"16E9D4B5-3A1C-445A-BEF1-4AD8E31434EC","headerParam":"testHeader","X-Forwarded-For":"100.81.146.152","Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},"httpMethod":"POST","isBase64Encoded":false,"path":"/fc/test/invoke/test","pathParameters":{"type":"test"},"queryParameters":{"param1":"aaa","param2":"bbb"}}}
        

Perguntas frequentes

  • Por que não consigo selecionar minha função existente?

    Verifique se o nome do serviço e o nome da função inseridos correspondem exatamente aos nomes do serviço e da função criados no console do Function Compute.

  • Ao usar o Function Compute como serviço de backend para uma API, o API Gateway pode se conectar ao serviço de backend via rede interna?

    Sim. Se você usar uma função de evento e tanto o API Gateway quanto o Function Compute estiverem na mesma região, o API Gateway usará a rede interna por padrão.