Etape 2 : Créez le service proxy (Amazon API Gateway) dans la console de gestion AWS¶
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 au service distant (par ex., une fonction AWS Lambda) et vice-versa.
Cette rubrique fournit des instructions pour créer et configurer une passerelle Amazon API Gateway à utiliser comme service proxy pour votre fonction externe.
Configurer Amazon API Gateway en tant que service proxy nécessite plusieurs étapes, notamment :
Création d’un nouveau rôle IAM (gestion des identités et des accès) dans votre compte AWS.
Création et configuration d’un point de terminaison Amazon API Gateway.
Sécurisation de votre point de terminaison Amazon API Gateway.
Création d’un objet d’intégration API dans Snowflake.
Configuration d’une relation de confiance entre Snowflake et le nouveau rôle IAM.
Les étapes pour les créer sont entrelacées car :
L’intégration API a besoin d’informations provenant de la passerelle API Gateway, comme l’ARN du rôle (Amazon Resource Name).
La passerelle API Gateway a besoin d’informations provenant de l’intégration API, comme les API_AWS_EXTERNAL_ID et API_AWS_IAM_USER_ARN.
Dans ce chapitre :
Étape précédente¶
Étape 1 : Créez le service distant (fonctionAWS Lambda) dans la console de gestion
Créer un nouveau rôle IAM dans votre compte AWS¶
Pour que Snowflake s’authentifie auprès de votre compte AWS, un utilisateur IAM appartenant à Snowflake (gestion des identités et des accès) doit être autorisé à assumer un rôle IAM dans votre compte AWS.
Les étapes pour créer un rôle IAM figurent ci-dessous :
Créez un nouveau rôle IAM : dans la console AWS, recherchez IAM, cliquez sur Roles, puis sur Create Role.
Lorsque vous devez sélectionner le type d’entité de confiance, choisissez Another AWS account.
Lorsqu’on vous demande de Specify accounts that can use this role, collez la valeur du champ de la feuille de calcul intitulé
Your AWS Account ID
.(Utilisez votre ID de compte AWS, pas celui de Snowflake. L’ARN de Snowflake sera associé à ce rôle IAM plus tard).
Cliquez sur Next: Permissions.
Si vous le souhaitez, définissez des autorisations (Attach permissions policies).
Cliquez sur Next: Tags.
Si vous le souhaitez, vous pouvez ajouter des balises.
Cliquez sur Next: Review.
Entrez un nom de rôle.
Enregistrez le nom du rôle dans le champ
New IAM Role Name
de la feuille de calcul.
Cliquez sur le bouton Create role. Après avoir créé le rôle :
Enregistrez le Role ARN dans le champ
New IAM Role ARN
de la feuille de calcul.
Créer le point de terminaison API Gateway¶
Avant de créer et de configurer votre API Gateway, choisissez si vous voulez utiliser un point de terminaison régional ou privé. Pour plus d’informations, voir Choix de votre type de point de terminaison : point de terminaison régional vs. point de terminaison privé.
Si vous prévoyez d’utiliser un point de terminaison privé, vous avez besoin de l’ID du VPC (Virtual Private Cloud) que vous avez enregistré dans la feuille de calcul suivi.
Les étapes pour créer un point de terminaison API Gateway sont les suivantes :
Dans la console de gestion AWS, sélectionnez API Gateway.
Sélectionnez Create API.
Sélectionnez le type de point de terminaison (régional ou privé).
Si vous voulez un point de terminaison régional , alors :
Trouvez REST API et cliquez sur son bouton Build .
Si vous voulez un point de terminaison privé, alors :
Trouvez REST API private et cliquez sur son bouton Build .
Important
Veillez à choisir REST API ou REST API private . Ne sélectionnez pas HTTP API ou une autre option.
Sélectionnez l’option New API .
Saisissez un nom pour la nouvelle API.
Enregistrez ce nom dans le champ
New API Name
de la feuille de calcul.Si on vous demande de sélectionner un Endpoint Type, sélectionnez Regional ou Private.
Laissez le champ
VPC Endpoint IDs
vide.Cliquez sur le bouton Create API.
Pour créer une ressource, cliquez sur Actions, puis sur Create Resource.
Enregistrez le nom de la ressource dans le champ
API Gateway Resource Name
de la feuille de calcul.Cliquez sur le bouton Create Resource. L’écran affiche No methods defined for the resource.
Pour créer une nouvelle méthode, cliquez sur Actions et sélectionnez Create Method.
Dans le petit menu déroulant situé sous le nom de la ressource, sélectionnez POST puis cliquez sur la coche grise située à côté.
Integration type devrait être Lambda Function. Si ce n’est pas déjà sélectionné, sélectionnez-le.
Cochez la case Use Lambda Proxy integration.
Il est important de sélectionner une intégration de proxy Lambda, car le JSON sans intégration du proxy Lambda serait différent du JSON avec intégration du proxy Lambda. Pour plus d’informations sur l’intégration du proxy Lambda, voir la documentation AWS pour :
Dans le champ Lambda Function , collez le
Lambda Function Name
que vous avez enregistré dans la feuille de calcul.Cliquez sur le bouton Save.
Cliquez sur le bouton Actions et sélectionnez l’action Deploy API.
Sélectionnez ou créez une zone de préparation. Cliquez sur Deploy.
Sous le nom de la ressource, vous devriez voir POST.
Si ce n’est pas le cas, vous devrez peut-être développer l’arbre des ressources en cliquant sur le triangle qui se trouve à gauche du nom de la ressource.
Cliquez sur POST, puis enregistrez l” Invoke URL de la requête POST dans le champ
Resource Invocation URL
de la feuille de calcul.Assurez-vous que l’URL d’appel inclut le nom de la ressource que vous avez créée ; si ce n’est pas le cas, vous avez peut-être cliqué sur l’URL d’appel pour la zone de préparation plutôt que pour la ressource.
Cliquez sur Save Changes.
Testez la passerelle API Gateway¶
Vérifiez que la passerelle API Gateway peut appeler votre fonction Lambda.
Suivez les instructions d’AWSpour tester .
A l’étape appropriée des instructions AWS, collez le texte suivant dans le Request Body :
{ "data": [ [0, 43, "page"], [1, 42, "life, the universe, and everything"] ] }
Après avoir exécuté le test, vous devriez voir apparaître Request, Status, Latency, and Response Body sur la droite (vous devrez peut-être faire défiler la page pour le voir).
Si le statut retourné est 200, votre passerelle API Gateway a appelé la bonne fonction Lambda.
(Cette étape de vérification saute l’authentification et ne permet donc pas de découvrir les problèmes de permissions).
Protégez votre point de terminaison Amazon API Gateway¶
Pour un aperçu de la sécurisation des points de terminaison du service proxy, comme les point de terminaison Amazon API Gateway, voir Sécuriser le service proxy.
Pour sécuriser un point de terminaison Amazon API Gateway :
À ce stade, vous devriez être sur l’écran qui affiche vos informations sur API Gateway, et vous devriez voir votre ressource et la méthode POST.
Si vous n’y êtes pas déjà, faites ce qui suit :
Dans la console de gestion AWS, allez à la page API Gateway.
Sélectionnez votre passerelle API Gateway.
Dans le volet de gauche, cliquez sur Resources.
Cliquez sur la méthode POST . (Si vous ne voyez pas cela, développez l’arbre des ressources en cliquant sur le triangle à gauche de la ressource dans le panneau Resources , qui est généralement le deuxième panneau à partir de la gauche).
Copiez l” Method Request ARN de la case Method Request vers le champ
Method Request ARN
de la feuille de calcul.Cliquez sur le titre Method Request.
Cliquez sur le symbole d’édition en regard de Authorization et sélectionnez
AWS_IAM
pour préciser que la demande de méthode nécessite une autorisation AWS_IAM.Cliquez sur la petite coche à côté du menu pour confirmer votre choix.
Pour définir la politique de ressource pour la passerelle API Gateway afin de spécifier qui est autorisé à appeler le point de terminaison de la passerelle, cliquez sur Resource Policy dans la colonne de gauche de l’API.
Point de terminaison régional :
Collez le modèle de politique de ressources ci-dessous dans l’éditeur de politique de ressources au format JSON, puis remplacez les caractères de remplissage par les valeurs appropriées de la feuille de calcul, comme décrit ci-dessous.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:sts::<12-digit-number>:assumed-role/<external_function_role>/snowflake" }, "Action": "execute-api:Invoke", "Resource": "<method_request_ARN>" } ] }
Remplacez les parties suivantes de la politique de ressource :
Remplacez le
<numéro à 12 chiffres>
par la valeur dans le champYour AWS Account ID
, que vous avez enregistré dans la feuille de calcul.Remplacez
<external_function_role>
par le nom de rôle du champNew IAM Role Name
de la feuille de calcul.Par exemple, si votre nom de rôle AWS est :
arn:aws:iam::987654321098:role/MyNewIAMRole
alors le résultat devrait être :
"AWS": "arn:aws:sts::987654321098:assumed-role/MyNewIAMRole/snowflake"
Remplacez
<method_request_ARN>
par la valeur du champMethod Request ARN
de la feuille de calcul. Il s’agit de l’ARN de la méthode POST de la ressource.Note
La définition de la ressource sur l’ARN de la demande de méthode spécifie que l’API Gateway doit autoriser les appels uniquement vers la ressource spécifiée. Il est possible de spécifier un sous-ensemble de l’ARN de la demande de méthode comme préfixe, ce qui permet d’appeler plusieurs ressources à partir de la même API Gateway.
Par exemple, si l’ARN de la demande de méthode est :
arn:aws:execute-api:us-west-1:123456789012:a1b2c3d4e5/*/POST/MyResource
alors vous pouvez spécifier simplement le préfixe suivant :
arn:aws:execute-api:us-west-1:123456789012:a1b2c3d4e5/*
Utilisateurs du GovCloud du gouvernement américain uniquement :
Mettez à jour l’ARN de la demande de méthode pour utiliser
aws-us-gov
, par exemple :arn:aws-us-gov:execute-api:us-gov-west-1:123456789012:a1b2c3d4e5/*
Assurez-vous que vous utilisez une région GovCloud, par exemple
us-gov-west-1
.
Point de terminaison privé :
Collez le modèle de politique de ressources ci-dessous dans l’éditeur de politique de ressources, puis remplacez les caractères de remplissage par les valeurs appropriées de la feuille de calcul, comme décrit ci-dessous.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:sts::<12-digit-number>:assumed-role/<external_function_role>/snowflake" }, "Action": "execute-api:Invoke", "Resource": "<method_request_ARN>", "Condition": { "StringEquals": { "aws:sourceVpc": "<VPC_ID>" } } } ] }
Remplacez les parties suivantes de la politique de ressource :
Remplacez les valeurs de <12-digit-number>, <external_function_role> et <method_request_ARN> comme décrit ci-dessus pour un point de terminaison régional.
Remplacez la valeur de <VPC_ID> par l’ID du VPC Snowflake de votre région, qui doit être enregistré dans le champ
Snowflake VPC ID
de la feuille de calcul.Utilisateurs du GovCloud du gouvernement américain uniquement :
Mettez à jour l’ARN de la demande de méthode pour utiliser
aws-us-gov
, par exemple :arn:aws-us-gov:execute-api:us-gov-west-1:123456789012:a1b2c3d4e5/*
Assurez-vous que vous utilisez une région GovCloud, par exemple
us-gov-west-1
.
Cliquez sur Save pour enregistrer la politique de ressources.
Déployez l’API mise à jour. Pour ce faire, cliquez sur le nom de l’API dans le fil d’Ariane en haut de la page. Cliquez sur Actions puis sur Deploy API. Sélectionnez votre zone de préparation de déploiement et cliquez sur Deploy.
Dans l’étape suivante, vous créez un objet d’intégration API Snowflake. Ne fermez pas la fenêtre de la console de gestion AWS maintenant ; vous devrez y revenir plus tard.