Tous les produits
Search
Centre de documentation

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

Dernière mise à jour :Sep 21, 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é dans la console Function Compute ou à l'aide de l'outil Serverless Devs.

Notes d'utilisation

  • Pour créer une fonction de conteneur personnalisé dans Function Compute, vous devez utiliser une image Alibaba Cloud Container Registry provenant de la même région et du 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 génération comme étant linux/amd64. Exemple : docker build --platform linux/amd64 -t $IMAGE_NAME ..

  • Function Compute résout les noms de domaine pour les images de l'édition Enterprise d'Alibaba Cloud Container Registry 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'est affiché 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 de VPC peut être utilisée.

      image

    • Scénario 2 : Si, sur la page Access Control d'une instance Container Registry (ACR) édition Enterprise, 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 de VPC, comme illustré dans la figure suivante.

      image

  • Lorsque vous utilisez une instance édition Enterprise, vous ne pouvez sélectionner que des images non accélérées. Chaque fois que vous mettez à jour la configuration d'image d'une fonction, le système génère une nouvelle image accélérée basée sur la dernière image originale sélectionnée, en écrasant toute image accélérée existante. Ne supprimez pas les images originales ou accélérées, car cela affecterait l'appel des fonctions.

  • Assurez-vous de mettre à jour votre fonction rapidement si l'image qui lui est configurée change. Sinon, les appels de fonction échoueront.

    • Vérifiez que l'image originale existe. Sinon, la fonction passe à l'état Failed et ne peut pas être appelée. Bien que Function Compute mette en cache votre fonction pour réduire les temps de démarrage à froid, les appels nécessitent toujours l'image originale.

    • Veillez à ce que l'image utilisée dans votre fonction ne soit pas écrasée par un digest différent. Si cela se produit, vous devez redéployer votre fonction avec les dernières informations d'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 des mises à jour de la fonction. Si le tag de l'image est mis à jour ailleurs pour pointer vers un nouveau digest, les appels de fonction échoueront.

Prérequis

  • Container Registry

    • Créer une instance édition Enterprise

      Remarque
      • L'édition Personal 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 bêta publique. Cette édition ne comprend aucun accord de niveau de service (SLA) ni compensation pour dommages, et présente des limites d'utilisation. Pour plus d'informations sur les limites d'utilisation, consultez les notes d'utilisation dans Créer une instance édition Personal.

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

    Installer et configurer Serverless Devs

Instructions

Créer une fonction dans la console

  1. Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez 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 s'adaptent au 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 fournit 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, le Minimum Number Of Instances le plus élevé devient le Minimum Number Of Instances effectif.

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

      Parameter

      Description

      Example

      Code

      • Use Sample Images : sélectionnez une image d'exemple fournie par Function Compute pour déployer rapidement une fonction de conteneur personnalisé. Vous devez sélectionner une image cible dans la liste sous le paramètre Runtime.

      • Use Container Registry Images : cliquez sur Select ACR Image sous le paramètre Container Image. Dans le panneau Select Container Image , sélectionnez l'Container Image existant et le ACR Image Repository. Ensuite, recherchez l'image cible dans la liste d'images ci-dessous et cliquez sur Select dans la colonne Actions.

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

      • Assurez-vous de mettre à jour votre fonction rapidement si l'image configurée pour celle-ci change. Sinon, les invocations de fonction échoueront. Pour plus d'informations, consultez Remarques d'utilisation.

      • Lorsque vous utilisez une instance Enterprise Edition, vous ne pouvez sélectionner que des images non accélérées. Ne supprimez pas les images originales ou accélérées, car cela affecterait les invocations de fonction. Pour plus d'informations, consultez Remarques d'utilisation.

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

      • Vous ne pouvez pas créer de fonctions en utilisant des images provenant de dépôts pour lesquels l'accélération d'image est activée en index-only mode. Cela s'applique aux instances Container Registry Enterprise Edition (Standard et Advanced).

      • Après l'introduction de la fonctionnalité index-only mode par Alibaba Cloud Container Registry, vous ne pouvez plus créer de fonctions en utilisant des images provenant de dépôts nouvellement créés dans les instances Enterprise Edition (Basic) si l'accélération d'image est activée. Cependant, vous pouvez toujours utiliser des images provenant de dépôts accélérés existants dans ces instances. Pour plus d'informations sur le index-only mode, consultez Charger des images de conteneur à la demande.

      Custom Container

      Container Image

      Sélectionnez l'image cible.

      SpringBoot Web App Sample Image

      Startup Command

      La commande de démarrage du programme. Si elle n'est pas spécifiée, Function Compute utilise par défaut l'Entrypoint ou le CMD de l'image.

      Aucun

      Listening Port

      Le port sur lequel le serveur HTTP de votre code écoute.

      9000

      Execution Timeout Period

      Définissez la période de délai d'attente. La Execution Timeout Period est par défaut de 60 secondes, avec un maximum de 86 400 secondes.

      60

    • Instance Prefetch : précharge le modèle pour éliminer la latence de démarrage à froid pour la première requête dans les scénarios d'inférence IA.

      Configuration Item

      Description

      Example

      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é

      Timeout

      Délai d'attente pour le hook Initializer.

      60

      Prefetch Program Type

      Deux types de hooks : Execute Instruction et Invoke Code.

      Execute Instruction

      Instruction Content

      L'instruction à exécuter. Prend en charge les shells personnalisés : /bin/bash, /bin/sh, /bin/csh, /bin/zsh. Assurez-vous que l'environnement d'exécution 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.

      Configuration Item

      Description

      Example

      Execution Role

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

      mytestrole

      VPC Access

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

      Activer

      VPC

      Requis lorsque VPC Access est défini sur Yes. Créez un nouveau VPC ou sélectionnez l'ID VPC à accéder dans la liste déroulante.

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

      vSwitch

      Requis lorsque VPC Access est défini sur Yes. Créez un nouveau vSwitch ou sélectionnez un ID vSwitch dans la liste déroulante.

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

      Security Group

      Requis lorsque VPC Access est défini sur Yes. Créez un nouveau groupe de sécurité ou sélectionnez un groupe de sécurité dans la liste déroulante.

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

      Allow Default NIC to Access Internet

      Sélectionnez Yes ou No pour permettre à la fonction d'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 Allow Default NIC to Access Internet. Sinon, l'adresse IP publique fixe configurée ne prendra pas effet. Pour plus d'informations, consultez Configurer une adresse IP publique statique.

      Activer

      NAS Mounting

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

      Si vous sélectionnez Automatic Configuration, le système utilise par défaut le système de fichiers NAS (Network Attached Storage) à 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

      OSS Mounting

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

      Activer

    • Logging and Tracing

      Configuration Item

      Description

      Example

      Log Feature

      Configurez cette option pour persister les journaux d'exécution de la fonction 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.

      • Automatic Configuration : sélectionne automatiquement le projet de journal qui commence par serverless-<region_id>.

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

      • Custom Configuration : vous devez spécifier manuellement le Log Project et le Logstore cibles.

      Activer

    • Other Configurations

      Configuration Item

      Description

      Example

      Timezone

      Sélectionnez le fuseau horaire de la fonction. Après avoir défini le fuseau horaire, une variable d'environnement TZ est automatiquement ajoutée avec la valeur définie sur le fuseau horaire cible.

      UTC

      Tags

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

      key : value

      Resource Group

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

      Default Resource Group

      Environment Variables

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

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

    Après avoir créé la fonction, 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 pas 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 d'une 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 à 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 référentiel d'images et votre tag d'image. Si vous avez déjà saisi les informations correctes sur l'image 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 Meilleures 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.