Jika runtime bawaan di Function Compute tidak memenuhi kebutuhan bisnis Anda, Anda dapat membuat fungsi kontainer kustom. Topik ini menjelaskan cara membuat fungsi kontainer kustom di Konsol Function Compute atau dengan menggunakan tool Serverless Devs.
Catatan penggunaan
Untuk membuat fungsi kontainer kustom di Function Compute, Anda harus menggunakan gambar dari Alibaba Cloud Container Registry yang berada di wilayah dan Akun Alibaba Cloud yang sama. Jika Anda membuat gambar pada komputer dengan Apple silicon atau arsitektur berbasis ARM lainnya, Anda harus menentukan platform build sebagai Linux/Amd64. Contoh:
docker build --platform linux/amd64 -t $IMAGE_NAME ..Function Compute melakukan resolusi nama domain untuk gambar Alibaba Cloud Container Registry Edisi Perusahaan menggunakan resolusi default VPC yang dikonfigurasi atau alamat IP akses yang secara otomatis diselesaikan oleh Alibaba Cloud DNS PrivateZone.
Skenario 1: Jika indikator Default Resolution tidak ditampilkan untuk alamat IP apa pun di halaman Access Control instans, semua alamat IP dalam daftar Access IP secara otomatis diselesaikan oleh Alibaba Cloud DNS PrivateZone. Dalam kasus ini, konfigurasi VPC apa pun dapat digunakan.

Skenario 2: Jika, di halaman Access Control instans ACR Edisi Perusahaan, daftar Access IP berisi alamat IP yang ditandai dengan Default Resolution—yaitu alamat IP resolusi default dari suatu VPC—Anda hanya dapat memilih VPC pertama, seperti yang ditunjukkan pada gambar berikut.

Saat menggunakan instans Edisi Perusahaan, Anda hanya dapat memilih gambar non-dipercepat. Setiap kali Anda memperbarui konfigurasi gambar fungsi, sistem akan menghasilkan gambar dipercepat baru berdasarkan gambar asli terbaru yang Anda pilih, menimpa gambar dipercepat yang ada sebelumnya. Jangan menghapus gambar asli atau gambar dipercepat, karena pemanggilan fungsi akan gagal.
Pastikan Anda segera memperbarui fungsi jika gambar yang dikonfigurasi untuknya berubah. Jika tidak, pemanggilan fungsi akan gagal.
Pastikan gambar asli tersedia. Jika tidak, fungsi akan masuk ke status Failed dan tidak dapat dipanggil. Meskipun Function Compute menyimpan cache fungsi Anda untuk mengurangi waktu cold start, pemanggilan tetap memerlukan gambar asli.
Pastikan gambar yang digunakan dalam fungsi Anda tidak ditimpa dengan digest yang berbeda. Jika hal ini terjadi, Anda harus menerapkan ulang fungsi Anda dengan informasi gambar terbaru. Function Compute mencatat tag dan digest dari versi gambar yang Anda pilih saat pembuatan dan pembaruan fungsi. Jika tag gambar diperbarui di tempat lain agar mengarah ke digest baru, pemanggilan fungsi akan gagal.
Prasyarat
Container Registry
Buat instans Container Registry Edisi Perusahaan
CatatanEdisi Personal Alibaba Cloud Container Registry (ACR) ditujukan untuk pengembang individu. Edisi ini ditawarkan sebagai uji coba gratis dengan kuota selama masa beta publik. Edisi ini tidak mencakup Service Level Agreement (SLA) atau kompensasi atas kerugian, serta memiliki batasan penggunaan. Untuk informasi lebih lanjut tentang batasan penggunaan, lihat Pertimbangan saat membuat instans Edisi Personal.
Serverless Devs (Diperlukan hanya jika Anda membuat fungsi menggunakan Serverless Devs)
Buat fungsi di konsol
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik Create Function.
Di kotak dialog yang muncul, pilih tipe GPU Function sesuai skenario Anda, lalu klik Create GPU Function.
Di halaman Create GPU Function, konfigurasikan parameter berikut dan klik Create.
Basic Configurations: Masukkan Function Name. Nama harus unik dalam Akun Alibaba Cloud dan wilayah yang sama, serta harus mengikuti konvensi penamaan.
Scaling Policy: Pilih tipe instans. Anda tidak dapat menggunakan instans provisioned dan on-demand secara bersamaan. Anda tidak dapat mengubah tipe instans setelah fungsi dibuat.
On-demand instances
Configuration Item
Description
Example
Instance Type
Pilih On-demand Instance. Instans diskalakan secara otomatis berdasarkan volume permintaan dan dilepas saat tidak ada permintaan. Anda dikenai biaya berdasarkan penggunaan.
On-demand Instance
GPU Card Type
Pilih tipe kartu GPU. Untuk informasi lebih lanjut tentang spesifikasi yang didukung oleh berbagai tipe kartu, lihat Tipe dan spesifikasi instans.
Ada series
Specifications
Tetapkan spesifikasi GPU Memory, vCPU, Memory, dan Disk untuk fungsi sesuai kebutuhan bisnis Anda. Setelah menetapkan spesifikasi, penggunaan setiap resource dihitung dengan mengalikan spesifikasi dengan durasi penggunaan. Untuk informasi lebih lanjut, lihat Ikhtisar penagihan.
CatatanSemua direktori pada disk dapat ditulis. Ruang disk bersifat shared.
Disk terikat pada siklus hidup instans fungsi dasar. Saat sistem mereklaim instans, data pada disk akan hilang. Jika Anda memerlukan penyimpanan persisten, Anda dapat memasang sistem file NAS atau Bucket OSS. Untuk informasi lebih lanjut, lihat Konfigurasikan sistem file NAS dan Konfigurasikan Object Storage Service.
GPU Memory: 48 GB
vCPU: 8 vCPU
Memory: 64 GB
Disk: 512 MB (tidak dikenai biaya, Function Compute menyediakan kuota gratis ruang disk sebesar 10 GB)
Minimum Instances
Jika bisnis Anda sensitif terhadap latensi, setelah memilih Elastic Instance, kami menyarankan Anda menetapkan jumlah minimum instans menjadi 1 atau lebih untuk mengunci resource terlebih dahulu dan mengurangi latensi cold start.
CatatanSetelah Anda menetapkan Minimum Instances menjadi 1 atau lebih, jika tidak ada kebijakan elastis untuk jumlah minimum instans yang dikonfigurasi atau jika tidak ada kebijakan elastis yang aktif dalam suatu periode, jumlah minimum instans saat ini adalah nilai yang Anda tetapkan di sini.
Jika beberapa kebijakan elastis dikonfigurasi, sistem menghitung Minimum Number Of Instances yang diperlukan saat setiap kebijakan dipicu. Sistem kemudian menggunakan nilai tertinggi di antara kebijakan aktif sebagai Minimum Number Of Instances saat ini.
Untuk informasi lebih lanjut, lihat Bagaimana jumlah minimum instans saat ini dihitung?.
1
Idle Mode
Saat fitur ini diaktifkan, vCPU dan GPU pada instans idle (tanpa permintaan) dibekukan untuk mengurangi biaya secara signifikan. Saat permintaan baru tiba, instans menjadi aktif, dan vCPU serta GPU dipulihkan secara otomatis. Waktu warm start lebih dari 2 detik dan bergantung pada ukuran model. Jika fitur ini dinonaktifkan, vCPU dan GPU pada instans tetap aktif, dan Anda dikenai biaya berdasarkan harga satuan aktif.
Concurrency Per Instance
Anda dapat mengonfigurasi beberapa permintaan konkuren untuk satu instans fungsi GPU. Artinya, satu instans dapat memproses beberapa permintaan secara bersamaan. Untuk informasi lebih lanjut, lihat Konfigurasikan konkurensi per instans.
Provisioned instances
Configuration Item
Description
Example
Instance Type
Pilih Provisioned Instance. Instans dialokasikan ke fungsi dari kolam sumber daya provisioned yang telah dibeli sebelumnya.
Instans provisioned direkomendasikan untuk skenario di mana biaya yang dapat diprediksi, latensi rendah, dan pemanfaatan resource tinggi penting untuk memastikan stabilitas bisnis.
Provisioned Instance
Provisioned Resource Pool
Kolam sumber daya provisioned adalah kumpulan instans provisioned yang dapat dialokasikan ke fungsi target. Jika kapasitas kolam sumber daya provisioned Anda tidak mencukupi, klik Scale-out di kolom Actions dan ikuti petunjuk di layar untuk memperluasnya. Untuk informasi lebih lanjut, lihat Kolam sumber daya provisioned (langganan).
Provisioned Resource Pool: fc-pool-****
GPU Card Type: Ada
Specifications
Tetapkan spesifikasi GPU Memory, vCPU, Memory, dan Disk untuk fungsi sesuai kebutuhan bisnis Anda. Setelah menetapkan spesifikasi, penggunaan setiap resource dihitung dengan mengalikan spesifikasi dengan durasi penggunaan. Untuk informasi lebih lanjut, lihat Ikhtisar penagihan.
CatatanSemua direktori pada disk dapat ditulis. Ruang disk bersifat shared.
Disk terikat pada siklus hidup instans fungsi dasar. Saat sistem mereklaim instans, data pada disk akan hilang. Jika Anda memerlukan penyimpanan persisten, Anda dapat memasang sistem file NAS atau Bucket OSS. Untuk informasi lebih lanjut, lihat Konfigurasikan sistem file NAS dan Konfigurasikan Object Storage Service.
GPU Memory: 48 GB
vCPU: 8 vCPU
Memory: 64 GB
Disk: 512 MB (tidak dikenai biaya, Function Compute menyediakan kuota gratis ruang disk sebesar 10 GB)
Number Of Provisioned Instances
Alokasikan sejumlah instans provisioned ke fungsi target berdasarkan sumber daya yang tersedia di kolam sumber daya provisioned.
1
Concurrency Per Instance
Anda dapat mengonfigurasi beberapa permintaan konkuren untuk satu instans fungsi GPU. Artinya, satu instans dapat memproses beberapa permintaan secara bersamaan. Untuk informasi lebih lanjut, lihat Konfigurasikan konkurensi per instans.
20
Code: Konfigurasikan lingkungan runtime dan pengaturan terkait kode fungsi.
Parameter
Description
Example
Runtime
Use sample images: Pilih contoh gambar yang disediakan oleh Function Compute untuk menerapkan fungsi kontainer kustom dengan cepat. Anda harus memilih gambar target dari daftar di bawah parameter Container Image.
Use container registry images: Klik Select ACR image di bawah parameter Container Image. Di panel Select container image, pilih Container registry instance dan Image repository. Lalu, temukan gambar target di daftar gambar di bawah ini dan klik Select di kolom Actions.
CatatanAnda tidak dapat membuat fungsi menggunakan gambar publik dari instans Alibaba Cloud Container Registry milik akun lain.
Pastikan Anda segera memperbarui fungsi jika gambar yang dikonfigurasi untuknya berubah. Jika tidak, pemanggilan fungsi akan gagal. Untuk informasi lebih lanjut, lihat Catatan penggunaan.
Saat menggunakan instans Edisi Perusahaan, Anda hanya dapat memilih gambar non-dipercepat. Jangan menghapus gambar asli atau gambar dipercepat, karena pemanggilan fungsi akan gagal. Untuk informasi lebih lanjut, lihat Catatan penggunaan.
Instans Edisi Perusahaan tidak mendukung alamat gambar dalam format nama domain kustom.
Anda tidak dapat membuat fungsi menggunakan gambar dari repositori yang mengaktifkan akselerasi gambar dalam mode index-only. Hal ini berlaku untuk instans Container Registry Edisi Perusahaan (Standard dan Advanced).
Setelah Alibaba Cloud Container Registry memperkenalkan fitur index-only mode, Anda tidak dapat lagi membuat fungsi menggunakan gambar dari repositori yang baru dibuat di instans Edisi Perusahaan (Basic) jika akselerasi gambar diaktifkan. Namun, Anda masih dapat menggunakan gambar dari repositori akselerasi yang sudah ada di instans tersebut. Untuk informasi lebih lanjut tentang index-only mode, lihat Muat resource gambar kontainer sesuai permintaan.
Container Image
Pilih gambar target.
SpringBoot Web App Sample Image
Startup Command
Perintah startup untuk program. Jika tidak ditentukan, Function Compute menggunakan Entrypoint atau CMD dari gambar secara default.
None
Listening Port
Port tempat server HTTP dalam kode Anda mendengarkan.
9000
Execution Timeout Period
Tetapkan periode timeout. Execution Timeout Period default-nya 60 detik, dengan maksimum 86.400 detik.
60
Instance Prefetch: Dalam skenario inferensi AI, Anda dapat mengonfigurasi prefetch instans untuk memanaskan model terlebih dahulu. Hal ini menghilangkan latensi cold start untuk permintaan pertama.
Configuration Item
Description
Example
Instance Prefetch
Instance Prefetch
Konfigurasikan hook Initializer untuk memanaskan instans dan mengoptimalkan cold start. Hook menjalankan skrip tertentu atau memanggil antarmuka untuk memuat model setelah instans fungsi dimulai tetapi sebelum memproses permintaan.
Untuk informasi lebih lanjut tentang hook Initializer, lihat Konfigurasikan siklus hidup instans.
Enabled
Timeout
Tetapkan periode timeout untuk hook Initializer.
60
Prefetch Program Type
Anda dapat mengonfigurasi dua jenis hook Initializer untuk memanaskan model: Execute Instruction dan Invoke Code.
Execute Instruction
Instruction Content
Konfigurasikan konten instruksi yang akan dijalankan. Anda dapat menggunakan implementasi shell kustom, seperti
/bin/bash,/bin/sh,/bin/csh, dan/bin/zsh. Pastikan lingkungan runtime fungsi mendukung shell yang dipilih.
Setelah membuat fungsi, Anda dapat melihat dan memperbaruinya di halaman Function List.
Saat memperbarui fungsi, Anda dapat mengubah port pendengar yang dikonfigurasi, tetapi tidak dapat menambah atau menghapus port. Jika Anda mengonfigurasi port pendengar saat membuat fungsi, sistem akan mempertahankan konfigurasi port asli jika Anda tidak menentukan port pendengar selama pembaruan.
Buat fungsi dengan Serverless Devs
Anda dapat menggunakan Serverless Devs untuk membuat dan mendorong gambar kontainer serta menerapkan fungsi dengan alur perintah tunggal.
Jalankan perintah berikut untuk menginisialisasi proyek.
sudo s initIkuti petunjuk untuk memilih Akun Alibaba Cloud, templat gambar kustom, dan bahasa pemrograman (topik ini menggunakan Node.js sebagai contoh). Lalu, tetapkan nama proyek, pilih wilayah penerapan, dan masukkan informasi gambar Alibaba Cloud Container Registry Anda.
Jalankan perintah berikut untuk masuk ke direktori proyek.
cd start-fc3-custom-container-nodejsEdit file
s.yaml. Untuk informasi lebih lanjut tentang parameter dalam file YAML, lihat Spesifikasi YAML.Kode berikut memberikan contoh.
Dalam contoh ini,
imagemerujuk pada gambar Alibaba Cloud Container Registry Anda. Ganti <your namespace>, <your image>, dan <your tag> dengan namespace, nama repositori gambar, dan tag gambar aktual Anda. Jika Anda sudah memasukkan informasi gambar yang benar saat menginisialisasi proyek di Langkah 1, Anda tidak perlu memodifikasinya di sini.edition: 3.0.0 name: hello-world-app # akses: Pasangan Kunci Akses yang diperlukan untuk aplikasi saat ini. # Untuk informasi tentang cara mengonfigurasi kunci, lihat https://www.serverless-devs.com/serverless-devs/command/config # Untuk urutan penggunaan kunci, lihat https://www.serverless-devs.com/serverless-devs/tool#credential-priority access: "default" vars: # Variabel global region: "cn-hangzhou" resources: hello_world: # Untuk melakukan operasi hanya pada modul hello_world, tambahkan namanya ke perintah. Misalnya, untuk melakukan build hanya pada modul hello_world, jalankan 's hello_world build'. # Jika Anda menjalankan 's build' tanpa menentukan modul, alat ini akan secara berurutan melakukan build pada semua modul di tingkat yang sama dengan hello_world di file YAML. component: fc3 # Nama komponen actions: # Logika eksekusi kustom pre-deploy: # Jalankan sebelum penerapan - component: fc3 build --dockerfile ./code/Dockerfile # Komponen yang akan dijalankan, dalam format 'komponen: <nama_komponen> <parameter>' props: region: ${vars.region} # Untuk informasi selengkapnya tentang cara menggunakan variabel, lihat https://docs.serverless-devs.com/serverless-devs/yaml#variables functionName: "start-nodejs-ufrz" runtime: "custom-container" description: 'hello world by serverless devs' timeout: 30 memorySize: 512 cpu: 0.5 diskSize: 512 code: ./code customContainerConfig: image: 'registry.${vars.region}.aliyuncs.com/<your namespace>/<your image>:<your tag>' # Gambar kontainer Anda dari ACR. Ganti <namespace_anda>, <gambar_anda>, dan <tag_anda> dengan namespace, nama repository image, dan tag image Anda yang sebenarnya. # pemicu: # - triggerName: httpTrigger # Nama pemicu # triggerType: http # Jenis pemicu # description: 'xxxx' # qualifier: LATEST # Versi layanan yang akan dipicu # triggerConfig: # authType: anonymous # Jenis autentikasi. Nilai yang valid: anonymous, function # disableURLInternet: false # Apakah akan menonaktifkan URL publik # methods: # Metode HTTP yang didukung oleh pemicu. Nilai yang valid: GET, POST, PUT, DELETE, HEAD # - GET # - POSTJalankan perintah berikut untuk menerapkan proyek.
sudo s deployOutput berikut adalah contohnya:
Steps for [deploy] of [hello-world-app] ==================== DEPRECATED: The legacy builder is deprecated and will be removed in a future release. BuildKit is currently disabled; enable it by removing the DOCKER_BUILDKIT=0 environment-variable. Sending build context to Docker daemon 5.12kB Step 1/7 : FROM node:14-buster 14-buster: Pulling from library/node 2ff1d7c41c74: Already exists b253aeafeaa7: Already exists 3d2201bd995c: Already exists 1de76e268b10: Already exists d9a8df589451: Already exists 6f51ee005dea: Already exists 5f32ed3c3f27: Already exists 0c8cc2f24a4d: Already exists 0d27a8e86132: Already exists Digest: sha256:a158d3b9b4e3fa813fa6c8c590b8f0a860e015ad4e59bbce5744d2f6fd8461aa Status: Downloaded newer image for node:14-buster ---> 1d12470fa662 Step 2/7 : WORKDIR /usr/src/ ---> Running in 70a8e2e4d1ea Removing intermediate container 70a8e2e4d1ea ---> 0d67b8fa2901 Step 3/7 : COPY package*.json ./ ---> 09eb15f8770a Step 4/7 : RUN npm install ---> Running in 8ae492be973b Step 5/7 : COPY . . ---> 7560c7b14431 Step 6/7 : EXPOSE 9000 ---> Running in 66b38e54ced0 Removing intermediate container 66b38e54ced0 ---> f73cce48d2ae Step 7/7 : ENTRYPOINT [ "node", "server.js" ] ---> Running in 2fb2f83fd6c0 Removing intermediate container 2fb2f83fd6c0 ---> fe51ae71448c Successfully built fe51ae71448c Successfully tagged registry.cn-hangzhou.aliyuncs.com/z****/z****:latest [2024-01-29 16:33:06][INFO][hello_world] get instanceName= and region=cn-hangzhou from registry.cn-hangzhou.aliyuncs.com/z****/z**** [2024-01-29 16:33:06][INFO][hello_world] try to docker push registry.cn-hangzhou.aliyuncs.com/z****/z**** ... WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded Using default tag: latest The push refers to repository [registry.cn-hangzhou.aliyuncs.com/z****/z****] 85c1ec915b45: Pushed 37c36543a431: Pushed e4afd7f70434: Pushed 0d5f5a015e5d: Layer already exists 3c777d951de2: Layer already exists f8a91dd5fc84: Layer already exists cb81227abde5: Layer already exists e01a454893a9: Layer already exists c45660adde37: Layer already exists fe0fb3ab4a0f: Layer already exists f1186e5061f2: Layer already exists b2dba7477754: Layer already exists latest: digest: sha256:6bf1ed4119d197a46c99082577632957056cb625f2ee0276d2af53f60d22837d size: 2841 [hello_world] completed (688.45s) Result for [deploy] of [hello-world-app] ==================== region: cn-hangzhou cpu: 0.5 customContainerConfig: image: registry.cn-hangzhou.aliyuncs.com/z****/z**** resolvedImageUri: registry.cn-hangzhou.aliyuncs.com/z****/z****@sha256:6bf1ed4119d197a46c99082577632957056cb625f2ee0276d2af53f60d22837d description: hello world by serverless devs diskSize: 512 functionName: start-nodejs-ufrz handler: handler instanceConcurrency: 1 internetAccess: true lastUpdateStatus: Successful memorySize: 512 role: runtime: custom-container state: Active timeout: 30 A complete log of this run can be found in: /root/.s/logs/0129162246Jalankan perintah berikut untuk men-debug fungsi.
sudo s invoke -e "{\"key\":\"val\"}"Output berikut adalah contohnya:
Steps for [invoke] of [hello-world-app] ==================== ========= FC invoke Logs begin ========= FC Invoke Start RequestId: 1-65b764db-15eb737f-0c67ab5cd968 FC Invoke Start RequestId: 1-65b764db-15eb737f-0c67ab5cd968 hello world! FC Invoke End RequestId: 1-65b764db-15eb737f-0c67ab5cd968 Duration: 42.27 ms, Billed Duration: 43 ms, Memory Size: 512 MB, Max Memory Used: 47.77 MB ========= FC invoke Logs end ========= Invoke instanceId: c-65b764db-15fa2aa8-bc50f7839399 Code Checksum: undefined Qualifier: LATEST RequestId: 1-65b764db-15eb737f-0c67ab5cd968 Invoke Result: OK [hello_world] completed (4.96s) A complete log of this run can be found in: /root/.s/logs/0129164202
Dokumen terkait
Menggunakan fungsi kontainer kustom memerlukan pengunduhan dan dekompresi lingkungan dasar gambar kontainer, yang dapat meningkatkan waktu cold start. Untuk mengurangi latensi ini, lihat Praktik terbaik untuk mengoptimalkan cold start di Function Compute.
Anda juga dapat memanggil operasi API untuk membuat fungsi. Untuk informasi lebih lanjut, lihat CreateFunction.
Untuk mempelajari kasus penggunaan dan perbedaan antara runtime bawaan, runtime kustom, dan runtime kontainer kustom, lihat Pilih runtime fungsi.