All Products
Search
Document Center

Function Compute:Buat fungsi kontainer kustom

Last Updated:Apr 24, 2026

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.

      image

    • 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.

      image

  • 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

Buat fungsi di konsol

  1. Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih Function Management > Functions.

  2. Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik Create Function.

  3. Di kotak dialog yang muncul, pilih tipe GPU Function sesuai skenario Anda, lalu klik Create GPU Function.

  4. 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.

        Catatan
        • Semua 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.

        Catatan

        Setelah 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.

        Catatan
        • Semua 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.

      Catatan
      • Anda 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.

      Custom Container

      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.

      Lihat Implementasi metode callback

    Setelah membuat fungsi, Anda dapat melihat dan memperbaruinya di halaman Function List.

Catatan

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.

  1. Jalankan perintah berikut untuk menginisialisasi proyek.

    sudo s init

    Ikuti 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.

  2. Jalankan perintah berikut untuk masuk ke direktori proyek.

    cd start-fc3-custom-container-nodejs
  3. Edit file s.yaml. Untuk informasi lebih lanjut tentang parameter dalam file YAML, lihat Spesifikasi YAML.

    Kode berikut memberikan contoh.

    Dalam contoh ini, image merujuk 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
          #         - POST
  4. Jalankan perintah berikut untuk menerapkan proyek.

    sudo s deploy

    Output 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/0129162246
  5. 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

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.