Création d'un contexte d'interface de ligne de commande de projet Fn pour la connexion à Oracle Cloud Infrastructure

Découvrez comment créer un contexte d'interface de ligne de commande de projet Fn permettant de se connecter à Oracle Cloud Infrastructure pour une utilisation avec OCI Functions.

Avant d'utiliser OCI Functions, vous devez configurer l'interface de ligne de commande du projet Fn pour la connexion à votre location Oracle Cloud Infrastructure.

Lors de l'installation initiale de l'interface de ligne de commande du projet Fn, l'interface est configurée pour un "contexte" de développement local. Afin de configurer l'interface de ligne de commande du projet Fn pour la connexion à votre location Oracle Cloud Infrastructure, vous devez créer un contexte. Le contexte indique les adresses OCI Functions, l'OCID du compartiment auquel les fonctions déployées appartiendront et l'adresse du registre Docker vers et à partir duquel les images seront propagées et extraites.

Vous pouvez définir plusieurs contextes, chacun étant stocké dans un fichier de contexte différent au format .yaml. Par défaut, chaque fichier de contexte est stocké dans le répertoire ~/.fn/contexts. Le fichier ~/.fn/config.yaml indique le fichier de contexte utilisé par le projet Fn.

Pour créer un contexte, vous pouvez créer manuellement un fichier de contexte et modifier manuellement le fichier ~/.fn/config.yaml afin qu'il pointe vers ce fichier. Vous pouvez également utiliser l'interface de ligne de commande du projet Fn pour créer le fichier de contexte de façon interactive et indiquer à l'interface de ligne de commande du projet Fn de commencer à utiliser ce fichier, comme décrit ci-dessous.

Si vous utilisez Cloud Shell en tant qu'environnement de développement, deux contextes d'interface de ligne de commande de projet Fn ont déjà été créés pour vous (contexte par défaut et contexte pour la région en cours). Pour plus d'informations, reportez-vous au guide QuickStart d'OCI Functions on Cloud Shell. Il vous suffit de copier et coller des commandes à partir de la page Mise en route dans la fenêtre Cloud Shell :

  • pour indiquer à l'interface de ligne de commande du projet Fn d'utiliser le contexte de la région en cours
  • pour fournir l'OCID du compartiment qui sera propriétaire des fonctions déployées
  • afin de fournir l'adresse Oracle Cloud Infrastructure Registry à utiliser avec OCI Functions

Les instructions de cette rubrique sont basées sur les principes suivants :

Pour créer un fichier de contexte à l'aide de l'interface de ligne de commande du projet Fn, procédez comme suit :

  1. Connectez-vous à votre environnement de développement en tant que développeur de fonctions.

  2. Dans une fenêtre de terminal, créez le contexte de l'interface de ligne de commande du projet Fn pour Oracle Cloud Infrastructure en saisissant la commande suivante :

    fn create context <my-context> --provider oracle

    où <my-context> représente le nom de votre choix. Par exemple :

    fn create context johns-oci-context --provider oracle

    Vous indiquez --provider oracle pour activer l'authentification et l'autorisation à l'aide de la signature de demande, des clés privées, des groupes d'utilisateurs et des stratégies Oracle Cloud Infrastructure accordant à ces derniers des droits d'accès.

  3. Indiquez que l'interface de ligne de commande du projet Fn doit utiliser le nouveau contexte en saisissant la commande suivante :

    fn use context <my-context>

    où <my-context> représente le nom que vous avez indiqué à l'étape précédente. Par exemple :

    fn use context johns-oci-context
  4. Configurez le nouveau contexte avec l'OCID du compartiment auquel les fonctions déployées doivent appartenir (vous avez peut-être créé un compartiment spécifiquement pour cet objectif ; reportez-vous à Création de compartiments vers des ressources réseau et des ressources OCI Functions dans la location (s'ils n'existent pas déjà)) en saisissant la commande suivante :

    fn update context oracle.compartment-id <compartment-ocid>

    Par exemple :

    fn update context oracle.compartment-id ocid1.compartment.oc1..aaaaaaaarvdfa72n...
  5. Configurez le nouveau contexte avec l'adresse api-url à utiliser lors de l'appel de l'API en saisissant la commande suivante :

    fn update context api-url <api-endpoint>

    <api-endpoint> représente l'une des adresses dans la liste des adresses Functions dans l'API Functions, au format https://functions.<region-identifier>.oci.oraclecloud.com. Le fichier <region-identifier> dans <api-endpoint> représente l'identificateur de la région Oracle Cloud Infrastructure dans laquelle vous allez créer et déployer des fonctions. Par exemple, us-phoenix-1.

    Par exemple :

    fn update context api-url https://functions.us-phoenix-1.oci.oraclecloud.com
  6. Pour configurer le nouveau contexte avec l'adresse du registre Docker (par exemple, Oracle Cloud Infrastructure Registry) à utiliser avec OCI Functions, entrez la commande suivante :

    fn update context registry <region-key>.ocir.io/<tenancy-namespace>/<repo-name-prefix>

    où :

    • <region-key> représente la clé de la région Oracle Cloud Infrastructure Registry. Par exemple : phx pour Phoenix. Reportez-vous à Disponibilité par région.

      Nous recommandons que le registre Docker indiqué soit dans la même région que le sous-réseau sur lequel vous comptez exécuter des fonctions.

    • <tenancy-namespace> représente la chaîne d'espace de travail Object Storage générée automatiquement pour la location dans laquelle créer les référentiels (comme indiqué sur la page Informations sur la location). Par exemple, l'espace de noms de la location acme-dev peut être ansh81vru1zp. Pour certaines locations antérieures, la chaîne d'espace de noms peut être identique au nom de la location en minuscules (par exemple, acme-dev).
    • <repo-name-prefix> est (facultatif) un préfixe de nom de référentiel à pré-ajouter aux noms des fonctions que vous déployez, afin d'indiquer les noms des référentiels vers lesquels propager les images de fonction. L'utilisation d'un préfixe de nom de référentiel peut faciliter l'organisation et le contrôle de l'accès aux référentiels dans le registre. Reportez-vous à Remarques sur les noms de référentiel et les préfixes de nom de référentiel.

    Par exemple :

    fn update context registry phx.ocir.io/ansh81vru1zp/acme-repo
  7. (Facultatif) Configurez le nouveau contexte avec l'OCID du compartiment pour les référentiels vers et à partir desquels OCI Functions doit propager et extraire des images de fonction, en saisissant ce qui suit :

    fn update context oracle.image-compartment-id <compartment-ocid>

    Par exemple :

    fn update context oracle.image-compartment-id ocid1.compartment.oc1..aaaaaaaaquqe______z2q
    

    Si vous n'indiquez pas de valeur pour oracle.image-compartment-id, OCI Functions propage et extrait des images vers et depuis des référentiels dans le compartiment racine. Dans les deux cas, une instruction de stratégie appropriée doit exister pour vous permettre de gérer les référentiels dans le compartiment (compartiment indiqué par oracle.image-compartment-id ou compartiment racine). Reportez-vous à Instructions de stratégie pour permettre aux utilisateurs OCI Functions d'accéder aux référentiels Oracle Cloud Infrastructure Registry.

    OCI Functions construit le nom du référentiel pour une image de fonction en ajoutant le préfixe de nom de référentiel au nom de fonction. Les noms de référentiel sont uniques dans tous les compartiments de l'ensemble de la location. OCI Functions se comporte comme suit en ce qui concerne les compartiments et oracle.image-compartment-id lors de la propagation d'une image vers un référentiel nommé :

    • Si un référentiel portant ce nom existe déjà dans le compartiment indiqué par oracle.image-compartment-id, OCI Functions propage l'image vers ce référentiel.
    • Si aucun référentiel portant ce nom n'existe dans un compartiment (y compris dans le compartiment racine) de la location, OCI Functions crée un référentiel portant ce nom dans le compartiment indiqué par oracle.image-compartment-id et y propage l'image.
    • Si un référentiel portant ce nom existe déjà dans la location mais dans un compartiment différent de celui indiqué par oracle.image-compartment-id, OCI Functions génère une erreur. Pour qu'OCI Functions propage l'image, vous devez définir oracle.image-compartment-id sur l'OCID du compartiment du référentiel existant, ou indiquer un autre nom de référentiel (en renommant la fonction ou en indiquant un autre préfixe de nom de référentiel).
  8. (Facultatif) Vérifiez le contexte de l'interface de ligne de commande du projet Fn que vous avez créé en affichant le fichier de contexte. Par exemple, entrez la commande suivante :

    more ~/.fn/contexts/johns-oci-context.yaml

    Le fichier de contexte contient :

    api-url: https://functions.us-phoenix-1.oci.oraclecloud.com
    provider: oracle
    registry: phx.ocir.io/ansh81vru1zp/acme-repo
    oracle.image-compartment-id: <compartment-ocid>

Une fois que vous avez effectué les étapes de cette rubrique, reportez-vous à Définition du contexte pour l'interface de ligne de commande du projet Fn à l'aide du paramètre oracle.profile.

Remarques sur les noms de référentiel et les préfixes de nom de référentiel

Lors du déploiement d'une fonction, l'image de la fonction est propagée vers un référentiel dans le registre indiqué par le paramètre registry: dans le contexte de l'interface de ligne de commande du projet Fn. Le nom du référentiel est identique au nom de la fonction (c'est-à-dire <function-name>) ou au nom de la fonction avec un préfixe de nom de référentiel ajouté au début (c'est-à-dire <repo-name-prefix>/<function-name>).

Lors du déploiement d'une fonction, tenez compte des points suivants. Si un référentiel nommé <function-name> (ou <repo-name-prefix>/<function-name> si vous avez indiqué <repo-name-prefix>) n'existe pas déjà dans le registre :

  • Si la propriété Créer un référentiel lors de la première propagation dans le compartiment racine du registre est définie sur True, un référentiel privé est créé dans le compartiment racine
  • Si la propriété Créer un référentiel lors de la première propagation dans le compartiment racine du registre est définie sur False, il est impossible de créer un référentiel et la tentative de propagation de l'image de fonction échoue.

Si la propriété Créer un référentiel lors de la première propagation dans le compartiment racine du registre est définie sur False et qu'aucun référentiel approprié n'existe, effectuez l'une des opérations suivantes avant de déployer une fonction :

  • Créez un référentiel portant le même nom que la fonction et n'indiquez pas de valeur <repo-name-prefix> dans le contexte de l'interface de ligne de commande du projet Fn. Par exemple, si la fonction est nommée hello-world, créez un référentiel nommé hello-world.
  • Créez une fonction portant le même nom qu'un référentiel existant et n'indiquez pas de valeur <repo-name-prefix> dans le contexte de l'interface de ligne de commande du projet Fn. Par exemple, si le référentiel existant est appelé hello-galaxy, nommez la nouvelle fonction hello-galaxy.
  • Si vous voulez utiliser un préfixe de nom de référentiel pour organiser et contrôler l'accès aux référentiels, indiquez <repo-name-prefix> dans le contexte de l'interface de ligne de commande du projet Fn et créez également un référentiel avec un nom qui inclut à la fois le préfixe de nom de référentiel et le nom de fonction. Par exemple, pour stocker les images d'une fonction nommée hello-world dans un référentiel nommé acme-repo/hello-world, indiquez phx.ocir.io/ansh81vru1zp/acme-repo dans le contexte de l'interface de ligne de commande du projet Fn et créez également un référentiel nommé acme-repo/hello-world.