[PYTHON] [AWS] Créer une API avec API Gateway + Lambda

Chose que tu veux faire

Je souhaite créer une API sans utiliser de serveur. Confirmez que la demande est envoyée depuis l'instance EC2 vers l'API REST créée par API Gateway et renvoyée. Qiita logo

procédure

Créons une API REST à l'aide d'Amazon API Gateway et de Lambda.

[1. Créer une fonction Lambda](# 1-lambda% E9% 96% A2% E6% 95% B0% E3% 82% 92% E4% BD% 9C% E6% 88% 90% E3% 81% 99 % E3% 82% 8B) [2. Créer une API REST avec API Gateway](# 2-api-gateway% E3% 81% A7rest-api% E3% 82% 92% E4% BD% 9C% E6% 88% 90% E3% 81% 99% E3% 82% 8B) [3. Déployer l'API REST](# 3-rest-api% E3% 82% 92% E3% 83% 87% E3% 83% 97% E3% 83% AD% E3% 82% A4% E3% 81 % 99% E3% 82% 8B) [4. Créer une deuxième fonction Lambda](# 4-2% E7% 95% AA% E7% 9B% AE% E3% 81% AElambda% E9% 96% A2% E6% 95% B0% E3% 82% 92% E4% BD% 9C% E6% 88% 90% E3% 81% 99% E3% 82% 8B) [5. Ajoutez des ressources, des méthodes et des paramètres à l'API REST avec API Gateway](# 5-api-gateway% E3% 81% A7rest-api% E3% 81% AB% E3% 83% AA% E3% 82% BD% E3% 83% BC% E3% 82% B9% E3% 83% A1% E3% 82% BD% E3% 83% 83% E3% 83% 89% E3% 83% 91% E3% 83% A9% E3% 83% A1% E3% 83% BC% E3% 82% BF% E3% 82% 92% E8% BF% BD% E5% 8A% A0% E3% 81% 99% E3% 82% 8B)

Référence: https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-getting-started-with-rest-apis.html

1. Créez une fonction Lambda

Lors de la création de la passerelle API, vous devez spécifier la fonction Lambda, créez donc d'abord la fonction Lambda.

Sélectionnez "Fonction" -> "Créer une fonction" sur l'écran de la console Lambda. Sélectionnez «Créer à partir de zéro» sur l'écran de création de fonction.

Nom de la fonction: ma-fonction Exécution: Python 3.7 Et appuyez sur "Créer une fonction". 2.png

Si le message "La fonction ma-fonction a été créée avec succès" apparaît, la création de la fonction est terminée. 3.png

À propos, la fonction créée renvoie "Hello from Lambda!" Par défaut. 4.png

2. Créez une API REST avec API Gateway

Cliquez sur "Créer une API" sur l'écran de la console API Gateway. Puisqu'il s'agit d'une vérification, sélectionnez "Construire" dans "REST API privée". 5.png

Une fenêtre contextuelle apparaîtra, alors sélectionnez OK. 6.png

Réglez comme indiqué dans l'image ci-dessous. Après avoir terminé la sélection et la saisie, cliquez sur "Créer une API". 7.png

Une fois terminé, seul "/" sera affiché. Ce "/" est la ressource de niveau racine et correspond à l'URL du chemin de base de l'API. 8.png

Ensuite, ajoutez une méthode. Sélectionnez Actions> Créer une méthode. 9.png

Sélectionnez "GET" et appuyez sur la coche. 10.png

Ensuite, l'écran de configuration GET apparaîtra, alors entrez les informations nécessaires et «Enregistrer». 11.png

Le contenu défini s'affiche. Veuillez consulter Officiel pour plus de détails sur chaque article. 12.png

La création de l'API REST est maintenant terminée.

3. Déployez l'API REST

Pour l'utiliser réellement, vous devez déployer l'API REST que vous avez créée.

Sélectionnez Actions> Déployer l'API pour l'API REST que vous avez créée. 13.png

Une fenêtre contextuelle apparaîtra, alors sélectionnez "Nouvelle étape" et Définissez le nom de la scène sur "dev" et appuyez sur "Deploy". 14.png

Ensuite, l'écran de l'éditeur d'étape s'affiche et vous pouvez effectivement envoyer une requête à l'API avec l'URL de l'appel d'URL. 15.png

Faisons une requête à partir de l'instance EC2.

$ curl -X GET 'URL d'appel'

"Hello from Lambda!"

C'est OK si la réponse "Bonjour de Lambda!" Renvoyée par l'ensemble Lambda est renvoyée.

4. Créez une deuxième fonction Lambda

Ensuite, nous exécuterons également des modèles avec des paramètres dans les requêtes GET. Dans l'API précédente, Lambda renvoyait une valeur fixe de "Bonjour de Lambda!". Donc, cette fois, nous allons créer une API avec Lambda qui place les paramètres de la requête GET reçue dans la réponse.

Créez la fonction Lambda de la même manière qu'auparavant. Nom de la fonction: my-function2 Exécution: Python 3.7 Exécuter le rôle: sélectionnez le rôle que vous venez de créer dans Utiliser le rôle existant. 16.png

Lorsque la création est terminée, réécrivez le code de fonction. 17.png

Mettez les paramètres reçus dans la réponse.

lambda_function.py


import json

def lambda_handler(event, context):
    myParam = event['myParam']
    return {
        'statusCode': 200,
        'body': json.dumps(myParam)
    }

Les paramètres Lambda sont terminés.

5. Ajoutez des ressources, des méthodes et des paramètres à l'API REST avec API Gateway

Nous créerons des ressources avec API Gateway.

"Action" -> "Créer une ressource" 18.png

Nom de la ressource: ma-ressource → "Créer une ressource" 19.png

Ensuite, nous allons créer une méthode. Avec ma ressource sélectionnée, sélectionnez "Action" -> "Créer une méthode" 20.png

Sélectionnez «GET» et confirmez avec le bouton de contrôle. 21.png

L'écran de configuration de my-resource GET apparaîtra, alors sélectionnez "my-function2" créé précédemment pour la fonction Lambda et enregistrez-le. 22.png

Une fenêtre contextuelle d'ajout d'autorisations apparaîtra, alors cliquez sur "OK". 23.png

Sélectionnez «Demande d'intégration» sur l'écran d'exécution de la méthode. 24.png

Puisqu'il existe un paramètre "modèle de mappage" en bas, Demander le passage du corps: si aucun modèle n'est défini (recommandé) Content-Type:application/json Est spécifié. 25.png

Entrez le modèle et enregistrez-le. 26.png

modèle


{
    "myParam": "$input.params('myParam')"
}

Désormais, l'élément "myParam" du paramètre de requête peut être obtenu par l'événement ['myParam'] du côté de la fonction Lambda.

lambda_function.py


import json

def lambda_handler(event, context):
    myParam = event['myParam'] #← ici
    return {
        'statusCode': 200,
        'body': json.dumps(myParam)
    }

Cela complète les paramètres du côté de l'API, nous allons donc le déployer et l'exécuter de la même manière qu'auparavant.

je vérifierai

Essayez de demander en ajoutant «ma-ressource? MyParam = Hello% 20from% 20API% 20Gateway!» Au paramètre.

$ curl -X GET 'https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/my-resource?myParam=Hello%20from%20API%20Gateway!'

{"statusCode": 200, "body": "\"Hello from API Gateway!\""}

J'ai pu confirmer que le "Hello from API Gateway!" Assigné au paramètre de requête répond en tant que corps.

Cette fois, nous l'avons implémenté avec les paramètres minimums nécessaires, il semble donc que des recherches supplémentaires seront nécessaires lors de son introduction, mais je pense que nous avons saisi l'image globale d'API Gateway + Lambda comme sans serveur.

Recommended Posts

[AWS] Créer une API avec API Gateway + Lambda
Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
LINE BOT avec Python + AWS Lambda + API Gateway
[AWS] Essayez de tracer API Gateway + Lambda avec X-Ray
API REST facile avec API Gateway / Lambda / DynamoDB
Envoyer les images prises avec ESP32-WROOM-32 vers AWS (API Gateway → Lambda → S3)
Comment créer une API de machine learning sans serveur avec AWS Lambda
Afficher les images sur S3 avec API Gateway + Lambda
Version Amazon API Gateway et AWS Lambda Python
Créer une API avec Django
AWS CDK-Lambda + API Gateway (Python)
PyTorch avec AWS Lambda [importation Lambda]
Créer une couche pour AWS Lambda Python dans Docker
Essayez d'implémenter un robot Cisco Spark avec AWS Lambda + Amazon API Gateway (Python)
Créer Awaitable avec l'API Python / C
Prenez rapidement une chaîne de requête avec API Gateway-> Lambda (Python)
Créez une API en utilisant hug avec mod_wsgi
Notifier HipChat avec AWS Lambda (Python)
J'ai essayé ChatOps avec Slack x API Gateway x Lambda (Python) x RDS
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
Créez automatiquement la documentation de l'API Python avec Sphinx
[AWS] Associez Lambda et S3 à boto3
[Python] Créez rapidement une API avec Flask
Connectez-vous à s3 avec AWS Lambda Python
Créer un bloc de page / Todo avec l'API Notion
Créer un référentiel privé avec AWS CodeArtifact
[AWS] Faites des choses de type SSI avec S3 / Lambda
Je viens de faire FizzBuzz avec AWS Lambda
Créons une fonction de chat avec Vue.js + AWS Lambda + dynamo DB [Paramètres AWS]
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
Présentation du mécanisme Twilio # 3-1 - Procédure pas à pas de mise en œuvre de la passerelle API API + Lambda (partie 1)
Application sans serveur avec AWS SAM! (APIGATEWAY + Lambda (Python))
J'ai essayé de connecter AWS Lambda à d'autres services
Automatisation de la construction de l'infrastructure avec CloudFromation + troposphère + AWS Lambda
Transmettre Cognito Id à Lambda via API Gateway
Créez rapidement un serveur API avec Python + Falcon
Créez un bot avec AWS Lambda qui démarre / arrête automatiquement les instances avec des balises spécifiques
Remarque pour le traitement des données POST en se connectant à Lambda via la passerelle API d'AWS (API HTTP)
Créer des couches Lambda avec Lambda
Pages HTML dynamiques créées avec AWS Lambda et Python
[AWS] Play with Step Functions (SAM + Lambda) Part.3 (Branch)
Créez Amazon Linux avec AWS EC2 et connectez-vous
Créer une fonction Lambda de version Python (+ couche Lambda) avec Serverless Framework
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Créez une carte thermique de tweet avec l'API Google Maps
Extruder avec l'API Fusion360
Créez des jeux avec Pygame
Créer un filtre avec scipy
[AWS] Play with Step Functions (SAM + Lambda) Part.1 (Basic)
Je veux AWS Lambda avec Python sur Mac!
Tweet d'AWS Lambda
Gérer la rétention des groupes de journaux Amazon CloudWatch avec AWS Lambda
Créez des tweets ordinaires comme une flotte avec AWS Lambda et Python
Essayez les destinations AWS Lambda
[AWS] Play with Step Functions (SAM + Lambda) Part.2 (Paramètres)