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

Ces instructions montrent comment créer une fonction Google Cloud que vous pouvez utiliser comme service à distance.

Ces instructions supposent que vous connaissez déjà l’administration de GCP. Ces instructions décrivent les étapes générales que vous devez exécuter, mais ne décrivent pas en détail l’interface utilisateur, car des détails pourraient changer.

Google fournit également une interface de ligne de commande que vous pouvez utiliser pour la plupart de ces étapes. Pour plus de détails à ce sujet, consultez la documentation de GCP.

Dans ce chapitre :

Créer la fonction Google Cloud

Instructions pour la création d’une fonction Google Cloud

  1. Créez une fonction Google Cloud en suivant les instructions de Google pour créer une fonction Cloud . Si vous créez l’exemple de fonction en langage Python fourni par Snowflake, choisissez Python Quickstart ; sinon, choisissez le QuickStart approprié en fonction du langage dont vous avez besoin. Lorsque vous suivez les instructions de Google, assurez-vous de faire ce qui suit :

    • Spécifiez que le déclencheur de la fonction est HTTP.

    • Copiez l”URL de déclencheur dans le champ « URL de déclencheur de fonction Cloud » de la feuille de calcul ci-dessus.

    • Dans la section Authentication, sélectionnez Require authentication.

      Les instructions de GCP disent de sélectionner Allow unauthenticated invocations. Cela est acceptable pour les fonctions d’exemple, y compris la fonction d’exemple fournie par Snowflake, mais la plupart des systèmes de production devraient exiger une authentification.

    • Si Require HTTPS n’est pas déjà activé, alors activez-le.

    • Cliquez sur Save.

    • Sélectionnez le Runtime approprié. Si vous créez l’exemple de fonction Python fourni par Snowflake, choisissez un moteur d’exécution Python 3.7.

      Important

      Sélectionnez la valeur Runtime avant de coller le code.

    • Remplacez le code par défaut par l’exemple de code Snowflake ou par votre propre code personnalisé. L’exemple de code Snowflake se trouve ici : Exemple de fonction synchrone Google Cloud.

    • Assurez-vous que le Entry point correspond au nom de la fonction (dans ce cas, echo).

  2. Après avoir terminé la création de la fonction cloud, utilisez l’onglet Testing pour appeler la fonction et vous assurer qu’elle fonctionne comme prévu.

    Pour l’exemple de fonction Python fournie par Snowflake, utilisez les données de test suivantes (remplacez toutes les données par défaut dans l’onglet Testing par les données ci-dessous) :

    { "data":
      [
        [ 0, 43, "page" ],
        [ 1, 42, "life, the universe, and everything" ]
      ]
    }
    

    Les résultats d’exécution doivent être similaires à ceci :

    {"data":
      [
        [0, [43, "page"] ],
        [1, [42, "life, the universe, and everything"] ]
      ]
    }
    

    (Les résultats peuvent s’afficher dans un format différent de l’exemple présenté ci-dessus).

    Si le précédent a fonctionné correctement, vous disposez maintenant d’une fonction Google Cloud que vous pouvez utiliser comme service distant pour votre fonction externe.

Exemple de fonction synchrone Google Cloud

Cet exemple de code combine les valeurs de paramètre d’entrée dans une liste unique (tableau) et renvoie cette liste comme une valeur unique de type SQL VARIANT. Le code est écrit en Python 3.7.

Cette fonction accepte et renvoie les données au même format (JSON) que celui envoyé et lu par Snowflake. (Pour plus d’informations sur les formats de données, voir Formats des données d’entrée et de sortie des services à distance .)

import json

HTTP_SUCCESS = 200
HTTP_FAILURE = 400

def echo(request):
    try:
        # The list of rows to return.
        return_value = []

        payload = request.get_json()
        rows = payload["data"]

        # For each input row
        for row in rows:
            # Include the row number.
            row_number = row[0]
            # Combine the value(s) in the row into a Python list that will be treated as an SQL VARIANT.
            row_value = row[1:]
            row_to_return = [row_number, row_value]
            return_value.append(row_to_return)

        json_compatible_string_to_return = json.dumps( { "data" : return_value } )
        return (json_compatible_string_to_return, HTTP_SUCCESS)

    except:
        return(request.data, HTTP_FAILURE)