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.

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

-
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
RemarqueLa 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)
Créer une fonction dans la console
Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, sélectionnez .
Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur Create Function.
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.
-
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-
Tous les répertoires du disque sont accessibles en écriture et partagent le même espace.
-
Les données du disque sont perdues lors de la récupération de l'instance. Pour la persistance, montez un système de fichiers NAS (Configurer un système de fichiers NAS) ou un bucket OSS (Configurer Object Storage Service).
-
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.
RemarqueSi 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-
Tous les répertoires du disque sont accessibles en écriture et partagent le même espace.
-
Les données du disque sont perdues lors de la récupération de l'instance. Pour la persistance, montez un système de fichiers NAS (Configurer un système de fichiers NAS) ou un bucket OSS (Configurer Object Storage Service).
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.
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.
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é. -
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.
ImportantLorsque 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 .
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.
-
Exécutez la commande suivante pour initialiser un projet.
sudo s initSuivez 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.
-
Exécutez la commande suivante pour accéder au répertoire du projet.
cd start-fc3-custom-container-nodejs -
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,
imagefait 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 -
Exécutez la commande suivante pour déployer le projet.
sudo s deployLa 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 -
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.