Tous les produits
Search
Centre de documentation

Function Compute:Créer une fonction de conteneur personnalisé

Dernière mise à jour :Aug 28, 2026

Si les environnements d'exécution intégrés dans Function Compute ne répondent pas à vos besoins métier, vous pouvez créer une fonction de conteneur personnalisé via la console Function Compute ou en utilisant l'outil Serverless Devs.

Notes d'utilisation

  • Pour créer une fonction de conteneur personnalisé dans Function Compute, vous devez utiliser une image provenant d'Alibaba Cloud Container Registry située dans la même région et associée au même compte Alibaba Cloud. Si vous générez des images sur des ordinateurs équipés de puces Apple Silicon ou d'autres architectures basées sur ARM, vous devez spécifier la plateforme de construction comme étant linux/amd64. Exemple : docker build --platform linux/amd64 -t $IMAGE_NAME ..

  • Function Compute résout les noms de domaine des images issues d'Alibaba Cloud Container Registry Enterprise Edition en utilisant soit la résolution par défaut du réseau privé virtuel (VPC) configuré, soit les adresses IP d'accès résolues automatiquement par Alibaba Cloud DNS PrivateZone.

    • Scénario 1 : Si l'identifiant Default Resolution n'apparaît pour aucune adresse IP sur la page Access Control de l'instance, toutes les adresses IP de la liste Access IP sont résolues automatiquement par Alibaba Cloud DNS PrivateZone. Dans ce cas, toute configuration VPC peut être utilisée.

      image

    • Scénario 2 : Si, sur la page Access Control d'une instance Container Registry (ACR) Enterprise Edition, la liste Access IP contient une adresse IP marquée avec Default Resolution, cette adresse IP correspond à l'adresse IP de résolution par défaut d'un VPC. Vous devez sélectionner cette configuration VPC, comme illustré dans la figure suivante.

      image

  • Lorsque vous utilisez une instance Enterprise Edition, vous ne pouvez sélectionner que des images non accélérées. Chaque mise à jour de la configuration d'image d'une fonction génère une nouvelle image accélérée basée sur la dernière image originale sélectionnée, écrasant ainsi toute image accélérée existante. Ne supprimez ni l'image originale ni l'image accélérée, sous peine d'affecter l'exécution des fonctions.

  • Veillez à mettre à jour votre fonction rapidement si l'image configurée change. Sinon, l'exécution de la fonction échouera.

    • Assurez-vous que l'image originale existe toujours. Sinon, la fonction passe à l'état Failed et ne peut plus être invoquée. Bien que Function Compute mette en cache votre fonction pour réduire les temps de démarrage à froid, les invocations nécessitent toujours l'image originale.

    • Vérifiez que l'image utilisée dans votre fonction n'est pas remplacée par une version ayant un digest différent. Si cela se produit, vous devez redéployer votre fonction avec les dernières informations relatives à l'image. Function Compute enregistre à la fois le tag et le digest de la version d'image que vous sélectionnez lors de la création et de la mise à jour de la fonction. Si le tag de l'image est mis à jour ailleurs pour pointer vers un nouveau digest, l'exécution de la fonction échouera.

Prérequis

  • Container Registry

    • Créer une instance Enterprise Edition

      Remarque
      • La version Personal Edition d'Alibaba Cloud Container Registry (ACR) est destinée aux développeurs individuels. Elle est proposée en essai gratuit avec des quotas pendant la phase de bêta publique. Cette édition ne comprend aucun accord de niveau de service (SLA) ni compensation en cas de dommages, et présente des limites d'utilisation. Pour plus d'informations sur ces limites, consultez les notes d'utilisation dans Créer une instance Personal Edition.

  • Serverless Devs (requis uniquement si vous créez la fonction à l'aide de Serverless Devs)

    Installer et configurer Serverless Devs

Créer une fonction dans la console

  1. Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, sélectionnez Function Management > Functions.

  2. Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur Create Function.

  3. Dans la boîte de dialogue qui s'affiche, sélectionnez le type GPU Function en fonction des instructions et de votre scénario réel, puis cliquez sur Create GPU Function.

  4. Sur la page Create GPU Function, configurez les paramètres suivants et cliquez sur Create.

    • Basic Configurations : saisissez un Function Name. Le nom doit être unique au sein du même compte et de la même région, et respecter les conventions de dénomination.

    • Scaling Policy : sélectionnez un type d'instance. Vous ne pouvez pas utiliser simultanément des instances provisionnées et des instances à la demande, et le type d'instance ne peut pas être modifié après la création de la fonction.

      • On-demand instances

        Configuration Item

        Description

        Example

        Instance Type

        Sélectionnez On-demand Instance. Les instances sont mises à l'échelle en fonction du volume de requêtes et sont libérées lorsqu'il n'y a aucune requête. Facturation à l'utilisation.

        On-demand Instance

        GPU Card Type

        Sélectionnez un type de carte GPU. Les spécifications disponibles varient selon le type (Types d'instances et spécifications).

        Série Ada

        Specifications

        Définissez les spécifications de GPU Memory, vCPU, Memory et Disk. La facturation est basée sur la spécification × durée (Présentation de la facturation).

        Remarque
        • Mémoire GPU : 48 Go

        • vCPU : 8 vCPU

        • Mémoire : 64 Go

        • Disque : 512 Mo (non facturé, Function Compute offre un quota gratuit de 10 Go d'espace disque)

        Minimum Instances

        Pour les charges de travail sensibles à la latence, sélectionnez Elastic Instance et définissez le minimum à 1 ou plus pour réduire la latence de démarrage à froid.

        Remarque

        Si aucune politique élastique n'est configurée ou active, le nombre minimal d'instances prend par défaut cette valeur.

        Avec plusieurs politiques élastiques actives, la valeur la plus élevée de Minimum Number Of Instances devient la valeur effective de Minimum Number Of Instances.

        Comment le nombre minimal actuel d'instances est-il calculé ?

        1

        Idle Mode

        Permet à une seule instance GPU de gérer plusieurs requêtes simultanément. Configurer la concurrence par instance.

      • Provisioned instances

        Configuration Item

        Description

        Example

        Instance Type

        Sélectionnez Provisioned Instance. Les instances proviennent d'un pool de ressources préacheté.

        Idéal pour des coûts prévisibles, une faible latence et une utilisation élevée.

        Provisioned Instance

        Provisioned Resource Pool

        Un pool d'instances préacheté pour la fonction. Si la capacité est insuffisante, cliquez sur Scale-out dans la colonne Actions. Pools de ressources provisionnés (abonnement).

        • Provisioned Resource Pool : fc-pool-****

        • GPU Card Type : Ada

        Specifications

        Définissez les spécifications de GPU Memory, GPU Memory, vCPU et Memory. La facturation est basée sur la spécification × durée (Présentation de la facturation).

        Remarque

        Mémoire GPU : 48 Go

        vCPU : 8 vCPU

        Mémoire : 64 Go

        Disque : 512 Mo (non facturé, Function Compute offre un quota gratuit de 10 Go d'espace disque)

        Disk

        Allouez des instances à partir de la capacité disponible du pool.

        1

        Concurrency Per Instance

        Permet à une seule instance GPU de gérer plusieurs requêtes simultanément. Configurer la concurrence par instance.

        20

    • Concurrency Per Instance : configurez l'environnement d'exécution de la fonction et les paramètres liés au code.

      Paramètre

      Description

      Exemple

      Code

      • Utiliser des images d'exemple : sélectionnez un exemple d'image fourni par Function Compute pour déployer rapidement une fonction de conteneur personnalisé. Vous devez sélectionner l'image cible dans la liste sous le paramètre Runtime.

      • Utiliser des images Container Registry : cliquez sur Sélectionner une image ACR sous le paramètre Container Image. Dans le panneau Sélectionner une image de conteneur , choisissez l' Instance Container Registry et le Dépôt d'images ACR existants. Ensuite, repérez l'image cible dans la liste ci-dessous et cliquez sur Sélectionner dans la colonne Actions.

      Remarque
      • Vous ne pouvez pas créer de fonction à partir d'une image publique issue d'une instance Alibaba Cloud Container Registry appartenant à un autre compte.

      • Veillez à mettre à jour votre fonction sans délai si l'image configurée change. À défaut, les invocations de fonction échoueront. Pour plus d'informations, consultez les Remarques d'utilisation.

      • Avec une instance Enterprise Edition, seules les images non accélérées sont disponibles. Ne supprimez ni l'image originale ni l'image accélérée, sous peine d'affecter les invocations de fonction. Pour plus d'informations, consultez les Remarques d'utilisation.

      • Les instances Enterprise Edition ne prennent pas en charge les adresses d'image au format de nom de domaine personnalisé.

      • La création de fonctions n'est pas possible avec des images provenant de dépôts dont l'accélération d'image est activée en mode index-only. Cette restriction s'applique aux instances Container Registry Enterprise Edition (Standard et Advanced).

      • Depuis l'introduction du mode index-only par Alibaba Cloud Container Registry, vous ne pouvez plus créer de fonctions avec des images issues de nouveaux dépôts dans les instances Enterprise Edition (Basic) lorsque l'accélération d'image est activée. En revanche, les images des dépôts accélérés déjà existants restent utilisables. Pour en savoir plus sur le mode index-only, consultez la rubrique Charger des images de conteneur à la demande.

      Container Image

      Custom Container

      Sélectionnez l'image cible.

      Image d'exemple d'application web SpringBoot

      Container Image

      Commande de démarrage du programme. Si ce champ reste vide, Function Compute utilise par défaut l'Entrypoint ou le CMD définis dans l'image.

      Aucun

      Startup Command

      Port sur lequel écoute le serveur HTTP de votre code.

      9000

      Listening Port

      Définissez le délai d'expiration. Le Execution Timeout Period est fixé par défaut à 60 secondes, avec un maximum de 86 400 secondes.

      60

    • Execution Timeout Period : précharge le modèle afin d'éliminer la latence de démarrage à froid lors de la première requête dans les scénarios d'inférence IA.

      Élément de configuration

      Description

      Exemple

      Instance Prefetch

      Instance Prefetch

      Exécute un script ou appelle une interface pour charger le modèle après le démarrage de l'instance, mais avant qu'elle ne traite les requêtes.

      Configurer le cycle de vie de l'instance.

      Activé

      Instance Prefetch

      Délai d'expiration du hook Initializer.

      60

      Timeout

      Deux types de hooks : Prefetch Program Type et Execute Instruction.

      Execute Instruction

      Invoke Code

      Instruction à exécuter. Les shells personnalisés suivants sont pris en charge : /bin/bash, /bin/sh, /bin/csh, /bin/zsh. Assurez-vous que le runtime prend en charge le shell sélectionné.

      Implémentation de la méthode de rappel

    • Permissions, Network, and Storage : configurez le rôle d'exécution de la fonction, le réseau et le montage du stockage.

      Élément de configuration

      Description

      Exemple

      Instruction Content

      Function Compute endosse ce rôle Resource Access Management (RAM) pour générer des identifiants temporaires permettant d'accéder aux ressources Alibaba Cloud et les transmettre au code. Pour plus d'informations, consultez Utiliser un rôle de fonction pour accéder à d'autres services cloud.

      mytestrole

      Execution Role

      Permet à la fonction d'accéder aux ressources au sein d'un VPC. Pour plus d'informations, consultez Configurer le réseau.

      Activer

      VPC Access

      Requis lorsque l'Accès VPC est défini sur Oui. Créez un nouveau VPC ou sélectionnez l'ID du VPC à utiliser dans la liste déroulante.

      fc.auto.create.vpc.1632317****

      VPC

      Requis lorsque l'Accès VPC est défini sur Oui. Créez un nouveau vSwitch ou sélectionnez un ID de vSwitch dans la liste déroulante.

      fc.auto.create.vswitch.vpc-bp1p8248****

      vSwitch

      Requis lorsque l'Accès VPC est défini sur Oui. Créez un nouveau groupe de sécurité ou sélectionnez-en un dans la liste déroulante.

      fc.auto.create.SecurityGroup.vsw-bp15ftbbbbd****

      Autoriser l'accès à Internet via la carte réseau par défaut

      Sélectionnez Oui ou Non pour autoriser la fonction à accéder à Internet via l'interface réseau par défaut.

      Important

      Lorsque vous utilisez la fonctionnalité d'adresse IP publique fixe, vous devez désactiver l'option Autoriser l'accès à Internet via la carte réseau par défaut. Sinon, l'adresse IP publique fixe configurée ne prendra pas effet. Pour plus d'informations, consultez Configurer une adresse IP publique statique.

      Activer

      Security Group

      Montez un système de fichiers NAS sur la fonction pour assurer le stockage persistant des données partagées entre les fonctions, telles que les modèles utilisés par plusieurs fonctions d'inférence.

      Si vous sélectionnez Configuration automatique, le système utilise par défaut le système de fichiers Network Attached Storage (NAS) à usage général existant nommé Alibaba-Fc-V3-Component-Generated. Si aucun système de fichiers NAS éligible n'existe sous le compte actuel, le système en crée automatiquement un.

      Activer

      NAS Mounting

      Montez Object Storage Service (OSS) sur la fonction pour assurer le stockage persistant des journaux, des fichiers métier, etc. Pour plus d'informations, consultez Configurer un montage OSS.

      Activer

    • Journalisation et traçabilité

      Élément de configuration

      Description

      Exemple

      Fonctionnalité de journalisation

      Configurez cette option pour persister les journaux d'exécution des fonctions dans Log Service afin de déboguer le code, résoudre les problèmes et analyser les données. Pour plus d'informations, consultez Configurer la fonctionnalité de journalisation.

      • Configuration automatique : sélectionne automatiquement le projet de journalisation commençant par serverless-<region_id>.

        Un seul projet de ce type est créé par région. Si le système détecte un projet de journalisation existant dans la région actuelle, il l'utilise directement.

      • Configuration personnalisée : vous devez spécifier manuellement le OSS Mounting et le Log Project cibles.

      Activer

    • Logstore

      Élément de configuration

      Description

      Exemple

      Other Configurations

      Sélectionnez le fuseau horaire de la fonction. Une fois le fuseau horaire défini, une variable d'environnement TZ est automatiquement ajoutée avec la valeur correspondant au fuseau horaire cible.

      UTC

      Timezone

      Définissez des tags pour la fonction afin de prendre en charge la gestion par groupe. Vous devez définir à la fois la clé et la valeur du tag.

      key : value

      Tags

      Sélectionnez les groupes de ressources pour la fonction afin de gérer les fonctions par groupe.

      Groupe de ressources par défaut

      Resource Group

      Utilisez des variables d'environnement pour ajuster le comportement de la fonction sans modifier le code. Pour plus d'informations, consultez Configurer les variables d'environnement.

      {
          "BUCKET_NAME": "MY_BUCKET",
          "TABLE_NAME": "MY_TABLE"
      }

    Une fois la fonction créée, vous pouvez la consulter et la mettre à jour sur la page Functions .

Remarque

Lors de la mise à jour de la fonction, vous pouvez modifier le port d'écoute configuré, mais vous ne pouvez ni ajouter ni supprimer de ports. Si vous avez configuré un port d'écoute lors de la création de la fonction et que vous n'en spécifiez aucun lors de la mise à jour, le système conserve la configuration de port d'origine.

Créer une fonction avec Serverless Devs

Utilisez Serverless Devs pour générer et pousser des images de conteneur, puis déployer des fonctions via un flux de commandes unique.

  1. Exécutez la commande suivante pour initialiser un projet.

    sudo s init

    Suivez les instructions affichées à l'écran pour sélectionner un compte Alibaba Cloud, un modèle de conteneur personnalisé et un langage (Node.js est utilisé dans cet exemple). Définissez ensuite le nom du projet, sélectionnez une région de déploiement et saisissez votre image ACR.

  2. Exécutez la commande suivante pour accéder au répertoire du projet.

    cd start-fc3-custom-container-nodejs
  3. Modifiez le fichier s.yaml. Pour plus d'informations sur les paramètres du fichier YAML, consultez la section Spécification YAML.

    Le code suivant fournit un exemple.

    Dans cet exemple, image fait référence à votre image Alibaba Cloud Container Registry. Remplacez <your namespace>, <your image> et <your tag> par votre espace de noms réel, le nom de votre dépôt d'images et votre tag d'image. Si vous avez déjà saisi les informations d'image correctes lors de l'initialisation du projet à l'étape Étape 1, vous n'avez pas besoin de les modifier ici.

    edition: 3.0.0
    name: hello-world-app
    # access specifies the key configuration required by the current application:
    # For key configuration, see: https://www.serverless-devs.com/serverless-devs/command/config
    # For key usage order, see: https://www.serverless-devs.com/serverless-devs/tool#key-usage-order-and-specifications
    access: "default"
    
    vars: # Global variables
      region: "cn-hangzhou"
    
    resources:
      hello_world:
        # To perform operations only on the hello_world business module, append hello_world to the command line. For example:
        # To build only hello_world: s hello_world build
        # If you run s build directly without specifying hello_world, the tool will build all business modules at the same level as hello_world in the current YAML file (if there are other sibling modules, such as the commented next_function below) in a certain order
        component: fc3 # Component name
        actions: # Custom execution logic
          pre-deploy: # Run before deploy
            - component: fc3 build --dockerfile ./code/Dockerfile # Component to run, in the format "component: component_name command parameters"
        props:
          region: ${vars.region} # For variable usage, see: 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>' # Your ACR image. Replace <your namespace>, <your image>, and <your tag> with the actual namespace name, image repository name, and image tag.
          # triggers:
          #   - triggerName: httpTrigger # Trigger name
          #     triggerType: http # Trigger type
          #     description: 'xxxx'
          #     qualifier: LATEST # Service version to trigger
          #     triggerConfig:
          #       authType: anonymous # Authentication type. Valid values: anonymous, function
          #       disableURLInternet: false # Specifies whether to disable public network access URL
          #       methods: # HTTP methods supported by the HTTP trigger. Valid values: GET, POST, PUT, DELETE, HEAD
          #         - GET
          #         - POST
  4. Exécutez la commande suivante pour déployer le projet.

    sudo s deploy

    La sortie suivante constitue un exemple :

      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
  5. Exécutez la commande suivante pour déboguer la fonction.

    sudo s invoke -e "{\"key\":\"val\"}"

    La sortie suivante constitue un exemple :

     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

Documentation connexe

  • Lorsque vous utilisez une fonction de conteneur personnalisé, l'environnement de base dont dépend l'image de conteneur nécessite un temps supplémentaire pour le téléchargement et la décompression. Pour réduire le temps de démarrage à froid, consultez la section Bonnes pratiques pour optimiser les démarrages à froid dans Function Compute.

  • Les fonctions peuvent également être créées en appelant une opération API. Pour plus d'informations, consultez la section CreateFunction.

  • Pour plus d'informations sur les scénarios applicables et les différences entre les environnements d'exécution intégrés, les environnements d'exécution personnalisés et les environnements d'exécution de conteneurs personnalisés fournis par Function Compute, consultez la section Sélection technologique.