Pemicu HTTP memungkinkan Anda memanggil fungsi Function Compute menggunakan permintaan HTTP standar. Fungsi tersebut bertindak sebagai server web: menerima permintaan HTTP dan mengembalikan respons kepada pemanggil.
Topik ini memandu Anda melalui proses pembuatan pemicu HTTP, penyebaran kode penanganan, dan pemanggilan fungsi menggunakan Konsol Function Compute.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Membuat layanan di Function Compute. Untuk informasi lebih lanjut, lihat Buat layanan.
Cara kerja
Saat pemanggil mengirim permintaan HTTP ke URL pemicu, Function Compute mengarahkan permintaan tersebut ke penanganan fungsi Anda. Penanganan memproses permintaan dan langsung menulis respons HTTP — tidak ada muatan event perantara. Hal ini berbeda dengan jenis pemicu lainnya yang meneruskan data event terstruktur ke fungsi.
Perbedaan utama dari jenis pemicu lainnya: saat Anda membuat fungsi HTTP, sistem secara otomatis membuat pemicu HTTP untuknya. Untuk semua jenis pemicu lainnya, Anda harus membuat pemicu secara manual.
Langkah 1: Buat fungsi HTTP
Login ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan target.
Pada halaman Functions, klik Create Function.
Pada halaman Create Function, pilih Use Built-in Runtime dan konfigurasikan parameter sesuai tabel berikut. Gunakan nilai default untuk semua parameter lainnya. Untuk informasi lebih lanjut, lihat Buat fungsi.
Basic settings
| Parameter | Deskripsi |
|---|---|
| Function Name | Masukkan nama untuk fungsi. |
| Handler Type | Pilih HTTP Handler. |
(Optional) Trigger configurations
| Parameter | Deskripsi |
|---|---|
| Name | Masukkan nama untuk pemicu. |
| Request Method | Pilih metode HTTP yang dapat memanggil pemicu ini. |
| Disable Internet URL | Default: No — pemicu dapat diakses melalui nama domain publik. Atur ke Yes untuk menonaktifkan akses publik. Jika pemanggil menggunakan nama domain publik saat akses internet dinonaktifkan, Function Compute mengembalikan: access denied due to function internet URL is disable. Nama domain kustom tetap berfungsi terlepas dari pengaturan ini. |
| Authentication Method | Lihat Pilih metode autentikasi di bawah. |
Pilih metode autentikasi
| Metode | Kapan digunakan |
|---|---|
| No Authentication | Pemicu mengizinkan akses anonim. Setiap pemanggil dapat memanggil fungsi tanpa kredensial. |
| Signature Authentication | Pemanggil harus menandatangani permintaan menggunakan AccessKey Anda. Signature berlaku selama 15 menit. Untuk contoh kode penandatanganan, lihat Signature authentication. |
| JWT Authentication | Pemanggil harus menyajikan Token Web JSON (JWT) yang valid. Untuk petunjuk penyiapan, lihat Konfigurasikan autentikasi JWT untuk pemicu HTTP. |
Setelah pemicu dibuat, Anda dapat mengedit pengaturan berikut kapan saja: Version or Alias, Request Method, Disable Internet URL, dan Authentication Method.
Langkah 2: Sebarkan kode penanganan
Pada halaman detail fungsi, klik tab Code. Masukkan kode fungsi Anda di editor, lalu klik Deploy.
Contoh berikut menunjukkan penanganan minimal dan penanganan lengkap untuk penguraian permintaan pada setiap runtime yang didukung.
Node.js
Penanganan minimal — mengembalikan respons tetap:
module.exports.handler = function (request, response, context) {
response.setStatusCode(200);
response.setHeader('content-type', 'text/plain');
response.send('Hello from Function Compute!');
};Penanganan lengkap — membaca dan menampilkan kembali detail permintaan:
var getRawBody = require('raw-body');
module.exports.handler = function (request, response, context) {
getRawBody(request, function (err, data) {
var params = {
path: request.path,
queries: request.queries,
headers: request.headers,
method: request.method,
body: data,
url: request.url,
clientIP: request.clientIP,
};
var respBody = new Buffer.from(JSON.stringify(params));
response.setStatusCode(200);
response.setHeader('content-type', 'application/json');
response.send(respBody);
});
};Panggil response.send() untuk menghentikan eksekusi. Tanpa itu, fungsi akan timeout.Python
# -*- coding: utf-8 -*-
import json
def handler(environ, start_response):
response_body = {
'uri': environ['fc.request_uri'],
'method': environ['REQUEST_METHOD'],
}
status = '200 OK'
response_headers = [('Content-type', 'text/json')]
start_response(status, response_headers)
# Python 2
return [json.dumps(response_body)]
# Python 3: Saat menggunakan Python 3, tipe str dan bytes tidak dapat dicampur.
# Gunakan str.encode() untuk mengubah str menjadi bytes.
# return [json.dumps(response_body).encode()]Kembalikan nilai dari penanganan untuk mengirim respons. Tanpa nilai kembali, fungsi tidak akan berhenti.
PHP
<?php
use RingCentral\Psr7\Response;
function handler($request, $context): Response {
/*
$body = $request->getBody()->getContents();
$queries = $request->getQueryParams();
$method = $request->getMethod();
$headers = $request->getHeaders();
$path = $request->getAttribute("path");
$requestURI = $request->getAttribute("requestURI");
$clientIP = $request->getAttribute("clientIP");
*/
return new Response(
200,
[
'custom_header1' => 'v1',
'custom_header2' => ['v2', 'v3'],
],
'hello world'
);
}Kembalikan objek Response untuk menghentikan eksekusi.Untuk pemanggilan asinkron, konfigurasikan callback hasil dalam jejak fungsi. Untuk informasi lebih lanjut, lihat Result callback.
Langkah 3: Uji fungsi
Metode 1: Konsol Function Compute
Pemanggilan sinkron — pada halaman detail fungsi, klik tab Code, lalu klik Test Function.
Pemanggilan asinkron — pada halaman detail fungsi, klik tab Test Function, pilih I want to make the call asynchronously, lalu klik Test Function.
Metode 2: Browser
Masukkan URL pemicu di bilah alamat browser dan tekan Enter. Browser akan menampilkan respons fungsi.
Pemicu baru — gunakan subdomain yang ditetapkan (disarankan)
Subdomain mencegah error 404 yang disebabkan oleh keterikatan nama layanan dalam kode fungsi dan meningkatkan portabilitas.
Format subdomain:
<subdomain>.<region_id>.fcapp.run/[action?queries]Contoh:
funcname-svcname-khljsjksld.cn-shanghai.fcapp.run/action?hello=worldPemicu yang sudah ada — susun URL secara manual
Aturan penyusunan:
<account_id>.<region_id>.fc.aliyuncs.com/<version>/proxy/<serviceName>/<functionName>/[action?queries]Contoh:
164901546557****.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/serviceName/functionName/action?hello=world| Parameter | Deskripsi |
|---|---|
account_id | ID akun Alibaba Cloud Anda. Temukan di halaman Security Settings. Pengguna RAM: arahkan kursor ke gambar profil di pojok kanan atas konsol untuk melihat ID akun. |
region_id | Wilayah tempat Function Compute berada. |
version | Versi API Function Compute. |
serviceName | Nama layanan. |
functionName | Nama fungsi. |
action | Path permintaan kustom. |
queries | Parameter query. |
Metode 3: cURL
Pemanggilan sinkron:
curl -v https://http-***.cn-shenzhen.fcapp.run/$pathPemanggilan asinkron:
curl -v -H "X-Fc-Invocation-Type: Async" https://http-***.cn-shenzhen.fcapp.run/$pathKode status 202 mengonfirmasi permintaan diterima. Kode status lainnya menunjukkan adanya error — lihat bagian Pemecahan masalah di bawah.
(Opsional) Lindungi fungsi HTTP dengan API Gateway
Secara default, pemicu HTTP mengizinkan akses anonim. Untuk menambahkan autentikasi dan kontrol akses tanpa mengubah kode fungsi, hubungkan fungsi ke API Gateway dan gunakan sistem plugin-nya.
Di Konsol Function Compute, buka halaman detail fungsi, lalu klik tab Triggers dan ubah pemicu HTTP. Pada kotak dialog yang muncul, atur Authentication ke Yes.
Login ke Konsol API Gateway dan beralih ke wilayah tempat fungsi berada.
Buat grup API. Untuk detailnya, lihat Buat API dengan layanan backend tipe HTTP.
Arahkan nama domain kustom Anda ke domain tingkat kedua API Gateway menggunakan rekaman Canonical Name (CNAME). Untuk detailnya, lihat Tambahkan rekaman CNAME.
Buat API dengan pengaturan kunci berikut. Gunakan nilai default untuk semua parameter lainnya. Untuk informasi lebih lanjut, lihat Buat API.
Parameter Nilai Security Authentication No Authentication (plugin menangani autentikasi pada langkah selanjutnya) Request Path /— pilih Match All SubpathsHTTP Method ANY Request Mode Pass-through Backend Service Type Function Compute Function Type HTTP Function Trigger Path Titik akhir internal fungsi HTTP di Function Compute ContentType Pass-through Client Content-type Header Publikasikan API. Temukan API tersebut, klik Publish di kolom Actions, pilih lingkungan online, lalu klik Publish.
Buat plugin Backend Signature. Atur
keykeAccessKey IDdanvaluekeAccessKey secretakun Alibaba Cloud Anda. Bind plugin ke API. Untuk detailnya, lihat Ikhtisar.
Setelah menyelesaikan langkah-langkah ini, fungsi Anda dapat diakses melalui nama domain kustom Anda. Untuk menambahkan kontrol akses lebih lanjut, buat dan bind plugin berikut:
Pemecahan masalah
Fungsi tidak dapat dipanggil
Pemicu baru belum siap — konfigurasi pemicu baru memerlukan waktu sekitar 10 detik untuk disebarluaskan. Tunggu dan coba lagi.
Jenis penanganan tidak valid — signature penanganan HTTP berbeda dari penanganan event biasa. Verifikasi implementasi penanganan Anda sesuai panduan spesifik runtime:
Fungsi tidak berhenti
Periksa apakah penanganan Anda memanggil fungsi pengiriman respons yang benar untuk runtime tersebut:
| Runtime | Panggilan yang diperlukan |
|---|---|
| Node.js | response.send() |
| Python | return |
| PHP | return new Response() |
| Java | HttpServletResponse |
| C# | return |
| Runtime kustom | Fungsi respons spesifik bahasa |
Kode error
Tabel berikut mencantumkan error yang dikembalikan selama pemanggilan pemicu HTTP.
| Jenis error | X-Fc-Error-Type | Status HTTP | Penyebab | Ditagih |
|---|---|---|---|---|
| Error permintaan | FcCommonError | 400 | Permintaan melebihi batas. Lihat Ikhtisar. | Tidak |
| Error permintaan | FcCommonError | 400 | Permintaan ke fungsi yang memerlukan autentikasi tidak memiliki header date atau authorization. | Tidak |
| Error permintaan | FcCommonError | 403 | Signature tidak valid. Signature berlaku selama 15 menit; buat ulang jika header date lebih dari 15 menit. | Tidak |
| Error permintaan | FcCommonError | 403 | Permintaan menggunakan metode HTTP yang tidak dikonfigurasi di pemicu. | Tidak |
| Error permintaan | FcCommonError | 404 | Tidak ada pemicu HTTP yang dikonfigurasi untuk fungsi tersebut. | Tidak |
| Pembatasan kecepatan traffic pengguna | FcCommonError | 429 | Batas permintaan konkuren tercapai. Kurangi konkurensi atau hubungi dukungan Function Compute untuk menambah kuota Anda. | Tidak |
| Error fungsi | UnhandledInvocationError | 502 | Respons melebihi batas ukuran respons HTTP. Lihat Ikhtisar. | Ya |
| Error fungsi | UnhandledInvocationError | 502 | Kode fungsi memiliki error sintaksis atau melempar exception yang tidak ditangani. | Ya |
| Error fungsi | UnhandledInvocationError | 502 | Permintaan HTTP dikirim ke fungsi yang menggunakan penanganan event, bukan penanganan HTTP. | Ya |
| Error sistem | FcCommonError | 500 | Error internal Function Compute. Coba ulang permintaan. | Tidak |
| Pembatasan kecepatan sistem | FcCommonError | 503 | Pembatasan kecepatan tingkat sistem. Coba ulang dengan exponential backoff. | Tidak |
Jika masalah berlanjut, bergabunglah dengan grup pengguna DingTalk (ID: 11721331) untuk menghubungi dukungan teknis Function Compute.
Langkah selanjutnya
Konfigurasikan pemicu menggunakan metode lain:
Serverless Devs — manajemen pemicu berbasis CLI
SDK — konfigurasi pemicu secara terprogram
Untuk memodifikasi atau menghapus pemicu yang sudah ada, lihat Kelola pemicu.