All Products
Search
Document Center

API Gateway:Function Compute

Last Updated:Jun 22, 2026

Topik ini menjelaskan cara mengintegrasikan API Gateway dengan Function Compute menggunakan Function Compute 3.0 sebagai contoh.

Prasyarat

Anda telah membuat instans API Gateway. Untuk informasi tentang pemilihan instans, lihat Panduan Jenis dan Pemilihan Instans.

Ikhtisar

API Gateway mendukung dua jenis fungsi Function Compute: fungsi HTTP dan fungsi event.

Integrasikan fungsi HTTP dengan API Gateway

Langkah 1: Buat fungsi web

Sebelum mengonfigurasi API Gateway, Anda harus membuat fungsi web di Konsol Function Compute 3.0. Untuk informasi selengkapnya, lihat Buat fungsi web.

Langkah 2: Buat layanan backend

Definisikan layanan backend di API Gateway dan atur alamatnya ke layanan Function Compute Anda.

  1. Masuk ke Konsol API Gateway. Di panel navigasi kiri, pilih Manage APIs > Backend Services. Di bilah navigasi atas, pilih wilayah dan klik Create Backend Service.

    image

  2. Pada kotak dialog Create Backend Service, konfigurasikan parameter dan klik OK.

    Atur Name menjadi FC-backend. Atur Type menjadi Function Compute, Product Version menjadi Function Compute 3.0, dan Function Type menjadi HTTP function.

  3. Di halaman Backend Services, klik layanan backend yang baru saja Anda buat. Di halaman definisi layanan yang muncul, pilih tab Production. Di bagian Basic Information, klik Create.

  4. Di halaman Basic Information, konfigurasikan alamat akses untuk trigger path dan klik Publish.

    Alamat akses adalah URL fungsi HTTP. Contoh: https://helloworld-xxx-hangzhou-vpc.fcapp.run.

Langkah 3: Buat API

Buat API di Konsol API Gateway. Untuk informasi selengkapnya, lihat Buat API.

  • Pilih grup API. Kami menyarankan Anda membuatnya di wilayah yang sama dengan fungsi Function Compute.

Catatan

Jika fungsi Function Compute dan API berada di wilayah yang berbeda, API Gateway akan merutekan permintaan ke layanan Function Compute Anda melalui internet, yang dapat menimbulkan biaya transfer data. Jika keamanan data dan latensi jaringan sangat penting, pastikan API dan fungsi Function Compute berada di wilayah yang sama.

Buat dan definisikan API tersebut. Pada langkah Define Backend Service, konfigurasikan parameter berikut:

Backend Configuration: Gunakan layanan backend yang sudah ada.

Backend Service Type: Function Compute.

Product Version: Function Compute 3.0.

Function Type: HTTP function.

Backend Service: Pilih nama layanan backend yang telah Anda buat.

Backend Request Path: Anda dapat menentukan path kustom. Jika tidak, masukkan garis miring (/).

HTTP Method: Pilih metode yang didukung oleh fungsi Function Compute backend. Jika beberapa metode didukung, pilih ANY.

Gunakan fungsi dari akun lain

API Gateway dapat memanggil fungsi Function Compute yang dimiliki oleh Akun Alibaba Cloud yang berbeda. Bagian ini menjelaskan cara instans API Gateway di Akun A memanggil fungsi di Akun B.

  1. Akun B harus memberikan izin kepada instans API Gateway di Akun A untuk memanggil fungsi Function Compute tersebut.

    Langkah 1: Masuk ke Konsol Resource Access Management (RAM) sebagai Akun B dan buat peran RAM. Untuk informasi selengkapnya, lihat Buat peran RAM untuk akun Alibaba Cloud tepercaya.

    Langkah 2: Berikan izin kepada peran RAM yang dibuat pada Langkah 1 untuk memanggil fungsi Function Compute. Lampirkan kebijakan sistem bernama AliyunFCInvocationAccess. Untuk informasi selengkapnya, lihat Berikan izin kepada peran RAM.

    Langkah 3: Edit kebijakan kepercayaan peran RAM yang dibuat pada Langkah 1. Untuk informasi selengkapnya, lihat Edit kebijakan kepercayaan peran RAM. Tambahkan ID Akun A, misalnya 123456789012****, ke dalam kebijakan kepercayaan. Kebijakan kepercayaan yang telah dimodifikasi adalah sebagai berikut:

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

    Langkah 4: Akun B memberikan Nama Sumber Daya Alibaba Cloud (ARN) dari peran RAM yang dibuat pada Langkah 1 kepada Akun A. Untuk informasi selengkapnya, lihat Ikhtisar peran RAM.

  2. Di Konsol API Gateway, Akun A menambahkan layanan backend yang mengakses fungsi Function Compute milik Akun B. Untuk trigger path, masukkan URL akses fungsi di Akun B. Untuk role ARN, masukkan ARN yang diberikan oleh Akun B.

Penting

Ketika fungsi HTTP digunakan sebagai layanan backend, header Authorization dari klien akan ditimpa oleh API Gateway. Kami menyarankan Anda menggunakan nama parameter yang berbeda di sisi klien.

Integrasikan fungsi event dengan API Gateway

Langkah 1: Buat fungsi yang dipicu event

Untuk membuat fungsi event di Konsol Function Compute 3.0, lihat Buat fungsi yang dipicu event.

Langkah 2: Buat layanan backend

Definisikan layanan backend di API Gateway dan atur alamatnya ke layanan Function Compute Anda.

  1. Masuk ke Konsol API Gateway. Pilih wilayah. Di panel navigasi kiri, pilih Manage APIs > Backend Services. Di pojok kanan atas, klik Create Backend Service.

    Atur Name menjadi FC-mobile. Atur Type menjadi Function Compute, Product Version menjadi Function Compute 3.0, dan Function Type menjadi event function.

  2. Di halaman Backend Services, klik layanan backend yang baru saja Anda buat. Di halaman definisi layanan yang muncul, pilih tab Production. Di bagian Basic Information, klik Create.

  3. Pilih nama fungsi event yang telah Anda buat, lalu klik Publish.

    Atur Region menjadi China (Hangzhou) dan Function Alias menjadi LATEST.

Langkah 3: Buat API

Buat API di Konsol API Gateway. Untuk informasi selengkapnya, lihat Buat API.

  • Pilih grup API. Kami menyarankan Anda membuatnya di wilayah yang sama dengan fungsi Function Compute.

Catatan

Jika fungsi Function Compute dan API berada di wilayah yang berbeda, API Gateway akan merutekan permintaan ke layanan Function Compute Anda melalui internet, yang dapat menimbulkan biaya transfer data. Jika keamanan data dan latensi jaringan sangat penting, pastikan API dan fungsi Function Compute berada di wilayah yang sama.

Backend Configuration: Gunakan layanan backend yang sudah ada.

Backend Service Type: Function Compute.

Product Version: Function Compute 3.0.

Function Type: event function.

Backend Service: Pilih nama layanan backend yang telah Anda buat.

Format data fungsi event

Ketika API Gateway memanggil fungsi event, API Gateway mengonversi data terkait API ke format map dan meneruskan data tersebut ke layanan Function Compute. Setelah diproses, fungsi tersebut mengembalikan data seperti kode status, header, dan body dalam format output seperti pada gambar berikut. API Gateway kemudian memetakan konten yang dikembalikan ini ke kode status, header, dan body respons yang dikirim ke klien.

Format muatan permintaan (API Gateway ke Function Compute)

Ketika Anda menggunakan Function Compute sebagai layanan backend untuk API, API Gateway meneruskan parameter permintaan dalam struktur map tetap ke parameter input event fungsi. Fungsi tersebut kemudian dapat memperoleh dan memproses parameter dari struktur ini.

{
        "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"
}
  • Jika nilai "isBase64Encoded" adalah "true", API Gateway meneruskan body yang telah di-encode Base64, yang harus didekode oleh fungsi sebelum diproses.

  • Jika nilai "isBase64Encoded" adalah "false", API Gateway tidak melakukan encode Base64 terhadap konten body.

Format muatan respons (Function Compute ke API Gateway)

Fungsi harus mengembalikan output dalam format JSON berikut agar API Gateway dapat menguraikannya.

{
        "isBase64Encoded":true|false,
        "statusCode":httpStatusCode,
        "headers":{response headers},
        "body":"..."
}
  • Jika konten body bersifat biner, Anda harus melakukan encode Base64 di dalam fungsi dan mengatur nilai "isBase64Encoded" menjadi "true". Jika konten body tidak perlu di-encode Base64, atur nilai "isBase64Encoded" menjadi "false". API Gateway akan mendekode konten body yang memiliki nilai "isBase64Encoded" sebagai "true" sebelum mengembalikan respons ke klien.

  • Di lingkungan Node.js, fungsi mengatur callback berdasarkan hasil yang berbeda.

    • Permintaan berhasil: callback(null,{"statusCode":200,"body":"..."})

    • Exception: callback(new Error('internal server error'),null)

    • Error klien: callback(null,{"statusCode":400,"body":"param error"})

  • Jika fungsi mengembalikan hasil yang tidak sesuai dengan format yang ditentukan, API Gateway akan mengembalikan error 503 Service Unavailable ke klien.

Contoh pemanggilan fungsi event

Bagian berikut menyediakan contoh kode fungsi event, permintaan, dan respons API Gateway.

Contoh kode fungsi event

Kode contoh berikut dapat dikonfigurasi di halaman eksekusi kode fungsi.

module.exports.handler = function(event, context, callback) {
    var responseCode = 200;
    console.log("request: " + JSON.stringify(event.toString()));
    // Konversi event ke objek JSON.
    event=JSON.parse(event.toString());
    var isBase64Encoded=false;
        // Kembalikan respons berdasarkan statusCode yang dimasukkan pengguna. Ini dapat digunakan untuk menguji berbagai kode status.
    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;
        }
    }
    // Jika body di-encode Base64, dekode body di 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();
            }
    }
    // Input adalah konten yang dikirim dari API Gateway ke Function Compute.
    var responseBody = {
        message: "Hello World!",
        input: event
    };
        // Lakukan encode Base64 terhadap konten body sesuai kebutuhan.
    var base64EncodeStr=new Buffer(JSON.stringify(responseBody)).toString('base64');
        // Respons dari Function Compute ke API Gateway harus dalam format yang ditentukan. Pengaturan isBase64Encoded bergantung pada apakah body di-encode Base64.
    var response = {
                isBase64Encoded:true,
                statusCode: responseCode,
                headers: {
                "x-custom-header" : "header value"
                },
                body: base64EncodeStr
    };
    console.log("response: " + JSON.stringify(response));
    callback(null, response);
};        

Contoh permintaan fungsi event

Contoh berikut menunjukkan permintaan POST ke API dengan path berikut:

/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"}        

Contoh respons 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"}}}
        

FAQ

  • Mengapa saya tidak dapat memilih fungsi yang sudah ada?

    Pastikan nama layanan dan nama fungsi yang Anda masukkan sesuai dengan nama layanan dan fungsi yang telah Anda buat di Konsol Function Compute.

  • Ketika saya menggunakan Function Compute sebagai layanan backend untuk API, apakah API Gateway dapat terhubung ke layanan backend melalui jaringan internal?

    Jika Anda menggunakan fungsi event dan API Gateway serta Function Compute berada di wilayah yang sama, API Gateway secara default menggunakan jaringan internal.