Object Storage Service (OSS) est un service de stockage cloud massif, sécurisé, économique et hautement fiable. Vous pouvez monter un compartiment OSS sur Function Compute, ce qui permet à votre fonction d'interagir avec OSS comme s'il s'agissait d'un système de fichiers local. Cette approche simplifie l'accès aux ressources et les flux de travail de traitement des données.
Limites
Une fonction Function Compute prend en charge jusqu'à cinq cibles de montage NAS et cinq cibles de montage OSS dans la même région.
-
Les répertoires locaux des cibles de montage NAS et OSS doivent être uniques au sein de l'environnement d'exécution de la fonction.
Pour plus d'informations sur la configuration des cibles de montage NAS, consultez Configurer un système de fichiers NAS.
Prérequis
-
Object Storage Service (OSS)
-
Function Compute
-
La fonctionnalité de montage OSS nécessite un rôle RAM accordant à votre fonction l'autorisation d'accéder à OSS. Pour plus de détails, consultez Accorder à une fonction des autorisations d'accès à d'autres services cloud via un rôle de fonction.
-
Procédure
Étape 1 : Configurer une cible de montage OSS
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 le nom de la fonction cible.
-
Sur la page des détails de la fonction, cliquez sur l'onglet Configuration. Cliquez sur Advanced Settings à droite de Modify. Dans le panneau Advanced Settings, repérez la section Storage, activez l'option Mount OSS, configurez les paramètres, puis cliquez sur Deploy.
Paramètre
Description
Exemple
OSS Mount Target : Configurez la cible de montage OSS.
Compartiment
Sélectionnez un compartiment existant. Pour en créer un nouveau, cliquez sur Create OSS Bucket afin d'ouvrir la console OSS. Pour obtenir des informations sur les frais associés à OSS, consultez Présentation de la facturation OSS.
example-bucket
Bucket Subdirectory
Spécifiez un sous-répertoire dans le compartiment. Il doit s'agir d'un chemin absolu. Si vous laissez ce champ vide ou le définissez sur /, le répertoire racine du compartiment est monté.
/files
OSS Endpoint
Lorsque vous sélectionnez un compartiment, le système choisit automatiquement son endpoint. Vous pouvez sélectionner Custom Endpoint pour modifier l'adresse de l'endpoint. Pour obtenir la liste des endpoints OSS par région, consultez Régions et endpoints.
RemarqueSi le compartiment et votre fonction Function Compute se trouvent dans la même région, utilisez un endpoint interne.
Si le compartiment se trouve dans une autre région, utilisez un endpoint public. Cela entraîne des frais de transfert de données sortantes.
Default Endpoint
Local directory of a function
Spécifiez un répertoire local dans l'environnement d'exécution de la fonction. Le répertoire doit être un sous-répertoire de /home, /mnt ou /data.
/mnt/oss
Permissions on the local directory of the function
Sélectionnez les autorisations pour le répertoire local. Vous pouvez choisir Read-only ou Read and Write.
Lecture/écriture
RemarqueLa fonctionnalité de montage OSS dépend de la configuration réseau de la fonction. Si votre fonction est configurée pour accéder uniquement à un VPC et que l'option Allow Default NIC to Access Internet est définie sur No, la fonction doit pouvoir accéder à Internet via le VPC spécifié pour utiliser un endpoint OSS public. Pour plus de détails, consultez Configurer une adresse IP publique statique.
Étape 2 : Accéder aux fichiers du répertoire monté
Après avoir configuré la cible de montage OSS, vous pouvez accéder aux fichiers du répertoire monté comme s'ils étaient locaux.
-
Sur la page des détails de la fonction, cliquez sur l'onglet Code. Saisissez votre code dans l'éditeur, puis cliquez sur Deploy.
Le code suivant fournit un exemple.
import os def handler(event, context): # Mount directory mount_path = '/mnt/oss' # List files in the mount directory files = os.listdir(mount_path) print("Files in OSS mount:", files) # Read a specific file from the mount directory file_path = os.path.join(mount_path, 'example.txt') if os.path.exists(file_path): with open(file_path, 'r') as file: content = file.read() print("Content of example.txt:", content) else: print("example.txt does not exist.") # Write a file to the mount directory write_path = os.path.join(mount_path, 'output.txt') with open(write_path, 'w') as file: file.write("Hello, OSS mount!") print("Wrote to output.txt in OSS mount.") return "Function execution completed."RemarqueDans le code, remplacez
example.txtpar le nom d'un fichier réel existant dans votre répertoire OSS monté. -
Une fois le code déployé, cliquez sur Code dans l'onglet Test Function.
Une fois l'exécution terminée, vous pouvez consulter les résultats en bas de l'onglet Code. L'onglet Log Output affiche le contenu du fichier
example.txtlu depuis le répertoire OSS. Vous pouvez également vous rendre dans la console OSS pour vérifier que le fichieroutput.txta bien été écrit dans le répertoire monté correspondant.
FAQ
Erreur de montage OSS : bucket not found
Vérifiez que l'endpoint d'accès OSS et le nom du compartiment sont corrects.
Erreur de montage OSS : host resolv error ou deadline exceeded
Vérifiez que l'adresse de l'endpoint est correcte.
L'erreur
host resolv errorse produit si l'adresse de l'endpoint ne peut pas être résolue.Les endpoints internes ne peuvent pas être utilisés entre différentes régions. L'utilisation d'un endpoint interne pour une fonction située dans une autre région provoque un délai de connexion dépassé, entraînant l'erreur
deadline exceeded.
Erreur de montage : invalid credentials
Vérifiez que le rôle RAM configuré pour votre fonction dispose des autorisations nécessaires pour accéder à OSS. Pour plus de détails, consultez Accorder à une fonction des autorisations d'accès à d'autres services cloud via un rôle de fonction. Les autorisations requises sont les suivantes :
Read-only : Nécessite les autorisations
oss:ListObjectsetoss:GetObject.Read and Write : Nécessite les autorisations
oss:ListObjects,oss:GetObject,oss:PutObject,oss:DeleteObject,oss:ListPartsetoss:AbortMultipartUpload.
L'action oss:ListObjects s'effectue au niveau du compartiment. Par conséquent, lorsque vous accordez l'accès à un compartiment spécifique, la stratégie d'autorisation doit inclure un ARN de ressource au niveau du compartiment, tel que acs:oss:*:*:bucketName. Pour plus d'informations, consultez Ressource OSS.
Input/output error lors de la lecture des fichiers montés.
Vérifiez la classe de stockage de votre compartiment OSS. Si la classe de stockage est Archive ou Cold Archive, les objets du compartiment sont gelés et doivent être restaurés avant de pouvoir y accéder. Définissez la classe de stockage de votre compartiment OSS sur Standard.
Comment afficher les fichiers dans le répertoire local
Sur la page des détails de la fonction, cliquez sur l'onglet Instance. Dans la liste des instances à l'état Running, sélectionnez une instance et cliquez sur Connect to Instance dans la colonne Actions.
-
Une fois connecté à l'instance, vous pouvez exécuter des commandes pour afficher les informations sur les fichiers du répertoire local configuré. Par exemple :
root@sr-65b30dd4-4f47295574cd41849c5f:/code# cd /mnt/oss root@sr-65b30dd4-4f47295574cd41849c5f:/mnt/oss# ls my.zip output.txt 's (1).yaml' 下载.html 下载.json root@sr-65b30dd4-4f47295574cd41849c5f:/mnt/oss# cd ../ root@sr-65b30dd4-4f47295574cd41849c5f:/mnt# ls oss root@sr-65b30dd4-4f47295574cd41849c5f:/mnt#
Erreur d'accès à la cible de montage : Transport endpoint is not connected
Cette erreur se produit lorsque la fonctionnalité de montage OSS échoue en raison d'une mémoire insuffisante, ce qui peut être causé par des spécifications de mémoire faibles ou une utilisation élevée de la mémoire. Augmentez la spécification de mémoire de votre fonction en fonction de vos besoins métier. Un minimum de 512 Mo est recommandé lors de l'utilisation d'une cible de montage OSS.
Persistance des données dans les répertoires de fonction
Les données écrites dans le répertoire d'une fonction sont supprimées lorsque l'instance de fonction est détruite. Pour garantir la persistance des données, vous pouvez monter un système de fichiers NAS ou un compartiment OSS. Pour plus de détails, consultez Configurer un système de fichiers NAS et Configurer un montage OSS.
Accès en lecture seule pour un compartiment
Accès en lecture/écriture pour un compartiment
Accès en lecture seule pour un sous-répertoire
Accès en lecture/écriture pour un sous-répertoire
Les fichiers apparaissent vides lors des opérations d'écriture
Lorsque vous écrivez dans un fichier via une cible de montage OSS, le système télécharge généralement le contenu vers OSS uniquement après que vous avez explicitement appelé la méthode flush() ou fermé le fichier.
Performances lentes pour la compression ou le transfert de fichiers
OSS ne prend pas nativement en charge les API de système de fichiers. Lorsque vous montez un compartiment OSS en tant que répertoire, Function Compute émule le comportement des API de système de fichiers en combinant et en encapsulant les API OSS. Par exemple, comme OSS ne prend pas en charge les écritures aléatoires, la modification d'un fichier existant sur une cible de montage OSS oblige Function Compute à télécharger l'intégralité du fichier source depuis OSS, à le modifier, puis à le retélécharger.
Les performances sont généralement bonnes pour les opérations où les API de système de fichiers correspondent directement aux fonctions d'API OSS, telles que les lectures et écritures séquentielles de fichiers. Cependant, les opérations nécessitant la combinaison de plusieurs API OSS, comme les opérations de lecture et d'écriture aléatoires utilisées dans la compression ou la décompression de fichiers, impliquent de nombreuses interactions avec OSS et sont donc plus lentes que sur un système de fichiers local.
Synchronisation entre les instances de fonction
Non. Les instances de fonction sont indépendantes les unes des autres, de sorte que l'accès à une cible de montage OSS n'est pas synchronisé entre elles. Par exemple, si l'instance A crée un fichier dans la cible de montage, l'instance B pourrait ne pas voir ce fichier immédiatement.