Function Compute adalah layanan berbasis peristiwa. Dengan mengintegrasikan Function Compute dengan API Gateway, Anda dapat membuka fungsi kepada publik sebagai API secara aman melalui API Gateway. API Gateway juga memungkinkan otentikasi pengguna, pembatasan panggilan, dan konversi data. Topik ini menjelaskan cara mengintegrasikan API Gateway dengan Function Compute 3.0.
Prasyarat
Sebuah instance API Gateway telah dibuat. Untuk informasi lebih lanjut, lihat Pilih tipe instance.
Ikhtisar
API Gateway mendukung dua jenis fungsi Function Compute: fungsi HTTP dan fungsi event.
Mengintegrasikan fungsi HTTP dengan API Gateway
1. Buat fungsi web
Sebelum mengintegrasikan Function Compute dengan API Gateway, buat fungsi web di konsol Function Compute 3.0. Untuk informasi lebih lanjut, lihat Buat fungsi web.
2. Buat layanan backend
Buat layanan backend di API Gateway dan konfigurasikan URL untuk menunjuk ke layanan Function Compute Anda.
Masuk ke Konsol API Gateway. Di panel navigasi sebelah kiri, pilih Manage APIs > Backend Services. Di bilah navigasi atas, pilih wilayah. Lalu, klik Create Backend Service.

Di kotak dialog Create Backend Service, konfigurasikan parameter seperti yang ditunjukkan pada gambar berikut dan klik Confirm.

Di halaman Layanan Backend, klik layanan backend yang telah dibuat. Di halaman Definisi Layanan Backend, klik tab Production. Di bagian Basic Information, klik Create di pojok kanan atas.

Di halaman Basic Information, konfigurasikan parameter Trigger Path dan klik Publish.

3. Buat API
Buat API di konsol API Gateway. Untuk informasi lebih lanjut, lihat Langkah 3: Buat API.
Buat grup API. Kami merekomendasikan Anda membuat grup API di wilayah yang sama dengan fungsi Function Compute Anda.
Jika grup API dibuat di wilayah yang berbeda dari fungsi Function Compute, API Gateway mengakses fungsi tersebut melalui Internet, yang akan menimbulkan biaya lalu lintas. Jika Anda memerlukan keamanan data tinggi dan latensi jaringan rendah, pilih wilayah tempat Anda membuat fungsi di Function Compute untuk membuat grup API.
Buat dan definisikan API. Di langkah Tentukan Layanan Backend dalam wizard Buat API, konfigurasikan parameter berikut:

Mode Konfigurasi: Pilih Gunakan Layanan Backend yang Ada.
Tipe Layanan Backend: Pilih Function Compute.
Versi: Pilih Function Compute V3.0.
Tipe Fungsi: Pilih Fungsi HTTP.
Layanan Backend: Pilih FC-backend.
Jalur Permintaan Backend: Tentukan jalur kustom. Jika Anda tidak ingin menentukan jalur kustom, masukkan garis miring (/).
Metode HTTP: Pilih metode yang didukung oleh Function Compute. Jika Anda ingin menentukan beberapa metode, pilih ANY.
Gunakan fungsi Function Compute dari akun lain
API Gateway memungkinkan Anda menggunakan fungsi Function Compute dari akun lain untuk diintegrasikan dengan API Anda. Bagian berikut menjelaskan cara mengizinkan API Gateway di Akun A mengakses fungsi di Akun B.
Gunakan Akun B untuk melakukan langkah-langkah berikut guna memberi otorisasi API Gateway di Akun A untuk mengakses fungsi di Akun B:
Langkah 1: Masuk ke Konsol Resource Access Management (RAM) menggunakan Akun B dan buat Peran RAM. Untuk informasi lebih lanjut, lihat Buat Peran RAM untuk akun Alibaba Cloud tepercaya.
Langkah 2: Lampirkan kebijakan AliyunFCInvocationAccess ke Peran RAM yang dibuat di Langkah 1. Kebijasan ini mengizinkan Peran RAM untuk mengakses Function Compute. Untuk informasi lebih lanjut, lihat bagian "Metode 1: Berikan izin ke Peran RAM dengan mengklik Berikan Izin di halaman Peran" dari topik Berikan izin ke Peran RAM.
Langkah 3: Tambahkan ID 123456789012**** dari Akun A ke kebijakan kepercayaan Peran RAM untuk memodifikasi kebijakan kepercayaan. Untuk informasi lebih lanjut, lihat bagian "Contoh 1: Ubah entitas tepercaya Peran RAM menjadi akun Alibaba Cloud" dari topik Edit kebijakan kepercayaan Peran RAM. Contoh kode berikut memberikan contoh kebijakan kepercayaan yang dimodifikasi:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "123456789012****@apigateway.aliyuncs.com" ] } } ], "Version": "1" }Langkah 4: Berikan Nama Sumber Daya Alibaba Cloud (ARN) dari Peran RAM untuk Akun A. Untuk informasi lebih lanjut, lihat bagian "Istilah" dari topik Gambaran Peran RAM.
Gunakan Akun A di konsol API Gateway untuk menentukan informasi yang diperlukan untuk mengizinkan akses dari API Gateway di Akun A ke Function Compute di Akun B. Konten jalur pemicu adalah titik akhir Function Compute di Akun B. ARN peran adalah ARN peran yang diberikan di Langkah 4.
Ketika fungsi HTTP digunakan sebagai layanan backend API, nilai Authorization dalam permintaan yang dikirim dari klien akan ditimpa oleh nilai Authorization dari fungsi HTTP. Kami menyarankan Anda menggunakan parameter lain dalam permintaan Anda.
Mengintegrasikan fungsi event dengan API Gateway
1. Buat fungsi event
Untuk informasi lebih lanjut tentang cara membuat fungsi event di konsol Function Compute 3.0, lihat Buat fungsi event.
2. Buat layanan backend
Buat layanan backend di API Gateway dan konfigurasikan URL untuk menunjuk ke layanan Function Compute Anda.
Masuk ke Konsol API Gateway. Di panel navigasi sebelah kiri, pilih Manage APIs > Backend Services. Di bilah navigasi atas, pilih wilayah. Lalu, klik Create Backend Service di pojok kanan atas dan konfigurasikan parameter berikut:

Di halaman Layanan Backend, klik layanan backend yang telah dibuat. Di halaman Definisi Layanan Backend, klik tab Production. Di bagian Basic Information, klik Create di pojok kanan atas.

Pilih fungsi event yang telah dibuat dan klik Publish.

3. Buat API
Buat API di konsol API Gateway. Untuk informasi lebih lanjut, lihat Langkah 3: Buat API.
Buat grup API. Kami merekomendasikan Anda membuat grup API di wilayah yang sama dengan fungsi Function Compute Anda.
Jika wilayah tempat Anda membuat grup API tidak sama dengan wilayah tempat Anda membuat layanan di Function Compute, API Gateway mengakses layanan di Function Compute melalui Internet, yang akan menimbulkan biaya lalu lintas. Jika Anda memerlukan keamanan data tinggi dan latensi jaringan rendah, pastikan wilayah API sama dengan wilayah fungsi.
Buat API. Di langkah Tentukan Layanan Backend dalam wizard Buat API, perhatikan parameter tertentu. Gambar berikut menunjukkan semua parameter dalam langkah tersebut.

Mode Konfigurasi: Pilih Gunakan Layanan Backend yang Ada.
Tipe Layanan Backend: Pilih Function Compute.
Versi: Pilih Function Compute V3.0.
Tipe Fungsi: Pilih Fungsi Event.
Layanan Backend: Pilih layanan backend yang telah dibuat.
Persyaratan format ketika fungsi event diintegrasikan dengan API Gateway
Setelah API Gateway menerima permintaan untuk API yang menggunakan fungsi event di Function Compute sebagai layanan backend, API Gateway mengonversi parameter permintaan dan mengirim permintaan ke Function Compute. Function Compute menangani permintaan dan mengembalikan respons dalam format keluaran tertentu ke API Gateway. Respons mencakup data seperti statusCode, headers, dan parameter body. Gambar berikut menunjukkan format keluaran respons. API Gateway memetakan data dalam respons ke parameter spesifik dari respons API, seperti statusCode, headers, dan parameter body, dan mengembalikan respons API ke klien.

Format input parameter permintaan dalam setiap permintaan API yang API Gateway kirim ke Function Compute
Setelah API Gateway menerima permintaan untuk API yang menggunakan Function Compute sebagai layanan backend, API Gateway mengonversi parameter permintaan dan melewatkan parameter permintaan ke Function Compute sebagai nilai parameter event. Kemudian, Function Compute mendapatkan parameter yang diperlukan dari parameter permintaan dalam format Map dan menangani permintaan. Contoh kode berikut memberikan contoh parameter yang diperlukan:
{
"path":"jalur permintaan api",
"httpMethod":"nama metode permintaan",
"headers":{semua header, termasuk header sistem},
"queryParameters":{parameter query},
"pathParameters":{parameter jalur},
"body":"string payload permintaan",
"isBase64Encoded":"true|false, menunjukkan apakah body di Base64-encode"
}Jika nilai dari
isBase64Encodedadalahtrue, body permintaan yang dikirim dari API Gateway ke Function Compute di Base64-encoded. Dalam hal ini, Function Compute harus mendekode body permintaan dalam Base64 sebelum menangani permintaan.Jika nilai dari
isBase64Encodedadalahfalse, body permintaan yang dikirim dari API Gateway ke Function Compute tidak di Base64-encoded.
Format output parameter respons yang Function Compute kembalikan ke API Gateway
Respons yang Function Compute kembalikan ke API Gateway dalam format JSON. Ini memungkinkan API Gateway untuk mengurai respons. Contoh kode berikut memberikan contoh respons dalam format JSON:
{
"isBase64Encoded":true|false,
"statusCode":httpStatusCode,
"headers":{header respons},
"body":"..."
}Jika body respons adalah data biner, body harus di Base64-encoded di Function Compute. Untuk mengkodekan body respons dalam Base64, atur
isBase64Encodedketrue. Jika body respons tidak perlu di Base64-encoded, aturisBase64Encodedkefalse. Jika nilai dariisBase64Encodedadalahtruedalam body respons yang dikembalikan dari Function Compute, API Gateway mendekode body dalam Base64 sebelum mengembalikan body ke klien.Dalam lingkungan Node.js, Function Compute membangun parameter callback berdasarkan hasil respons yang berbeda:
Jika Function Compute mengembalikan respons sukses, nilai parameter callback dalam format berikut: callback(null,{"statusCode":200,"body":"..."}).
Jika Function Compute mengembalikan pengecualian, nilai parameter callback dalam format berikut: callback(new Error('internal server error'),null).
Jika Function Compute mengembalikan kesalahan klien, nilai parameter callback dalam format berikut: callback(null,{"statusCode":400,"body":"param error"}).
Jika Function Compute mengembalikan respons dalam format yang tidak valid, API Gateway mengembalikan pesan kesalahan berikut ke klien: 503 Service Unavailable.
Contoh pemanggilan fungsi event
Bagian berikut memberikan contoh kode fungsi event, permintaan fungsi event, dan respons API.
Fungsi event
Bagian berikut memberikan contoh kode di tab Code halaman Detail Fungsi di konsol Function Compute:
module.exports.handler = function(event, context, callback) {
var responseCode = 200;
console.log("request: " + JSON.stringify(event.toString()));
// Ubah nilai parameter event menjadi objek JSON.
event=JSON.parse(event.toString());
var isBase64Encoded=false;
// Bangun body respons berdasarkan kode status yang ditentukan dalam permintaan. Body respons yang berbeda dibangun berdasarkan kode status yang berbeda.
if (event.queryParameters !== null && event.queryParameters !== undefined) {
if (event.queryParameters.httpStatus !== undefined && event.queryParameters.httpStatus !== null && event.queryParameters.httpStatus !== "") {
console.log("Menerima http status: " + event.queryParameters.httpStatus);
responseCode = event.queryParameters.httpStatus;
}
}
// Jika body parameter event di Base64-encoded, dekode body dalam Base64 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();
}
}
// Atur parameter input ke konten yang dikirim dari API Gateway ke Function Compute.
var responseBody = {
message: "Hello World!",
input: event
};
// Enkode body respons dalam Base64 berdasarkan kebutuhan bisnis Anda.
var base64EncodeStr=new Buffer(JSON.stringify(responseBody)).toString('base64');
// Tentukan respons yang Function Compute kembalikan ke API Gateway dalam format berikut: Nilai parameter isBase64Encoded bervariasi berdasarkan apakah body respons di Base64-encoded.
var response = {
isBase64Encoded:true,
statusCode: responseCode,
headers: {
"x-custom-header" : "nilai header"
},
body: base64EncodeStr
};
console.log("response: " + JSON.stringify(response));
callback(null, response);
}; Permintaan fungsi event
Dalam contoh ini, metode POST digunakan untuk memanggil API yang jalur permintaannya adalah string berikut:
/fc/test/invoke/[type] Contoh kode berikut memberikan contoh permintaan API:
POST http://test.alicloudapi.com/fc/test/invoke/test?param1=aaa¶m2=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"} Respons API
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: nilai header
{"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 menggunakan fungsi yang saya buat di Function Compute sebagai layanan backend API di API Gateway?
Saat Anda membuat API yang menggunakan Function Compute sebagai layanan backend, pastikan nama layanan dan nama fungsi yang Anda tentukan sama dengan nama layanan dan fungsi yang Anda buat di konsol Function Compute.
Bisakah API Gateway mengakses Function Compute melalui jaringan pribadi saat Function Compute digunakan sebagai layanan backend API?
Ya. Secara default, jika fungsi event digunakan sebagai layanan backend API dan API Gateway berada di wilayah yang sama dengan Function Compute, API Gateway mengakses Function Compute melalui jaringan internal.