Function Compute mendukung pemicu HTTP. Anda dapat menggunakan permintaan HTTP untuk memanggil fungsi yang dikonfigurasi dengan pemicu HTTP. Fungsi ini berfungsi seperti server web, menerima permintaan HTTP dan mengembalikan respons kepada pemanggil. Topik ini menjelaskan cara mengonfigurasi pemicu HTTP untuk suatu fungsi dan memanggilnya menggunakan permintaan HTTP di konsol Function Compute.
Prasyarat
Layanan telah dibuat. Untuk informasi lebih lanjut, lihat Buat Layanan.
Langkah 1: Buat pemicu
Pemicu HTTP berbeda dari jenis pemicu lainnya. Setelah membuat fungsi HTTP, sistem secara otomatis membuat pemicu HTTP untuk fungsi tersebut. Untuk jenis pemicu lainnya, Anda harus membuat pemicu secara manual sesuai sumber pemicu.
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Di halaman Services, klik layanan yang diinginkan.
Di halaman Functions, klik Create Function.
Di halaman Create Function, pilih Use Built-in Runtime dan konfigurasikan parameter untuk membuat fungsi sesuai kebutuhan bisnis Anda.
Tabel berikut menjelaskan parameter yang perlu dikonfigurasi. Pertahankan nilai default untuk parameter lainnya. Untuk informasi lebih lanjut, lihat Buat Fungsi.
Parameter
Deskripsi
Basic Settings
Function Name
Tentukan nama fungsi.
Handler Type
Pilih HTTP Handler.
(Opsional) Trigger Configurations
Name
Tentukan nama pemicu.
Request Method
Tentukan metode HTTP yang dapat digunakan untuk memicu pemicu.
Disable Internet URL
Secara default, parameter ini disetel ke No dan domain publik diperbolehkan untuk mengakses pemicu.
Jika Anda memilih Yes, tidak ada domain publik default yang tersedia untuk pemicu. Dalam hal ini, pesan kesalahan
access denied due to function internet URL is disableakan dikembalikan jika Anda menggunakan domain publik untuk memanggil fungsi. Namun, jika Anda menggunakan domain kustom, fungsi dapat dipanggil seperti yang diharapkan.Authentication Method
Metode yang digunakan untuk mengotentikasi permintaan HTTP. Nilai valid:
No Authentication: Function Compute tidak mengotentikasi permintaan HTTP dan mendukung akses anonim ke fungsi. Semua pengguna dapat memanggil fungsi menggunakan permintaan HTTP.
Signature Authentication: Otentikasi identitas diperlukan untuk permintaan HTTP. Untuk informasi lebih lanjut tentang kode contoh untuk otentikasi tanda tangan, lihat Otentikasi tanda tangan.
JWT Authentication: Permintaan HTTP harus diautentikasi menggunakan JSON Web Token (JWT). Untuk informasi lebih lanjut, lihat Konfigurasikan otentikasi JWT untuk pemicu HTTP.
Anda dapat memodifikasi konfigurasi pemicu HTTP yang telah dibuat sesuai kebutuhan bisnis Anda. Sebagai contoh, Anda dapat memodifikasi parameter berikut dari pemicu: Version or Alias, Request Method, Disable Internet URL, dan Authentication Method.
Langkah 2: Tulis dan terapkan kode
Setelah pemicu HTTP dibuat, Anda dapat menulis kode untuk fungsi tersebut.
Di halaman detail fungsi, klik tab Code, masukkan kode fungsi di editor kode, lalu klik Deploy.
Kode contoh:
var getRawBody = require('raw-body')
module.exports.handler = function (request, response, context) {
// dapatkan info permintaan
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,
}
// Anda dapat menangani logika Anda sendiri di sini
// atur respons
var respBody = new Buffer.from(JSON.stringify(params));
// var respBody = new Buffer( )
response.setStatusCode(200)
response.setHeader('content-type', 'application/json')
response.send(respBody)
})
};# -*- coding: utf-8 -*-
import json
HELLO_WORLD = b"Hello world!\n"
def handler(environ, start_response):
request_uri = environ['fc.request_uri']
response_body = {
'uri':environ['fc.request_uri'],
'method':environ['REQUEST_METHOD']
}
# lakukan sesuatu di sini
status = '200 OK'
response_headers = [('Content-type', 'text/json')]
start_response(status, response_headers)
# Python2
return [json.dumps(response_body)]
# Tips Python3: Saat menggunakan Python3, tipe str dan bytes tidak dapat dicampur.
# Gunakan str.encode() untuk mengubah str menjadi bytes
# return [json.dumps(response_body).encode()]<?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,
array(
"custom_header1" => "v1",
"custom_header2" => ["v2", "v3"],
),
"hello world"
);
}Untuk pemanggilan asinkron, konfigurasikan callback hasil untuk pemanggilan asinkron dalam jejak fungsi. Untuk informasi lebih lanjut, lihat Callback Hasil.
Langkah 3: Uji fungsi
Metode 1: Uji fungsi di Konsol Function Compute
Pemanggilan Sinkron
Di halaman detail fungsi, klik tab Code dan klik Test Function.
Pemanggilan Asinkron
Di halaman detail fungsi, klik tab Test Function, pilih I want to make the call asynchronously, lalu klik Test Function.
Metode 2: Uji fungsi menggunakan browser
Masukkan URL pemicu HTTP di bilah alamat browser. Tekan tombol Enter untuk mengeksekusi fungsi.
Setelah pemicu dieksekusi, browser mengembalikan hasil eksekusi.
Anda dapat menggunakan salah satu metode berikut untuk mendapatkan URL pemicu HTTP:
Untuk pemicu HTTP baru, kami sarankan Anda menggunakan subdomain yang ditetapkan oleh Function Compute sebagai URL pemicu HTTP.
Format subdomain:
<subdomain>.<region_id>.fcapp.run/[action?queries]Kode contoh:
funcname-svcname-khljsjksld.cn-shanghai.fcapp.run/action?hello=worldCatatanAnda juga dapat merakit URL untuk pemicu HTTP yang ada berdasarkan aturan perakitan. Jika Anda menggunakan subdomain yang ditetapkan sebagai URL pemicu HTTP untuk menguji fungsi, ini dapat mencegah kesalahan
404dan penggabungan nama layanan Function Compute dalam kode fungsi. Ini dapat meningkatkan portabilitas kode. Untuk informasi lebih lanjut tentang cara menangani kesalahan404, lihat Apa yang harus saya lakukan jika kesalahan 404 terjadi saat saya menggunakan browser atau alat cURL untuk mengakses fungsi?Untuk pemicu HTTP yang ada, Anda dapat menghasilkan URL pemicu HTTP berdasarkan aturan perakitan.
Aturan perakitan:
<account_id>.<region_id>.fc.aliyuncs.com/<version>/proxy/<serviceName>/<functionName>/[action?queries]Kode contoh:
164901546557****.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/serviceName/functionName/action?hello=worldDeskripsi parameter:
Parameter
Deskripsi
account_id
ID akun Alibaba Cloud.
Anda dapat memperoleh ID akun Alibaba Cloud Anda di halaman Pengaturan Keamanan di Konsol Manajemen Alibaba Cloud. Jika Anda masuk sebagai Pengguna Resource Access Management (RAM), arahkan penunjuk ke foto profil Anda di sudut kanan atas konsol untuk memperoleh ID akun Alibaba Cloud Anda.
region_id
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: Gunakan cURL untuk menguji fungsi
Pemanggilan Sinkron
Jalankan perintah berikut. Setelah perintah dieksekusi, hasilnya dikembalikan.
curl -v https://http-***.cn-shenzhen.fcapp.run/$pathPemanggilan Asinkron
Jalankan perintah berikut. Output perintah menunjukkan apakah Function Compute menerima permintaan pemanggilan asinkron. Jika kode status
202dikembalikan, permintaan pemanggilan asinkron berhasil. Jika kode status lain dikembalikan, terjadi kesalahan selama pemanggilan asinkron. Untuk informasi lebih lanjut tentang kode status, lihat Pemecahan Masalah.curl -v -H "X-Fc-Invocation-Type: Async" https://http-***.cn-shenzhen.fcapp.run/$path
(Opsional) Gunakan API Gateway untuk melindungi fungsi HTTP
Secara default, Function Compute tidak mengotentikasi permintaan HTTP dan mendukung akses anonim ke fungsi HTTP. Siapa pun dapat mengirim permintaan HTTP untuk memanggil fungsi HTTP. Untuk mencegah pemborosan sumber daya dan risiko keamanan yang disebabkan oleh akses anonim, Anda dapat menghubungkan fungsi HTTP ke API Gateway sambil mengaktifkan otentikasi identitas. Anda dapat menggunakan plugin kontrol akses berbasis IP, plugin otentikasi JWT, atau plugin otentikasi dasar dari API Gateway untuk melindungi fungsi HTTP Anda.
Di Function Compute console temukan fungsi HTTP yang ingin Anda kelola. Di halaman detail fungsi, klik tab Triggers, lalu edit pemicu HTTP. Di kotak dialog yang muncul, atur Authentication ke Yes.
Masuk ke Konsol API Gateway dan beralihlah ke wilayah tempat fungsi HTTP berada.
Buat grup. Untuk informasi lebih lanjut, lihat bagian Buat Grup API dari topik "Buat API dengan layanan backend tipe HTTP".
Arahkan domain Anda ke domain tingkat kedua yang disediakan oleh API Gateway menggunakan Canonical Name (CNAME). Untuk informasi lebih lanjut, lihat Tambahkan Rekaman CNAME.
Buat API.
Item berikut menjelaskan cara mengonfigurasi parameter utama. Pertahankan nilai default atau konfigurasikan nilai kustom untuk parameter lainnya sesuai kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Buat API.
Security Authentication: Pilih No Authentication. Dalam operasi berikutnya, plugin digunakan untuk otentikasi.
Request Path: Masukkan direktori root / dan pilih Match All Subpaths.
HTTP Method: Pilih ANY.
Request Mode: Pilih Pass-through.
Backend Service Type: Pilih Function Compute.
Function Type: Pilih HTTP Function.
Trigger Path: Pilih endpoint internal fungsi HTTP di Function Compute.
ContentType: Pilih Pass-through Client Content-type Header.
Publikasikan API. Temukan API yang Anda buat, klik Publish di kolom Actions, pilih lingkungan online, lalu klik Publish.
Buat plugin dengan tipe Backend Signature. Atur
keydanvaluekeID AccessKeydanRahasia AccessKeydari akun Alibaba Cloud Anda. Kemudian, ikat plugin tersebut ke API yang telah Anda buat. Untuk informasi lebih lanjut, lihat Ikhtisar.
Setelah Anda menyelesaikan langkah-langkah sebelumnya, Anda dapat mengakses fungsi HTTP menggunakan domain Anda sendiri. Anda juga dapat membuat plugin berikut dan mengikatnya ke API Anda untuk melindungi fungsi HTTP Anda.
Pemecahan Masalah
Mengapa saya tidak dapat mengeksekusi fungsi HTTP?
Untuk pemicu baru, cache memerlukan waktu sekitar 10 detik untuk diperbarui. Anda dapat mencoba lagi nanti.
Anda dapat memeriksa apakah handler yang Anda tentukan untuk fungsi Anda valid. Handler untuk fungsi HTTP berbeda dari handler untuk fungsi biasa. Untuk informasi lebih lanjut tentang fungsi HTTP dalam berbagai bahasa, lihat topik berikut:
Mengapa saya tidak dapat menghentikan eksekusi fungsi?
Anda dapat memeriksa apakah fungsi yang digunakan untuk mengirim respons telah dipanggil.
Untuk runtime Node.js, Anda harus memanggil fungsi response.send().
Untuk runtime Python, Anda harus memanggil fungsi return.
Untuk runtime PHP, Anda harus memanggil fungsi return new Response().
Untuk runtime Java, Anda harus memanggil fungsi HttpServletResponse.
Untuk runtime C#, Anda harus memanggil fungsi return.
Untuk runtime kustom, Anda harus memanggil fungsi yang digunakan untuk mengirim respons sesuai dengan bahasa pemrograman.
Pemecahan Masalah
Kesalahan berikut mungkin terjadi saat Anda mengirim permintaan untuk memanggil fungsi:
Kesalahan Permintaan: Kesalahan permintaan terjadi ketika permintaan tidak memenuhi persyaratan tertentu. Dalam hal ini, kode status HTTP 4xx dikembalikan dalam respons.
Kesalahan Fungsi: Kesalahan fungsi terjadi ketika kode fungsi tidak valid. Dalam hal ini, kode status HTTP 5xx dikembalikan.
Tabel berikut menjelaskan skenario di mana kesalahan permintaan dan kesalahan fungsi mungkin terjadi.
Jenis kesalahan | X-Fc-Error-Type | Kode status HTTP | Penyebab | Dapat Ditagih |
Kesalahan permintaan | FcCommonError | 400 | Permintaan Anda melebihi batas permintaan. Untuk informasi lebih lanjut, lihat Ikhtisar. | Tidak |
FcCommonError | 400 | Permintaan untuk fungsi yang memerlukan otentikasi identitas tidak berisi tanggal atau informasi otorisasi. | Tidak | |
FcCommonError | 403 | Tanda tangan permintaan untuk fungsi yang memerlukan otentikasi identitas tidak valid, yang menunjukkan bahwa informasi otorisasi tidak valid. Tanggal digunakan untuk menghitung tanda tangan, dan tanda tangan hanya berlaku selama 15 menit. Saat Anda menggunakan pemicu HTTP yang memerlukan otentikasi akses, tanda tangan menjadi tidak valid jika informasi tanggal di header permintaan telah dibuat selama 15 menit. | Tidak | |
FcCommonError | 403 | Permintaan Anda dikirim menggunakan metode yang tidak dikonfigurasikan di pemicu HTTP. Sebagai contoh, jika Anda mengirim permintaan HTTP menggunakan metode POST, tetapi metode GET, bukan metode POST, dikonfigurasikan di pemicu HTTP, kesalahan ini terjadi. | Tidak | |
FcCommonError | 404 | Permintaan HTTP dikirim ke fungsi yang tidak memiliki pemicu HTTP yang dikonfigurasi. | Tidak | |
Pembatasan lalu lintas pengguna | FcCommonError | 429 | Lalu lintas Anda dibatasi. Anda dapat mengurangi permintaan konkuren atau hubungi tim Function Compute untuk meningkatkan konkurensi Anda. | Tidak |
Kesalahan fungsi | UnhandledInvocationError | 502 | Respons fungsi melebihi batas respons HTTP. Untuk informasi lebih lanjut, lihat Ikhtisar. | Ya |
UnhandledInvocationError | 502 | Kode fungsi mengandung kesalahan sintaksis atau pengecualian. | Ya | |
UnhandledInvocationError | 502 | Permintaan HTTP dikirim ke fungsi yang tidak menggunakan handler HTTP. | Ya | |
Kesalahan sistem terjadi. | FcCommonError | 500 | Kesalahan sistem terjadi di Function Compute. Coba lagi. | Tidak |
Pembatasan lalu lintas sistem | FcCommonError | 503 | Pembatasan sistem diaktifkan untuk Function Compute. Anda dapat mencoba lagi dalam mode eksponensial backoff. | Tidak |
Jika masalah berlanjut, bergabunglah dengan grup pengguna DingTalk (ID: 11721331) dan hubungi dukungan teknis Function Compute.
Informasi lebih lanjut
Selain Konsol Function Compute, Anda dapat mengonfigurasi pemicu menggunakan metode berikut:
Gunakan Serverless Devs untuk mengonfigurasi pemicu. Untuk informasi lebih lanjut, lihat Serverless Devs.
Gunakan SDK untuk mengonfigurasi pemicu. Untuk informasi lebih lanjut, lihat SDK.
Untuk memodifikasi atau menghapus pemicu yang ada, lihat Kelola Pemicu.