Les fonctions externes sont désormais disponibles en préversion publique

Les fonctions externes sont désormais disponibles en préversion publique

Comme vous l’avez entendu lors de notre dernier lancement de produit le 2 juin (Préparez-vous pour le cloud de données), nous venons de publier des fonctions externes en préversion publique. Les fonctions externes ouvrent de nouvelles possibilités passionnantes pour Snowflake, et nous sommes impatients de voir ce que la communauté en fera.

Les fonctions externes vous permettent de créer des fonctions SQL qui appellent en toute sécurité des points de terminaison HTTPS implémentés en externe via une AWS API Gateway. Cela signifie que vos fonctions peuvent être implémentées dans n’importe quel langage et utiliser n’importe quelle bibliothèque, tout en utilisant vos données dans Snowflake, ce qui vous donne plus d’options pour traiter vos données.

Voici quelques exemples d’utilisations de fonctions externes :

  • Appel à des services tiers pour le géocodage, l’analyse de texte ou la tokenisation
  • Accéder aux modèles appris par machine que vous avez créés et hébergés
  • Création de code personnalisé complexe dans la langue de votre choix

Dans le reste de cet article, nous aimerions vous donner un aperçu plus approfondi de ce que sont les fonctions externes et comment vous pouvez commencer.

Architecture des fonctions externes

Snowflake accède en toute sécurité à vos points de terminaison AWS API Gateway via des informations d’identification temporaires basées sur les rôles AWS Identity and Access Management (IAM). Cela se fait grâce à l’utilisation d’objets d’intégration d’API, qui gèrent également la liste blanche et la liste noire, donnant ainsi aux administrateurs le pouvoir de limiter l’utilisation de fonctions externes et de contrôler les terminaux auxquels leurs données peuvent accéder.

Une fois qu’une fonction externe est configurée, le fonctionnement de base est le suivant :

  1. Un utilisateur Snowflake appelle une fonction externe avec des données en utilisant la fonction dans une requête.
  2. Snowflake regroupe les données et les envoie au point de terminaison désigné dans la passerelle d’API AWS d’un client.
  3. AWS API Gateway peut appliquer des transformations à la demande HTTPS, puis la transmettre au service principal.
  4. Le back-end traite le lot d’enregistrements, puis renvoie le résultat à AWS API Gateway.
  5. Snowflake reçoit les données de l’AWS API Gateway et continue de traiter la requête.

Voici une représentation visuelle de l’architecture.

External Function Architecture

Simplifiez votre flux de travail

Avant les fonctions externes, si les utilisateurs voulaient traiter leurs données Snowflake avec une bibliothèque ou un service externe, ils devaient exporter leurs données, les traiter, puis les réimporter. Cela compliquait le traitement de leurs données par les utilisateurs de SQL et encourageait des pipelines de données compliqués et coûteux. Les fonctions externes simplifient grandement ce flux de travail.

Exemple

Imaginez que vous ayez un tableau avec tous vos enregistrements de factures rédigés en anglais, mais que vous ayez besoin qu’ils soient traduits en allemand pour votre service comptable. En utilisant AWS Lambda comme serveur principal, le code suivant traduit l’anglais vers l’allemand, en supposant que votre rôle d’exécution dispose des autorisations appropriées.

import json
import boto3
translate = boto3.client('translate')
def lambda_handler(event, context):
   translated = []
   body = json.loads(event["body"])
   status_code = 200
   for row in body["data"]:
       try:
           translated_text = translate.translate_text(
               Text = row[1],
               SourceLanguageCode="en",
               TargetLanguageCode="de")["TranslatedText"]
       except Exception as e:
           print(e);
           translate_text = "ERROR"
           # status code of 400 implies an error
           status_code = 400
       translated.append([row[0], translated_text])
   json_compatible_string_to_return = json.dumps({"data" : translated})
   # return data according to Snowflake's specified result format
   return {
       'statusCode': status_code,
       'body': json_compatible_string_to_return
   }

Pour configurer le point de terminaison AWS API Gateway, vous devez configurer une ressource avec la méthode POST et choisir « Lambda » comme type d’intégration. Plus tard, vous pouvez définir la méthode d’authentification sur IAM et restreindre l’accès à Snowflake. Enfin, vous pouvez déployer le point de terminaison et l’utiliser pour configurer une fonction externe.

Commencez par créer une ressource enfant pour le point de terminaison, comme illustré dans la capture d’écran suivante :

New Child Resource

Configurez la méthode d’appel. Dans ce cas, vous voulez vous assurer que vous utilisez l’intégration Lambda :

POST Setup

Vérifiez que vous utilisez l’authentification AWS_IAM. Vous devez définir manuellement l’authentification pour utiliser IAM. Vous devez également définir manuellement une stratégie de ressources pour le point de terminaison afin de décrire qui y a accès, comme décrit ici:

Method

Cliquez sur Actions -> Déployer l’API pour déployer votre terminal. Vous pourrez voir le point de terminaison que la fonction externe doit appeler, étiqueté comme « l’URL d’invocation ».

POST Translate

Après configuration des autorisations sur AWS pour permettre à Snowflake de générer en toute sécurité des identifiants d’accès pour accéder à votre point de terminaison AWS API Gateway, utilisez le code suivant pour créer l’intégration d’API et la fonction externe :

-- create API integration
create or replace api integration external_api_integration
   api_provider=aws_api_gateway
   api_aws_role_arn='arn:aws:iam::<aws_account_id>:role/<role_name>'
   api_allowed_prefixes=('https://gr8i78j7ei.execute-api.us-east-2.amazonaws.com/test/translate-en-de')
   enabled=true;

-- create external function
create or replace external function translate_en_de(input string)
   returns string
   api_integration = external_api_integration
   as 'https://gr8i78j7ei.execute-api.us-east-2.amazonaws.com/test/translate-en-de';

Voici le tableau qui contient vos informations :

-- create table with english invoices

create or replace table invoices(invoice string);

Il ne reste plus qu’à appeler la fonction externe sur la table ! Dans la capture d’écran suivante, vous pouvez voir que l’appel à la fonction externe passe, traduisant votre facture anglaise en allemand.

Invoice translation

Limites à garder à l’esprit

Actuellement dans la préversion publique, les fonctions externes doivent passer par une instance AWS API Gateway, bien que cette passerelle puisse se connecter à n’importe quel point de terminaison HTTPS. Nous prévoyons de l’étendre pour prendre en charge les passerelles API natives de Microsoft Azure et Google Cloud Platform, alors restez à l’écoute.

Tirez le meilleur parti de Snowflake

Vous souhaitez essayer des fonctions externes ? Jetez un oeil à la documentation ici pour commencer, et faites-nous savoir quelles applications amusantes vous proposez !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.