Jika runtime bawaan di Function Compute tidak memenuhi kebutuhan bisnis Anda, Anda dapat membuat fungsi container kustom melalui konsol Function Compute atau menggunakan alat Serverless Devs.
Catatan penggunaan
-
Untuk membuat fungsi container kustom di Function Compute, Anda harus menggunakan image dari Alibaba Cloud Container Registry yang berada dalam region dan Akun Alibaba Cloud yang sama. Jika Anda membuat image pada komputer dengan Apple silicon atau arsitektur berbasis ARM lainnya, tentukan platform build sebagai linux/amd64. Contoh:
docker build --platform linux/amd64 -t $IMAGE_NAME . -
Function Compute melakukan resolusi nama domain untuk image Alibaba Cloud Container Registry Edisi Perusahaan menggunakan resolusi default dari virtual private cloud (VPC) yang dikonfigurasi, atau alamat IP akses yang diresolusi secara otomatis oleh Alibaba Cloud DNS PrivateZone.
-
Skenario 1: Jika identifier Default Resolution tidak muncul pada alamat IP mana pun di halaman Access Control instans, semua alamat IP dalam daftar Access IP akan diresolusi secara otomatis oleh Alibaba Cloud DNS PrivateZone. Dalam kondisi ini, konfigurasi VPC apa pun dapat digunakan.

-
Skenario 2: Pada halaman Access Control instans Container Registry (ACR) Edisi Perusahaan, jika daftar Access IP memuat alamat IP yang ditandai dengan Default Resolution, alamat IP tersebut merupakan alamat IP resolusi default dari sebuah VPC. Anda harus memilih konfigurasi VPC tersebut, seperti yang ditunjukkan pada gambar berikut.

-
-
Saat menggunakan instans Edisi Perusahaan, Anda hanya dapat memilih image yang tidak dipercepat. Setiap kali konfigurasi image fungsi diperbarui, sistem akan menghasilkan image baru yang dipercepat berdasarkan image asli terbaru yang dipilih, lalu menimpa image yang dipercepat sebelumnya. Jangan menghapus image asli maupun image yang dipercepat karena hal ini akan memengaruhi pemanggilan fungsi.
-
Pastikan Anda segera memperbarui fungsi jika image yang dikonfigurasi berubah. Jika tidak, pemanggilan fungsi akan gagal.
-
Pastikan image asli tetap tersedia. Jika tidak, fungsi akan memasuki status Gagal dan tidak dapat dipanggil. Meskipun Function Compute melakukan cache terhadap fungsi untuk mengurangi waktu cold start, pemanggilan tetap memerlukan image asli.
-
Pastikan image yang digunakan dalam fungsi tidak ditimpa dengan digest yang berbeda. Jika hal ini terjadi, terapkan ulang fungsi dengan informasi image terbaru. Function Compute mencatat tag dan digest dari versi image yang dipilih selama pembuatan dan pembaruan fungsi. Jika tag image diperbarui di tempat lain sehingga menunjuk ke digest baru, pemanggilan fungsi akan gagal.
-
Prasyarat
-
Container Registry
-
Membuat instans Edisi Perusahaan
Catatan-
Edisi Personal dari Alibaba Cloud Container Registry (ACR) ditujukan bagi pengembang individu. Edisi ini ditawarkan sebagai uji coba gratis dengan kuota terbatas selama masa beta publik, tidak mencakup Service Level Agreement (SLA) atau kompensasi atas kerusakan, serta memiliki batasan penggunaan. Untuk informasi lebih lanjut mengenai batasan penggunaan, lihat catatan penggunaan di Membuat instans Edisi Personal.
-
-
-
Serverless Devs (Hanya diperlukan jika Anda membuat fungsi menggunakan Serverless Devs)
Membuat fungsi di konsol
Masuk ke konsol Function Compute. Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih region. Pada halaman Functions, klik Create Function.
-
Dalam kotak dialog yang muncul, pilih tipe GPU Function sesuai prompt dan skenario aktual Anda, lalu klik Create GPU Function.
-
Pada halaman Create GPU Function, konfigurasikan parameter berikut, lalu klik Create.
-
Basic Configurations: Masukkan Function Name. Nama harus unik dalam akun dan region yang sama, serta mengikuti konvensi penamaan yang berlaku.
-
Scaling Policy: Pilih tipe instans. Anda tidak dapat menggunakan Instans yang disediakan dan Instans sesuai permintaan secara bersamaan, serta tipe instans tidak dapat diubah setelah fungsi dibuat.
-
Instans sesuai permintaan
Item Konfigurasi
Deskripsi
Contoh
Instance Type
Pilih On-demand Instance. Instans berskala sesuai volume permintaan dan dilepaskan saat tidak ada permintaan. Ditagihkan per penggunaan.
On-demand Instance
GPU Card Type
Pilih tipe kartu GPU. Spesifikasi yang tersedia bervariasi menurut tipe (Tipe dan spesifikasi instans).
Seri Ada
Specifications
Tetapkan spesifikasi GPU Memory, vCPU, Memory, dan Disk. Ditagihkan berdasarkan spesifikasi × durasi (Ikhtisar penagihan).
Catatan-
Semua direktori disk dapat ditulis dan berbagi ruang yang sama.
-
Data disk hilang saat instans diambil kembali. Untuk persistensi, pasang sistem file NAS (Mengonfigurasi sistem file NAS) atau Bucket OSS (Mengonfigurasi Object Storage Service).
-
GPU Memory: 48 GB
-
vCPU: 8 vCPU
-
Memory: 64 GB
-
Disk: 512 MB (tidak ditagihkan, Function Compute menyediakan kuota gratis sebesar 10 GB disk space)
Minimum Instances
Untuk beban kerja yang sensitif terhadap latensi, pilih Elastic Instance dan tetapkan minimum 1 atau lebih untuk mengurangi latensi cold start.
CatatanJika tidak ada kebijakan elastis yang dikonfigurasi atau aktif, jumlah instans minimum secara default menggunakan nilai ini.
Dengan beberapa kebijakan elastis yang aktif, Minimum Number Of Instances tertinggi menjadi Minimum Number Of Instances yang berlaku efektif.
1
Concurrency Per Instance
Memungkinkan satu instans GPU menangani beberapa permintaan secara konkuren. Mengonfigurasi konkurensi per instans.
-
-
Instans yang disediakan
Item Konfigurasi
Deskripsi
Contoh
Instance Type
Pilih Provisioned Instance. Instans berasal dari kolam sumber daya yang telah dibeli sebelumnya.
Terbaik untuk biaya yang dapat diprediksi, latensi rendah, dan utilisasi tinggi.
Provisioned Instance
Provisioned Resource Pool
Kolam instans yang telah dibeli sebelumnya untuk fungsi tersebut. Jika kapasitas tidak mencukupi, klik Scale-out di kolom Actions. Kolam sumber daya yang disediakan (subscription).
-
Provisioned Resource Pool: fc-pool-****
-
GPU Card Type: Ada
Specifications
Tetapkan spesifikasi GPU Memory, vCPU, Memory, dan Disk. Ditagihkan berdasarkan spesifikasi × durasi (Ikhtisar penagihan).
Catatan-
Semua direktori disk dapat ditulis dan berbagi ruang yang sama.
-
Data disk hilang saat instans diambil kembali. Untuk persistensi, pasang sistem file NAS (Mengonfigurasi sistem file NAS) atau Bucket OSS (Mengonfigurasi Object Storage Service).
GPU Memory: 48 GB
vCPU: 8 vCPU
Memory: 64 GB
Disk: 512 MB (tidak ditagihkan, Function Compute menyediakan kuota gratis sebesar 10 GB disk space)
Number Of Provisioned Instances
Alokasikan instans dari kapasitas yang tersedia di kolam.
1
Concurrency Per Instance
Memungkinkan satu instans GPU menangani beberapa permintaan secara konkuren. Mengonfigurasi konkurensi per instans.
20
-
-
-
Code: Konfigurasikan lingkungan runtime fungsi dan pengaturan terkait kode.
Parameter
Deskripsi
Contoh
Runtime
-
Use Sample Images: Pilih contoh gambar yang disediakan oleh Function Compute untuk menerapkan fungsi container kustom dengan cepat. Anda harus memilih image 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 ACR Image Repository yang ada. Kemudian, temukan image target dalam daftar image di bawahnya dan klik Select di kolom Actions.
Catatan-
Anda tidak dapat membuat fungsi menggunakan gambar publik dari instans Alibaba Cloud Container Registry milik akun lain.
-
Pastikan Anda memperbarui fungsi segera jika image yang dikonfigurasi berubah. Jika tidak, pemanggilan fungsi akan gagal. Untuk informasi lebih lanjut, lihat Catatan penggunaan.
-
Saat Anda menggunakan instans Edisi Perusahaan, Anda hanya dapat memilih image yang tidak dipercepat. Jangan menghapus image asli atau image yang dipercepat, karena hal ini akan memengaruhi pemanggilan fungsi. Untuk informasi lebih lanjut, lihat Catatan penggunaan.
-
Instans Edisi Perusahaan tidak mendukung alamat image dalam format nama domain kustom.
-
Anda tidak dapat membuat fungsi dengan menggunakan image dari repository tempat percepatan image diaktifkan dalam index-only mode. Hal ini berlaku untuk instans Container Registry Edisi Perusahaan (Standar dan Lanjutan).
-
Setelah Alibaba Cloud Container Registry memperkenalkan fitur index-only mode, Anda tidak lagi dapat membuat fungsi menggunakan image dari repository yang baru dibuat di instans Edisi Perusahaan (Dasar) jika percepatan image diaktifkan. Namun, Anda masih dapat menggunakan image dari repository yang dipercepat yang sudah ada di instans ini. Untuk informasi lebih lanjut tentang index-only mode, lihat Memuat gambar kontainer sesuai permintaan.
Container Image
Pilih image target.
Contoh Gambar SpringBoot Web App
Startup Command
Perintah startup untuk program. Jika tidak ditentukan, Function Compute menggunakan Entrypoint atau CMD dari image secara default.
Tidak ada
Listening Port
Port tempat server HTTP dalam kode Anda mendengarkan.
9000
Execution Timeout Period
Tetapkan periode timeout. Execution Timeout Period secara default adalah 60 detik, dengan maksimum 86.400 detik.
60
-
-
Instance Prefetch: Melakukan pre-warm pada model untuk menghilangkan latensi cold start pada permintaan pertama dalam skenario Inferensi AI.
Item Konfigurasi
Deskripsi
Contoh
Instance Prefetch
Instance Prefetch
Menjalankan skrip atau memanggil antarmuka untuk memuat model setelah instans dimulai tetapi sebelum menangani permintaan.
Diaktifkan
Timeout
Timeout untuk hook Initializer.
60
Prefetch Program Type
Dua tipe hook: Execute Instruction dan Invoke Code.
Execute Instruction
Instruction Content
Instruksi yang akan dieksekusi. Mendukung shell kustom:
/bin/bash,/bin/sh,/bin/csh,/bin/zsh. Pastikan runtime mendukung shell yang dipilih. -
Izin, Jaringan, dan Penyimpanan: Konfigurasikan role eksekusi fungsi, jaringan, dan pemasangan penyimpanan.
Item Konfigurasi
Deskripsi
Contoh
Execution Role
Function Compute mengasumsikan role Resource Access Management (RAM) ini untuk menghasilkan kredensial temporary guna mengakses resource Alibaba Cloud dan meneruskannya ke kode. Untuk informasi lebih lanjut, lihat Menggunakan role fungsi untuk mengakses layanan cloud lainnya.
mytestrole
VPC Access
Memungkinkan fungsi mengakses resource dalam VPC. Untuk informasi lebih lanjut, lihat Mengonfigurasi jaringan.
Aktifkan
VPC
Diperlukan saat VPC Access diatur ke Yes. Buat VPC baru atau pilih ID VPC yang akan diakses dari daftar drop-down.
fc.auto.create.vpc.1632317****
vSwitch
Diperlukan saat VPC Access diatur ke Yes. Buat vSwitch baru atau pilih ID vSwitch dari daftar drop-down.
fc.auto.create.vswitch.vpc-bp1p8248****
Security Group
Diperlukan saat VPC Access diatur ke Yes. Buat security group baru, atau pilih security group dari daftar drop-down.
fc.auto.create.SecurityGroup.vsw-bp15ftbbbbd****
Allow Default NIC to Access Internet
Pilih Yes atau No untuk mengizinkan fungsi mengakses Internet melalui antarmuka jaringan default.
PentingSaat Anda menggunakan fitur alamat IP publik statis, Anda harus menonaktifkan Allow Default NIC to Access Internet. Jika tidak, alamat IP publik statis yang dikonfigurasi tidak akan berlaku. Untuk informasi lebih lanjut, lihat Mengonfigurasi Alamat IP publik statis.
Aktifkan
NAS Mounting
Pasang Mengonfigurasi sistem file NAS ke fungsi untuk penyimpanan persisten data yang dibagikan antar fungsi, seperti model yang dibagikan oleh beberapa fungsi inferensi.
Jika Anda memilih Konfigurasi Otomatis, sistem menggunakan sistem file network-attached storage (NAS) serbaguna yang ada dengan nama Alibaba-Fc-V3-Component-Generated secara default. Jika tidak ada sistem file NAS yang memenuhi syarat di bawah akun saat ini, sistem akan membuatnya secara otomatis.
Aktifkan
OSS Mounting
Pasang Object Storage Service (OSS) ke fungsi untuk penyimpanan persisten log, file bisnis, dan lainnya. Untuk informasi lebih lanjut, lihat Mengonfigurasi pemasangan OSS.
Aktifkan
-
Pencatatan dan Pelacakan
Item Konfigurasi
Deskripsi
Contoh
Log Feature
Konfigurasikan opsi ini untuk menyimpan log eksekusi fungsi secara persisten ke Log Service untuk debugging kode, troubleshooting, dan analisis data. Untuk informasi lebih lanjut, lihat Mengonfigurasi fitur pencatatan.
-
Konfigurasi Otomatis: Secara otomatis memilih Log Project yang dimulai dengan
serverless-<region_id>.Hanya satu Log Project semacam itu yang dibuat per region. Jika sistem mendeteksi Log Project yang ada di region saat ini, maka Log Project tersebut digunakan secara langsung.
-
Konfigurasi Kustom: Anda harus menentukan Log Project dan Logstore target secara manual.
Aktifkan
-
-
Other Configurations
Item Konfigurasi
Deskripsi
Contoh
Timezone
Pilih zona waktu untuk fungsi. Setelah Anda menetapkan zona waktu, variabel lingkungan TZ ditambahkan secara otomatis dengan nilai yang diatur ke zona waktu target.
UTC
Tags
Tetapkan Mengonfigurasi tag untuk fungsi guna mendukung manajemen kelompok. Anda harus menetapkan kunci tag dan nilai tag.
kunci : nilai
Resource Group
Pilih Mengonfigurasi kelompok sumber daya untuk fungsi guna mengelola fungsi berdasarkan kelompok.
Default Resource Group
Environment Variables
Gunakan variabel lingkungan untuk menyesuaikan perilaku fungsi tanpa mengubah kode. Untuk informasi lebih lanjut, lihat Mengonfigurasi variabel lingkungan.
{ "BUCKET_NAME": "MY_BUCKET", "TABLE_NAME": "MY_TABLE" }
Setelah fungsi dibuat, Anda dapat melihat dan memperbaruinya di halaman Functions.
-
Saat memperbarui fungsi, Anda dapat mengubah port listener yang dikonfigurasi, tetapi tidak dapat menambah atau menghapus port. Jika port listener dikonfigurasi saat pembuatan fungsi namun tidak ditetapkan selama pembaruan, sistem akan mempertahankan konfigurasi port asli.
Membuat fungsi dengan Serverless Devs
Gunakan Serverless Devs untuk membangun dan mendorong gambar kontainer serta menerapkan fungsi melalui alur perintah tunggal.
-
Jalankan perintah berikut untuk menginisialisasi proyek.
sudo s initIkuti instruksi di layar untuk memilih Akun Alibaba Cloud, templat container kustom, dan bahasa (Node.js digunakan dalam contoh ini). Selanjutnya, tetapkan nama proyek, pilih region deployment, dan masukkan image ACR Anda.
-
Jalankan perintah berikut untuk masuk ke direktori proyek.
cd start-fc3-custom-container-nodejs -
Edit file
s.yaml. Untuk informasi lebih lanjut tentang parameter dalam File YAML, lihat Spesifikasi YAML.Kode berikut menyajikan sebuah contoh.
Dalam contoh ini,
imagemerujuk pada image Alibaba Cloud Container Registry Anda. Ganti <your namespace>, <your image>, dan <your tag> dengan namespace, nama repository image, dan tag image aktual Anda. Jika informasi image yang benar telah dimasukkan saat menginisialisasi proyek di Langkah 1, Anda tidak perlu mengubahnya di sini.edition: 3.0.0 name: hello-world-app # access menentukan konfigurasi kunci yang diperlukan oleh aplikasi saat ini: # Untuk konfigurasi kunci, lihat: https://www.serverless-devs.com/serverless-devs/command/config # Untuk urutan penggunaan kunci, lihat: https://www.serverless-devs.com/serverless-devs/tool#key-usage-order-and-specifications access: "default" vars: # Variabel global region: "cn-hangzhou" resources: hello_world: # Untuk melakukan operasi hanya pada modul bisnis hello_world, tambahkan hello_world ke baris perintah. Sebagai contoh: # Untuk membangun hanya hello_world: s hello_world build # Jika Anda menjalankan s build secara langsung tanpa menentukan hello_world, tool akan membangun semua modul bisnis pada tingkat yang sama dengan hello_world dalam file YAML saat ini (jika ada modul saudara lainnya, seperti next_function yang dikomentari di bawah) dalam urutan tertentu component: fc3 # Nama komponen actions: # Logika eksekusi kustom pre-deploy: # Jalankan sebelum deploy - component: fc3 build --dockerfile ./code/Dockerfile # Komponen yang dijalankan, dalam format "component: component_name command parameters" props: region: ${vars.region} # Untuk penggunaan variabel, lihat: https://docs.serverless-devs.com/serverless-devs/yaml#%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC functionName: "start-nodejs-ufrz" runtime: "custom-container" description: 'hello world by serverless devs' timeout: 30 memorySize: 512 cpu: 0.5 diskSize: 10240 code: ./code customContainerConfig: image: 'registry.${vars.region}.aliyuncs.com/<your namespace>/<your image>:<your tag>' # Image ACR Anda. Ganti <your namespace>, <your image>, dan <your tag> dengan nama namespace, nama repository image, dan tag image yang sebenarnya. # triggers: # - triggerName: httpTrigger # Nama pemicu # triggerType: http # Tipe pemicu # description: 'xxxx' # qualifier: LATEST # Versi layanan yang dipicu # triggerConfig: # authType: anonymous # Tipe autentikasi. Nilai yang valid: anonymous, function # disableURLInternet: false # Menentukan apakah akan menonaktifkan URL akses jaringan publik # methods: # Metode HTTP yang didukung oleh Pemicu HTTP. Nilai yang valid: GET, POST, PUT, DELETE, HEAD # - GET # - POST -
Jalankan 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: 10240 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/0129162246 -
Jalankan 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
Dokumentasi terkait
-
Saat menggunakan fungsi container kustom, lingkungan dasar tempat gambar kontainer bergantung memerlukan waktu tambahan untuk mengunduh dan mendekompresi. Untuk mengurangi waktu cold start, lihat Praktik terbaik untuk mengoptimalkan cold start di Function Compute.
-
Fungsi juga dapat dibuat dengan memanggil Operasi API. Untuk informasi lebih lanjut, lihat CreateFunction.
-
Untuk informasi lebih lanjut tentang skenario yang berlaku serta perbedaan antara runtime bawaan, runtime kustom, dan runtime container kustom yang disediakan oleh Function Compute, lihat Pemilihan teknologi.