Jika runtime bawaan di Function Compute tidak memenuhi kebutuhan bisnis Anda, gunakan runtime Custom Container untuk membuat fungsi. Panduan ini menjelaskan cara membuat fungsi Custom Container menggunakan konsol Function Compute atau Serverless Devs.
Catatan Penggunaan
Untuk membuat fungsi Custom Container di Function Compute, gunakan gambar dari Container Registry Alibaba Cloud yang berada di wilayah yang sama dengan fungsi dan milik akun yang sama. Jika menggunakan komputer berbasis ARM seperti Mac dengan chip Apple, tentukan platform kompilasi gambar sebagai linux/amd64. Contoh perintah: docker build --platform linux/amd64 -t $IMAGE_NAME ..
Prasyarat
Container Registry
Pastikan instance Container Registry telah dibuat. Untuk detail lebih lanjut, lihat Buat instance Container Registry Edisi Enterprise.
CatatanAnda dapat membuat instance Container Registry Edisi Enterprise atau Edisi Personal. Kami merekomendasikan Edisi Enterprise.
Edisi Personal ditujukan untuk pengembang individu dengan kuota gratis terbatas selama periode pratinjau publik. Tidak ada SLA atau kompensasi untuk edisi ini, dan penggunaannya tunduk pada batasan tertentu. Untuk informasi lebih lanjut tentang batasan tersebut, lihat Catatan Penggunaan.
Namespace telah dibuat. Untuk informasi lebih lanjut, lihat Buat namespace.
Repositori gambar telah dibuat. Untuk informasi lebih lanjut, lihat Buat repositori gambar.
Serverless Devs
Buat fungsi di konsol Function Compute
Langkah 1: Buat layanan dan konfigurasikan izin
Buat layanan di Kelola layanan
Untuk detail lebih lanjut, lihat Buat layanan.
Lampirkan kebijakan AliyunContainerRegistryReadOnlyAccess atau AliyunContainerRegistryFullAccess ke layanan.
Untuk detail lebih lanjut, lihat Berikan izin Function Compute untuk mengakses layanan Alibaba Cloud lainnya. Kebijakan-kebijakan ini memungkinkan Function Compute mendapatkan akun sementara untuk masuk ke instance default Container Registry dan mendorong gambar dari repositori pribadi Anda.
Langkah 2: Buat fungsi
Masuk ke konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.
Pada halaman Functions, klik Create Function.
Pada halaman Create Function, pilih Use Container Image, konfigurasikan parameter berikut sesuai kebutuhan bisnis Anda, lalu klik Create.
Basic Settings: Konfigurasikan informasi dasar fungsi, termasuk nama fungsi dan jenis penanganan.
Parameter
Deskripsi
Function Name
Masukkan nama untuk fungsi. Function Compute secara otomatis membuat nama untuk fungsi Anda jika Anda membiarkan parameter ini kosong.
Handler Type
Tentukan jenis permintaan yang diproses oleh fungsi. Permintaan tersebut dapat berupa permintaan acara atau permintaan HTTP. Nilai valid:
Event Handler: memicu eksekusi fungsi dengan menggunakan timer, memanggil operasi API, menggunakan SDK, atau menggunakan pemicu layanan Alibaba Cloud lainnya.
HTTP Handler: memicu eksekusi fungsi dengan mengirimkan permintaan HTTP atau membangun koneksi WebSocket. Untuk skenario web, kami sarankan Anda memilih Use Custom Runtime untuk membuat fungsi.
Image Configurations: Konfigurasikan gambar untuk fungsi.
Parameter
Deskripsi
Image Selection Mode
Pilih Use Sample Images atau gunakan gambar Anda sendiri untuk membuat fungsi.
Use Sample Image: Pilih gambar contoh bawaan dari Function Compute.
Use Container Registry Images: Gunakan gambar Container Registry. Klik Select a Container Registry image di bawah Container Image. Di panel Select Container Image, konfigurasikan parameter Container Image Instance dan Container Registry Repository. Temukan gambar yang ingin Anda gunakan dan klik Select di kolom Actions.
CatatanAnda tidak dapat menggunakan gambar publik yang dimiliki oleh akun lain dari Container Registry untuk membuat fungsi.
Untuk Container Registry Edisi Enterprise, Function Compute menggunakan tag gambar yang Anda pilih untuk membuat instance fungsi.
Jika Anda menggunakan gambar Container Registry Edisi Enterprise (Edisi Lanjutan atau Edisi Standar), kami sarankan Anda mengaktifkan Immutable untuk Image Version. Jika tidak, tag gambar mungkin diperbarui di tempat lain dan Function Compute menarik data gambar yang diperbarui untuk memulai instance fungsi. Untuk informasi lebih lanjut, lihat Konfigurasikan repositori agar immutable.
Jika Anda menggunakan gambar Container Registry Edisi Enterprise (Edisi Dasar) atau Container Registry Edisi Personal, Anda harus memperbarui fungsi berdasarkan informasi gambar di konsol Function Compute setelah Anda memperbarui tag gambar dengan nama yang sama di repositori gambar. Kemudian, Function Compute dapat memulai instance fungsi dengan gambar baru.
Startup Command
Tentukan perintah startup kontainer. Jika Anda tidak mengonfigurasi parameter ini, instruksi Entrypoint atau CMD dalam gambar digunakan.
Listening Port
Tentukan port tempat server HTTP yang diimplementasikan dalam gambar kontainer mendengarkan. Port default adalah 9000.
Advanced Settings: Konfigurasikan pengaturan lanjutan, seperti informasi instance dan periode timeout eksekusi.
Parameter
Deskripsi
GPU Acceleration
Tentukan apakah akan menggunakan instans yang dipercepat GPU berdasarkan kebutuhan bisnis Anda. Secara default, instans CPU, bukan instans yang dipercepat GPU, digunakan. Untuk informasi lebih lanjut, lihat Jenis instans. Untuk informasi tentang penagihan setiap jenis instans, lihat Ikhtisar penagihan. Nilai valid:
Enable GPU
Disable GPU
Specifications
Enable GPU:
Pilih nilai dari daftar drop-down GPU Type dan tentukan GPU Memory Size berdasarkan kebutuhan bisnis Anda. Function Compute secara otomatis mengisi bidang vCPU Capacity dan Memory Capacity berdasarkan ukuran memori GPU yang Anda pilih. Hanya kapasitas vCPU dan memori tertentu yang diizinkan untuk setiap ukuran GPU.
Disable GPU:
Konfigurasikan vCPU Capacity dan Memory Capacity berdasarkan kebutuhan bisnis Anda.
Untuk informasi tentang penagihan sumber daya, lihat Ikhtisar penagihan.
CatatanRasio spesifikasi vCPU terhadap kapasitas memori (dalam GB) harus berkisar antara 1:1 hingga 1:4.
Size of Temporary Disk
Pilih ukuran disk berdasarkan kebutuhan bisnis Anda. Function Compute menyediakan kapasitas disk gratis sebesar 512 MB. Untuk informasi lebih lanjut, lihat Ikhtisar penagihan.
Instance Concurrency
Tentukan konkurensi instans. Untuk informasi lebih lanjut, lihat Konfigurasikan konkurensi instans.
Execution Timeout Period
Tentukan periode timeout untuk eksekusi fungsi. Nilai default adalah 60 detik. Nilai maksimum adalah 86400 detik. Kami sarankan Anda mengatur parameter ini menjadi 600 detik.
Time Zone
Tentukan zona waktu fungsi. Setelah Anda memilih zona waktu, variabel lingkungan TZ secara otomatis ditambahkan ke fungsi. Nilai variabel tersebut adalah zona waktu yang Anda pilih.
Environment Variables: Konfigurasikan variabel lingkungan dalam runtime fungsi. Untuk detail lebih lanjut, lihat Variabel lingkungan.
Trigger Configurations: Konfigurasikan pemicu untuk pemanggilan fungsi. Untuk detail lebih lanjut, lihat Kelola pemicu.
Setelah fungsi dibuat, Anda dapat melihat dan memperbarui fungsi di daftar fungsi layanan.
Saat memperbarui fungsi, Anda dapat mengubah port listening yang ditentukan, tetapi tidak dapat menghapus atau menambahkan port lain. Jika port listening ditentukan saat pembuatan fungsi, port tersebut akan dipertahankan selama pembaruan jika tidak ada port baru yang ditentukan.
Buat fungsi menggunakan Serverless Devs
Gunakan Serverless Devs untuk membangun dan mendorong gambar kontainer serta menerapkan fungsi hanya dengan beberapa langkah.
Jalankan perintah berikut untuk menginisialisasi proyek. Masukkan alamat repositori gambar yang Anda buat di Container Registry sesuai petunjuk.
sudo s init start-fc-custom-container-event-nodejs14Keluaran berikut dikembalikan:
Serverless Awesome: https://github.com/Serverless-Devs/package-awesome Please input your project name (init dir) start-fc-custom-container-event-nodejs14 file decompression completed ____ _ _ ___ _ _ _ _____ ____ / _ \/ \ / \\ \/// \ /\/ \ /| / // _\ | / \|| | | | \ / | | ||| |\ || | __\| / | |-||| |_/\| | / / | \_/|| | \|| | | | \__ \_/ \|\____/\_//_/ \____/\_/ \| \_/ \____/ please select credential alias default Welcome to the Aliyun FC start application This application requires to open these services: FC : https://fc.console.alibabacloud.com/ ACR: https://cr.console.alibabacloud.com/ * Note: The actions information is declared in the s.yaml file: Run the sudo s build --use-docker --dockerfile ./code/Dockerfile command before the project is deployed. If you do not need to build the project, you can comment out this part. > Note: Before project deployment, replace the value of the image parameter in the s.yaml file with the address of the image repository in Container Registry. * The project is initialized. You can go to the project directory and run the s deploy command to deploy the project. Thanks for using Serverless-Devs You could [cd /test/test1/start-fc-custom-container-event-nodejs14] and enjoy your serverless journey! If you need help for this example, you can use [s -h] after you enter folder. Document Star: https://github.com/Serverless-Devs/Serverless-Devs Do you want to deploy the project immediately? NoJalankan perintah berikut untuk masuk ke direktori proyek:
cd start-fc-custom-container-event-nodejs14Edit file
s.yaml. Untuk informasi lebih lanjut tentang parameter dalam file .yaml, lihat Sintaks YAML dan manajemen izin.Jalankan perintah berikut untuk menerapkan proyek:
sudo s deployKeluaran berikut dikembalikan:
[2021-12-15 07:54:30] [INFO] [S-CLI] - Start ... [2021-12-15 07:54:30] [INFO] [S-CLI] - Start the pre-action [2021-12-15 07:54:30] [INFO] [S-CLI] - Action: s build --use-docker --dockerfile ./code/Dockerfile [2021-12-15 07:54:31] [INFO] [S-CLI] - Start ... [2021-12-15 07:54:32] [INFO] [FC-BUILD] - Build artifact start... [2021-12-15 07:54:32] [INFO] [FC-BUILD] - Use docker for building. [2021-12-15 07:54:32] [INFO] [FC-BUILD] - Building image... Sending build context to Docker daemon 5.12kB Step 1/7 : FROM node:14.5.0-alpine3.11 ---> 5d97b3d11dc1 ...... Step 7/7 : ENTRYPOINT [ "node", "server.js" ] ---> Using cache ---> a5ef1c015e7e Successfully built a5ef1c015e7e Successfully tagged registry.cn-hangzhou.aliyuncs.comSuccessfully tagged registry.cn-hangzhou.aliyuncs.com/fc-example/test:nginx SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories. Build image(registry.cn-hangzhou.aliyuncs.com/fc-example/test:nginx) successfully [2021-12-15 07:54:33] [INFO] [FC-BUILD] - Build artifact successfully. Tips for next step ====================== * Invoke Event Function: s local invoke * Invoke Http Function: s local start * Deploy Resources: s deploy End of method: build [2021-12-15 07:54:33] [INFO] [S-CLI] - End the pre-action [2021-12-15 07:54:34] [INFO] [FC-DEPLOY] - Using region: cn-hangzhou [2021-12-15 07:54:34] [INFO] [FC-DEPLOY] - Using access alias: default [2021-12-15 07:54:34] [INFO] [FC-DEPLOY] - Using accessKeyID: yourAccessKeyID [2021-12-15 07:54:34] [INFO] [FC-DEPLOY] - Using accessKeySecret: yourAccessKeySecret [2021-12-15 07:54:34] [INFO] [FC-DEPLOY] - Checking Service hello-world-service exists [2021-12-15 07:54:35] [INFO] [FC-DEPLOY] - Setting role: AliyunFCDefaultRole [2021-12-15 07:54:35] [INFO] [RAM] - Checking Role AliyunFCDefaultRole exists [2021-12-15 07:54:35] [INFO] [RAM] - Updating role: AliyunFCDefaultRole [2021-12-15 07:54:35] [INFO] [RAM] - Checking Plicy AliyunFCDefaultRolePolicy exists [2021-12-15 07:54:35] [INFO] [FC-DEPLOY] - Checking Function nodejs14-event-function exists [2021-12-15 07:54:36] [INFO] [FC-DEPLOY] - Using image registry: registry.cn-hangzhou.aliyuncs.com [2021-12-15 07:54:36] [INFO] [FC-DEPLOY] - Try to use a temporary token for docker login Login to registry: registry.cn-hangzhou.aliyuncs.com with user: cr_temp_user Pushing docker image: registry.cn-hangzhou.aliyuncs.com/fc-example/test:nginx... The push refers to repository [registry.cn-hangzhou.aliyuncs.com/fc-example/test] cdf38e7753b7: Layer already exists 43128f71725b: Layer already exists 0fb36a16ab83: Layer already exists dd966b9fd474: Layer already exists a1915d7a1111: Layer already exists c4491b3ee709: Layer already exists 9fb10d900487: Layer already exists 3e207b409db3: Layer already exists nginx: digest: sha256:02b69157def85ceb72f32cb1c5845d00e1d8df19caf6eaf720a9bc77bb57db76 size: 1991 √ Make service hello-world-service success. √ Make function hello-world-service/nodejs14-event-function success. [2021-12-15 07:54:39] [INFO] [FC-DEPLOY] - Checking Service hello-world-service exists [2021-12-15 07:54:39] [INFO] [FC-DEPLOY] - Checking Function nodejs14-event-function exists There is auto config in the service: hello-world-service Tips for next step ====================== * Display information of the deployed resource: s info * Display metrics: s metrics * Display logs: s logs * Invoke remote function: s invoke * Remove Service: s remove service * Remove Function: s remove function * Remove Trigger: s remove trigger * Remove CustomDomain: s remove domain helloworld: region: cn-hangzhou service: name: hello-world-service function: name: nodejs14-event-function runtime: custom-container handler: not-used memorySize: 256 timeout: 60Jalankan perintah berikut untuk men-debug fungsi:
sudo s invoke -e "{\"key\":\"val\"}"Keluaran berikut dikembalikan:
[2021-12-15 08:00:17] [INFO] [S-CLI] - Start ... ========= FC invoke Logs begin ========= FC Invoke Start RequestId: 768945c8-f92d-428e-89c2-ecd50883**** {"key":"val"} FC Invoke End RequestId: 768945c8-f92d-428e-89c2-ecd50883**** Duration: 3.05 ms, Billed Duration: 4 ms, Memory Size: 256 MB, Max Memory Used: 10.77 MB ========= FC invoke Logs end ========= FC Invoke Result: OK End of method: invoke
Referensi
Untuk menggunakan instans yang dipercepat GPU, Anda harus membuat fungsi Custom Container. Untuk informasi lebih lanjut tentang instans yang dipercepat GPU, lihat Jenis instans dan mode penggunaan.
Dibandingkan dengan paket kode, gambar kontainer sering kali memerlukan waktu lebih lama untuk mengunduh dan dekompresi karena mencakup lingkungan runtime yang diperlukan. Untuk informasi tentang cara mengurangi latensi ini, lihat Praktik terbaik untuk mitigasi cold start.
Anda juga dapat memanggil API Function Compute untuk membuat fungsi. Untuk informasi lebih lanjut, lihat CreateFunction.
Untuk informasi tentang skenario umum dan perbedaan antara runtime bawaan, runtime kustom, dan runtime Custom Container, lihat Pemilihan runtime fungsi.