Étape 2 : Créer le service proxy (Google Cloud API Gateway) dans la console

Snowflake n’envoie pas de données (requêtes HTTP POST) directement à un service distant. Au lieu de cela, Snowflake envoie les données à un service proxy qui relaie les données de Snowflake au service distant (c’est-à-dire GCP Cloud Function) et vice-versa.

Cette rubrique fournit des instructions pour la création et la configuration d’une Google Cloud API Gateway à utiliser comme service proxy pour votre fonction externe.

Dans ce chapitre :

Étape précédente

Étape 1 : créer le service distant (fonction Google Cloud) dans la console

Créer une définition API

Sur votre système de fichiers local, créez et personnalisez un fichier de configuration au format YAML qui spécifie l’API que vous êtes en train de créer. Le fichier doit avoir l’extension .yaml ou .yml.

Modèle de fichier de configuration :

swagger: '2.0'
info:
  title: API Gateway config for Snowflake external function.
  description: This configuration file connects the API Gateway resource to the remote service (Cloud Function).
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
paths:
  /<PATH>:
    post:
      summary: Echo the input.
      operationId: echo
      x-google-backend:
        address: <HTTP ENDPOINT TO ROUTE REQUEST TO>
        protocol: h2
      responses:
        '200':
          description: <DESCRIPTION>
          schema:
            type: string
Copy

Remplissez ou mettez à jour les champs suivants :

  1. Remplacez <PATH> par un nom unique. Il sera incorporé dans les URLs, donc n’utilisez que des caractères valides dans les URLs. Par exemple, entrez demo-func-resource.

    Notez que, contrairement aux autres champs de ce fichier de configuration, vous devez saisir la valeur <PATH> avant les deux-points, plutôt qu’après les deux-points. Par exemple, ce qui suit est correct :

    paths:
      /demo-func-resource:
    
    Copy

    Le nom du chemin ne doit pas contenir de paramètres de chemin . Google prend en charge les paramètres de chemin lorsque vous définissez le chemin d’accès à une URL . Cependant, Snowflake ne prend pas en charge les paramètres de chemin dans l’URL correspondante spécifiée dans l’instruction CREATE EXTERNAL FUNCTION.

  2. Copiez le chemin (par exemple, demo-func-resource) de l’étape précédente dans le champ Path Suffix de votre feuille de calcul de suivi.

  3. Trouvez le champ address sous le champ x-google-backend et remplacez <HTTP ENDPOINT TO ROUTE REQUEST TO> par la valeur du champ Cloud Function Trigger URL de votre feuille de calcul de suivi. Le résultat devrait ressembler à ceci :

    x-google-backend:
      address: https:// ...
    
    Copy

    L’URL ne doit pas être placée entre guillemets.

    L’URL ne doit pas nécessairement être un point de terminaison hébergé par Google ; elle peut être le chemin d’accès à n’importe quel point de terminaison HTTP.

    Si vous avez sélectionné Require HTTPS dans Étape 1 : créer le service distant (fonction Google Cloud) dans la console, assurez-vous que l’URL que vous entrez dans le champ address commence par https.

  4. En option, vous pouvez mettre à jour l’une des valeurs suivantes :

    • title dans la section info.

    • description dans la section info.

    • operationId dans la sous-section post de la section paths.

    • summary dans la sous-section post de la section paths.

  5. Examinez votre exemple de fichier de configuration Cela devrait ressembler à ce qui suit :

    swagger: '2.0'
    info:
      title: "API Gateway config for Snowflake external function"
      description: "This configuration file connects the API Gateway resource to the remote service (Cloud Function)."
      version: 1.0.0
    schemes:
      - https
    produces:
      - application/json
    paths:
      /demo-func-resource:
        post:
          summary: "echo the input"
          operationId: echo
          x-google-backend:
            address: https://my_dev.cloudfunctions.net/demo-cloud-function-01
            protocol: h2
          responses:
            '200':
              description: echo result
              schema:
                type: string
    
    Copy

    Note

    Cette configuration laissera votre passerelle ouverte au public jusqu’à ce que vous la sécurisiez dans Étape 5 : Créez une politique de sécurité GCP pour le proxy de service dans la Console de ce tutoriel.

  6. En option, pour vous assurer que personne ne peut utiliser votre passerelle pendant ce temps, ajoutez une définition de sécurité au fichier de configuration qui utilise un nom de compte de service temporaire et non valide (google_service_account) comme décrit dans cette étape facultative. L’ajout de cette définition de sécurité à cette étape signifie que vous ne pouvez pas tester votre fonction externe tant que vous n’avez pas fini de configurer la sécurité dans Étape 5 : Créez une politique de sécurité GCP pour le proxy de service dans la Console. Plus précisément, l’instruction de tester votre fonction externe dans Étape 4 : Créer la fonction externe pour GCP dans Snowflake ne fonctionnera pas encore.

    1. Ajoutez la section securityDefinitions suivante immédiatement au-dessus de la section schemes du fichier de configuration et au même niveau d’indentation.

      securityDefinitions:
        <security-def-name>:
          authorizationUrl: ""
          flow: "implicit"
          type: "oauth2"
          x-google-issuer: "google_service_account"
          x-google-jwks_uri: "https://www.googleapis.com/robot/v1/metadata/x509/google_service_account"
      
      Copy
      • Remplacez <nom-def-securite> par un nom de définition de sécurité unique (par exemple, snowflakeAccess01).

      • Enregistrez ce nom dans le champ Security Definition Name de votre feuille de calcul de suivi.

    2. Mettez à jour la section post: du fichier de configuration pour faire référence à la définition de sécurité que vous avez créée ci-dessus. Sous le champ operationId, ajoutez :

      security:
        - <security-def-name>: []
      
      Copy
      • Assurez-vous que l’indentation est au même niveau que le champ operationId.

      • Remplacez <security-def-name> par la valeur du champ Security Definition Name de votre feuille de calcul de suivi.

      • Veillez à inclure un trait d’union et un blanc avant le nom de la définition de sécurité, comme indiqué ci-dessus.

      • Veillez à inclure les accolades vides ([]) après les deux-points.

      Par exemple :

      paths:
        /demo-func-resource:
          post:
            summary: "echo the input"
            operationId: echo
            security:
              - snowflakeAccess01: []
            x-google-backend:
              address: https://my_dev.cloudfunctions.net/demo-cloud-function-01
              protocol: h2
      
      Copy
  7. Enregistrez le fichier de configuration.

  8. Enregistrez le chemin et le nom du fichier dans le champ Configuration File Name de votre feuille de calcul de suivi.

Pour en savoir plus sur le fichier de configuration API, consultez la documentation GCP suivante :

Créer une passerelle API Gateway

Pour créer une passerelle API Gateway :

  1. Créer une API GCP.

  2. Créer une configuration API.

  3. Créer une passerelle avec la configuration API.

Créer une API GCP

Cette étape crée une API GCP, qui est un conteneur pouvant contenir une ou plusieurs passerelles API Gateway et un ou plusieurs fichiers de configuration :

  1. Si vous ne l’avez pas encore fait, accédez à l’écran Google Cloud API Gateway en cliquant sur le menu GCP et en sélectionnant API Gateway.

  2. Cliquez sur CREATE GATEWAY.

  3. Entrez le Display Name et l”API ID (par exemple, demo-api-display-name-for-external-function1 et demo-api-id-for-external-function1).

    Il n’est pas nécessaire d’enregistrer ces valeurs dans votre feuille de calcul de suivi, car vous ne devrez pas les saisir ultérieurement pour créer votre fonction externe. Cependant, vous pourriez vouloir enregistrer l’ID API afin de pouvoir le supprimer lorsque vous n’en aurez plus besoin.

Créer une configuration API

Téléchargez votre fichier de configuration vers la console, ce qui crée une Configuration API.

  1. Faites défiler jusqu’à la section API Config de l’écran.

  2. Recherchez le champ qui contient Upload an API Spec.

    Cliquez sur BROWSE et sélectionnez votre fichier de configuration. Le nom de votre fichier de configuration a été enregistré dans le champ Configuration File Name de votre feuille de calcul de suivi.

  3. Entrez un nom d’affichage dans le champ qui contient Display Name.

  4. Sélectionnez un compte de service.

    Si vous avez créé l’exemple de fonction, alors dans le champ qui contient Select a Service Account, sélectionnez App Engine default service account.

    Si vous créez une fonction destinée à être utilisée en production (plutôt que comme exemple), vous pouvez choisir un compte de service différent.

    Le compte de service sélectionné doit disposer des privilèges appropriés, y compris les privilèges permettant d’appeler la fonction Cloud.

Créer une passerelle avec la configuration API

  1. Faites défiler jusqu’à la section Gateway details de l’écran.

  2. Entrez le Display Name de la nouvelle passerelle API.

  3. Cliquez dans le champ Location et sélectionnez la région appropriée (par exemple, us-central1).

  4. Cliquez sur CREATE GATEWAY.

    Cela vous amène à l’écran APIs et vous montre une liste de vos APIs.

    Si votre nouvelle API n’est pas visible immédiatement, attendez quelques minutes, puis cliquez sur le bouton Refresh.

  5. Copiez la valeur du Managed Service de l’API dans le champ Managed Service Identifier de votre feuille de calcul de suivi.

  6. À ce stade, vous devriez toujours voir une liste de vos APIs. Cliquez sur le nom de l’API.

    Vous devriez voir 4 onglets : OVERVIEW, DETAILS, CONFIGS et GATEWAYS.

  7. Cliquez sur l’onglet GATEWAYS.

  8. Copiez l” Gateway URL dans le champ Gateway Base URL de votre feuille de calcul de suivi.

Étape suivante

Étape 3 : Créer l’intégration API pour GCP dans Snowflake