Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Configurer les transformations de données dans API Gateway
Cette section explique comment configurer des modèles de mappage pour transformer les demandes et réponses d'intégration à l'aide de la console et AWS CLI.
Rubriques
Configuration de la transformation des données à l'aide de la console API Gateway
Dans ce didacticiel, vous allez créer une table DynamoDB incomplète API à l'aide du fichier .zip .zip suivant. data-transformation-tutorial-console Ce document incomplet API contient une /pets
ressource GET
et des POST
méthodes.
-
La
GET
méthode obtiendra les données du point dehttp://petstore-demo-endpoint.execute-api.com/petstore/pets
HTTP terminaison. Les données de sortie seront transformées conformément au modèle de mappage figurant dans PetStore modèle de mappage. La méthode
POST
permettra à l'utilisateur de publier (POST
) les informations sur les animaux dans une table Amazon DynamoDB à l'aide d'un modèle de mappage.
Téléchargez et décompressez le modèle de création d'application pour AWS CloudFormation. Vous allez utiliser ce modèle pour créer une table DynamoDB afin de publier des informations sur les animaux de compagnie et une table incomplète. API Vous terminerez le reste des étapes dans la console API Gateway.
Pour créer une AWS CloudFormation pile
Ouvrez la AWS CloudFormation console à l'adresse https://console.aws.amazon.com/cloudformation.
-
Choisissez Créer une pile, puis choisissez Avec de nouvelles ressources (standard).
-
Dans Spécifier le modèle, choisissez Charger un modèle de fichier.
-
Sélectionnez le modèle que vous avez téléchargé.
-
Choisissez Suivant.
-
Pour Nom de la pile, saisissez
data-transformation-tutorial-console
, puis choisissez Suivant. -
Pour Configurer les options de pile, choisissez Suivant.
-
Pour les fonctionnalités, reconnaissez que AWS CloudFormation vous pouvez créer IAM des ressources dans votre compte.
-
Sélectionnez Envoyer.
AWS CloudFormation fournit les ressources spécifiées dans le modèle. La fin du provisionnement de vos ressources peut prendre quelques minutes. Lorsque le statut de votre AWS CloudFormation pile est CREATE_ COMPLETE, vous êtes prêt à passer à l'étape suivante.
Pour tester la réponse d'intégration GET
-
Dans l'onglet Ressources de la AWS CloudFormation pile pour
data-transformation-tutorial-console
, sélectionnez l'identifiant physique de votreAPI. -
Dans le volet de navigation principal, choisissez Resources, puis sélectionnez la GETméthode.
-
Choisissez l’onglet Test. Vous devrez peut-être choisir la flèche droite pour afficher l'onglet.
La sortie du test affichera les informations suivantes :
[ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]
Vous allez transformer cette sortie conformément au modèle de mappage figurant dans PetStore modèle de mappage.
Pour transformer la réponse d'intégration GET
-
Choisissez l’onglet Réponse d’intégration.
Aucun modèle de mappage n'est actuellement défini, de sorte que la réponse d'intégration ne sera pas transformée.
-
Pour Par défaut - Réponse, choisissez Modifier.
-
Choisissez Modèles de mappage, puis procédez comme suit :
Sélectionnez Add mapping template.
Pour Type de contenu, entrez
application/json
.Pour Corps du modèle, saisissez ce qui suit :
#set($inputRoot = $input.path('$')) [ #foreach($elem in $inputRoot) { "description" : "Item $elem.id is a $elem.type.", "askingPrice" : $elem.price }#if($foreach.hasNext),#end #end ]
Choisissez Save (Enregistrer).
Pour tester la réponse d'intégration GET
-
Choisissez l’onglet Tester, puis choisissez Tester.
La sortie du test affichera la réponse transformée.
[ { "description" : "Item 1 is a dog.", "askingPrice" : 249.99 }, { "description" : "Item 2 is a cat.", "askingPrice" : 124.99 }, { "description" : "Item 3 is a fish.", "askingPrice" : 0.99 } ]
Pour transformer les données d'entrée issues de la méthode POST
-
Choisissez la méthode POST.
-
Choisissez l’onglet Requête d’intégration, puis dans la section Paramètres de requête d’intégration, choisissez Modifier.
Le AWS CloudFormation modèle a rempli certains champs de demande d'intégration.
-
Le type d'intégration est Service AWS.
-
Service AWS Il s'agit de DynamoDB.
-
La HTTP méthode est
POST
. -
L'action est
PutItem
. -
Le rôle d'exécution permettant à API Gateway de placer un élément dans la table DynamoDB est.
data-transformation-tutorial-console-APIGatewayRole
AWS CloudFormation a créé ce rôle pour permettre à API Gateway de disposer des autorisations minimales nécessaires pour interagir avec DynamoDB.
Le nom de la table DynamoDB n'a pas été spécifié. Vous allez spécifier ce nom dans les étapes suivantes.
-
Pour Transmission du corps de requête, sélectionnez Jamais.
Cela signifie qu'ils API rejetteront les données dont les types de contenu ne disposent pas d'un modèle de mappage.
Choisissez Modèles de mappage.
Type de contenu est défini sur
application/json
. Cela signifie qu'un type de contenu qui n'est pas application/json sera rejeté par leAPI. Pour plus d'informations sur les comportements de transmission d'intégration, consultez Comportements de transfert direct.-
Saisissez le code suivant dans l'éditeur de texte.
{ "TableName":"data-transformation-tutorial-console-ddb", "Item": { "id": { "N": $input.json("$.id") }, "type": { "S": $input.json("$.type") }, "price": { "N": $input.json("$.price") } } }
Ce modèle spécifie la table en tant que
data-transformation-tutorial-console-ddb
et définit les éléments en tant queid
,type
etprice
. Ces éléments proviennent du corps de la méthodePOST
. Vous pouvez également utiliser un modèle de données pour favoriser la création d'un modèle de mappage. Pour de plus amples informations, veuillez consulter Demande de validation pour REST APIs in API Gateway. -
Choisissez Enregistrer pour enregistrer votre modèle de mappage.
Pour ajouter une réponse de méthode et d'intégration à partir de la méthode POST
Ils AWS CloudFormation ont créé une méthode vide et une réponse d'intégration. Vous allez modifier cette réponse pour fournir plus d'informations. Pour plus d'informations sur la façon de modifier des réponses, consultez Référence de mappage des données de API demande et de réponse Amazon API Gateway.
-
Dans l’onglet Réponse d’intégration, pour Par défaut - Réponse, choisissez Modifier.
Choisissez Modèles de mappage, puis choisissez Ajouter un modèle de mappage.
Pour Type de contenu, saisissez
application/json
.Dans l'éditeur de code, entrez le modèle de mappage de sortie suivant pour envoyer un message de sortie :
{ "message" : "Your response was recorded at $context.requestTime" }
Pour plus d'informations sur les variables de contexte, consultez $contextVariables pour les modèles de données, les autorisateurs, les modèles de mappage et la journalisation des CloudWatch accès.
Choisissez Enregistrer pour enregistrer votre modèle de mappage.
Test de la méthode POST
Choisissez l’onglet Test. Vous devrez peut-être choisir la flèche droite pour afficher l'onglet.
-
Dans le corps de la demande, entrez l'exemple suivant.
{ "id": "4", "type" : "dog", "price": "321" }
-
Sélectionnez Tester).
La sortie doit afficher votre message de réussite.
Vous pouvez ouvrir la console DynamoDB https://console.aws.amazon.com/dynamodb/
à l'adresse pour vérifier que l'exemple d'élément figure dans votre tableau.
Pour supprimer une AWS CloudFormation pile
Ouvrez la AWS CloudFormation console à l'adresse https://console.aws.amazon.com/cloudformation.
-
Sélectionnez votre AWS CloudFormation pile.
-
Choisissez Supprimer, puis confirmez votre choix.
Configurez la transformation des données à l'aide du AWS CLI
Dans ce didacticiel, vous allez créer une table DynamoDB incomplète API à l'aide du fichier .zip .zip suivant. data-transformation-tutorial-cli Ce document incomplet API contient une /pets
ressource avec une GET
méthode intégrée au http://petstore-demo-endpoint.execute-api.com/petstore/pets
HTTP point de terminaison. Vous allez créer une méthode POST
pour vous connecter à une table DynamoDB et utiliser des modèles de mappage pour entrer des données dans une table DynamoDB.
-
Vous allez transformer les données de sortie conformément au modèle de mappage figurant dans PetStore modèle de mappage.
-
Vous allez créer une méthode
POST
pour permettre à l'utilisateur de publier (POST
) les informations sur les animaux dans une table Amazon DynamoDB à l'aide d'un modèle de mappage.
Pour créer une AWS CloudFormation pile
Téléchargez et décompressez le modèle de création d'application pour AWS CloudFormation.
Pour effectuer le didacticiel suivant, vous avez besoin de l'AWS Command Line Interface (AWS CLI) version 2.
Pour les commandes longues, un caractère d’échappement (\
) est utilisé pour les fractionner en plusieurs lignes.
Note
Sous Windows, certaines CLI commandes Bash que vous utilisez fréquemment (telles quezip
) ne sont pas prises en charge par les terminaux intégrés du système d'exploitation. Installez le sous-système Windows pour Linux
Utilisez la commande suivante pour créer la AWS CloudFormation pile.
aws cloudformation create-stack --stack-name data-transformation-tutorial-cli --template-body file://data-transformation-tutorial-cli.zip --capabilities CAPABILITY_NAMED_IAM
-
AWS CloudFormation fournit les ressources spécifiées dans le modèle. La fin du provisionnement de vos ressources peut prendre quelques minutes. Utilisez la commande suivante pour voir l'état de votre AWS CloudFormation pile.
aws cloudformation describe-stacks --stack-name data-transformation-tutorial-cli
-
Lorsque le statut de votre AWS CloudFormation pile est défini
StackStatus: "CREATE_COMPLETE"
, utilisez la commande suivante pour récupérer les valeurs de sortie pertinentes pour les étapes futures.aws cloudformation describe-stacks --stack-name data-transformation-tutorial-cli --query "Stacks[*].Outputs[*].{OutputKey: OutputKey, OutputValue: OutputValue, Description: Description}"
Les valeurs de sortie sont les suivantes :
-
ApiRole, qui est le nom du rôle qui permet à API Gateway de placer des éléments dans la table DynamoDB. Pour ce didacticiel, le nom du rôle est
data-transformation-tutorial-cli-APIGatewayRole-ABCDEFG
. DDBTableName, qui est le nom de la table DynamoDB. Pour ce didacticiel, le nom de la table est
data-transformation-tutorial-cli-ddb
.ResourceId, qui est l'identifiant de la ressource pour animaux de compagnie dans laquelle les
POST
méthodesGET
et sont exposées. Pour ce didacticiel, l'ID de ressource estefg456
.ApiId, qui est l'identifiant duAPI. Pour ce didacticiel, l'APIidentifiant est
abc123
.
-
Pour tester la méthode GET
avant la transformation des données
Utilisez la commande suivante pour tester la méthode
GET
.aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GETLa sortie du test affichera les informations suivantes.
[ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]
Vous allez transformer cette sortie conformément au modèle de mappage figurant dans PetStore modèle de mappage.
Pour transformer la réponse d'intégration GET
-
Utilisez la commande suivante pour mettre à jour la réponse d'intégration de la méthode
GET
. Remplacez lerest-api-id
andresource-id
avec vos valeurs.Utilisez la commande suivante pour créer la réponse d'intégration.
aws apigateway put-integration-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --status-code 200 \ --selection-pattern "" \ --response-templates '{"application/json": "#set($inputRoot = $input.path(\"$\"))\n[\n#foreach($elem in $inputRoot)\n {\n \"description\": \"Item $elem.id is a $elem.type\",\n \"askingPrice\": \"$elem.price\"\n }#if($foreach.hasNext),#end\n\n#end\n]"}'
Pour tester la méthode GET
Utilisez la commande suivante pour tester la méthode
GET
.aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \La sortie du test affichera la réponse transformée.
[ { "description" : "Item 1 is a dog.", "askingPrice" : 249.99 }, { "description" : "Item 2 is a cat.", "askingPrice" : 124.99 }, { "description" : "Item 3 is a fish.", "askingPrice" : 0.99 } ]
Pour créer une méthode POST
-
Utilisez la commande suivante pour créer une nouvelle méthode sur la ressource
/pets
.aws apigateway put-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --authorization-type "NONE" \Cette méthode vous permettra d'envoyer des informations relatives aux animaux de compagnie à la table DynamoDB que vous avez créée dans la pile. AWS CloudFormation
-
Utilisez la commande suivante pour créer une Service AWS intégration sur la
POST
méthode.aws apigateway put-integration --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --type AWS \ --integration-http-method POST \ --uri "arn:aws:apigateway:us-east-2
:dynamodb:action/PutItem" \ --credentials arn:aws:iam::111122223333
:role/data-transformation-tutorial-cli-APIGatewayRole-ABCDEFG
\ --request-templates '{"application/json":"{\"TableName\":\"data-transformation-tutorial-cli-ddb\",\"Item\":{\"id\":{\"N\":$input.json(\"$.id\")},\"type\":{\"S\":$input.json(\"$.type\")},\"price\":{\"N\":$input.json(\"$.price\")} }}"}' -
Utilisez la commande suivante pour créer une réponse de méthode pour un appel réussi de la méthode
POST
.aws apigateway put-method-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --status-code 200 -
Utilisez la commande suivante pour créer une réponse d'intégration pour l'appel réussi de la méthode
POST
.aws apigateway put-integration-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --status-code 200 \ --selection-pattern "" \ --response-templates '{"application/json": "{\"message\": \"Your response was recorded at $context.requestTime\"}"}'
Pour tester la méthode POST
Utilisez la commande suivante pour tester la méthode
POST
.aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --body '{\"id\": \"4\", \"type\": \"dog\", \"price\": \"321\"}'La sortie affichera le message de réussite.
Pour supprimer une AWS CloudFormation pile
Utilisez la commande suivante pour supprimer vos AWS CloudFormation ressources.
aws cloudformation delete-stack --stack-name data-transformation-tutorial-cli
AWS CloudFormation Modèle de transformation de données terminé
L'exemple suivant est un AWS CloudFormation modèle complet, qui crée une table DynamoDB API et une table DynamoDB avec /pets
une ressource GET
avec des méthodes et. POST
-
La
GET
méthode obtiendra les données du point dehttp://petstore-demo-endpoint.execute-api.com/petstore/pets
HTTP terminaison. Les données de sortie seront transformées conformément au modèle de mappage figurant dans PetStore modèle de mappage. La méthode
POST
permettra à l'utilisateur de publier (POST
) les informations sur les animaux de compagnie dans une table DynamoDB à l'aide d'un modèle de mappage.
AWSTemplateFormatVersion: 2010-09-09 Description: A completed Amazon API Gateway REST API that uses non-proxy integration to POST to an Amazon DynamoDB table and non-proxy integration to GET transformed pets data. Parameters: StageName: Type: String Default: v1 Description: Name of API stage. Resources: DynamoDBTable: Type: 'AWS::DynamoDB::Table' Properties: TableName: !Sub data-transformation-tutorial-complete AttributeDefinitions: - AttributeName: id AttributeType: N KeySchema: - AttributeName: id KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 5 APIGatewayRole: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Action: - 'sts:AssumeRole' Effect: Allow Principal: Service: - apigateway.amazonaws.com Policies: - PolicyName: APIGatewayDynamoDBPolicy PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - 'dynamodb:PutItem' Resource: !GetAtt DynamoDBTable.Arn Api: Type: 'AWS::ApiGateway::RestApi' Properties: Name: data-transformation-complete-api ApiKeySourceType: HEADER PetsResource: Type: 'AWS::ApiGateway::Resource' Properties: RestApiId: !Ref Api ParentId: !GetAtt Api.RootResourceId PathPart: 'pets' PetsMethodGet: Type: 'AWS::ApiGateway::Method' Properties: RestApiId: !Ref Api ResourceId: !Ref PetsResource HttpMethod: GET ApiKeyRequired: false AuthorizationType: NONE Integration: Type: HTTP Credentials: !GetAtt APIGatewayRole.Arn IntegrationHttpMethod: GET Uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets/ PassthroughBehavior: WHEN_NO_TEMPLATES IntegrationResponses: - StatusCode: '200' ResponseTemplates: application/json: "#set($inputRoot = $input.path(\"$\"))\n[\n#foreach($elem in $inputRoot)\n {\n \"description\": \"Item $elem.id is a $elem.type\",\n \"askingPrice\": \"$elem.price\"\n }#if($foreach.hasNext),#end\n\n#end\n]" MethodResponses: - StatusCode: '200' PetsMethodPost: Type: 'AWS::ApiGateway::Method' Properties: RestApiId: !Ref Api ResourceId: !Ref PetsResource HttpMethod: POST ApiKeyRequired: false AuthorizationType: NONE Integration: Type: AWS Credentials: !GetAtt APIGatewayRole.Arn IntegrationHttpMethod: POST Uri: arn:aws:apigateway:us-west-1:dynamodb:action/PutItem PassthroughBehavior: NEVER RequestTemplates: application/json: "{\"TableName\":\"data-transformation-tutorial-complete\",\"Item\":{\"id\":{\"N\":$input.json(\"$.id\")},\"type\":{\"S\":$input.json(\"$.type\")},\"price\":{\"N\":$input.json(\"$.price\")} }}" IntegrationResponses: - StatusCode: 200 ResponseTemplates: application/json: "{\"message\": \"Your response was recorded at $context.requestTime\"}" MethodResponses: - StatusCode: '200' ApiDeployment: Type: 'AWS::ApiGateway::Deployment' DependsOn: - PetsMethodGet Properties: RestApiId: !Ref Api StageName: !Sub '${StageName}' Outputs: ApiId: Description: API ID for CLI commands Value: !Ref Api ResourceId: Description: /pets resource ID for CLI commands Value: !Ref PetsResource ApiRole: Description: Role ID to allow API Gateway to put and scan items in DynamoDB table Value: !Ref APIGatewayRole DDBTableName: Description: DynamoDB table name Value: !Ref DynamoDBTable
Étapes suivantes
Pour explorer des modèles de mappage plus complexes, consultez les exemples suivants :
-
Découvrez des modèles et des modèles de mappage plus complexes avec l'exemple d'album photo Exemple d'album photo.
-
Pour plus d'informations sur les modèles, consultez Modèles de données pour REST APIs.
-
Pour obtenir des informations sur la façon de mapper différentes sorties de code de réponse, Configuration des mappages de données de demande et de réponse à l'aide de la console API Gateway.
-
Pour plus d'informations sur la façon de définir des mappages de données à partir des données de demande API de méthode d'un utilisateur,APIModèle de mappage de passerelle et référence à la variable de journalisation des accès.