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.

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

-
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
RemarqueL'é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)
Instructions
Créer une fonction dans la console
Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez .
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 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-
Tous les répertoires de 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 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.
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, 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-
Tous les répertoires de 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 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.
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.
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é. -
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.
ImportantLorsque 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 .
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.
-
Exécutez la commande suivante pour initialiser un projet.
sudo s initSuivez 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.
-
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 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 -
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 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.