Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM

Dans le projet, j'ai décidé de créer une API simple en utilisant Python, donc je préparerai l'environnement pour créer rapidement l'API.

supposition

Éditeur ... VS Code OS…Windows10 Python 3.8 installé AWS CLI installé

Installation de l'AWS CLI version 2 sur l'interface de ligne de commande Windows-AWS

Environnement requis

Avantages d'AWS SAM

Selon le Document officiel

  • Configuration de déploiement unique --AWS CloudFormation extensions
  • Bonnes pratiques intégrées --Débogage et test locaux
  • Intégration étroite avec les outils de développement

C'est un mérite. Personnellement, être capable de déboguer localement lambda était un gros avantage. Étant donné que la situation réelle est CloudFormation, elle est également hautement personnalisable.

Présentation de l'AWS SAM CLI

Suivez les Documents officiels. En résumé

  1. Installez docker
  2. Installer à partir du programme d'installation (fichier .msi) distribué par AWS ou installer avec pip install aws-sam-cli
  3. OK si la version est sortie avec sam --version

docker est installé pour créer un environnement d'exécution pour lambda sur la machine locale.

Présentation de AWS Toolkit for Visual Studio Code

Il s'agit d'une extension de VS Code pour utiliser AWS SAM à partir de VS Code avec une interface graphique. AWS Toolkit - Visual Studio Marketplace

Créer un nouveau projet

Suivez les Documents officiels.

  1. Ouvrez la palette de commandes (Ctrl + Maj + P) et sélectionnez «Créer une nouvelle application SAM» image.png
  2. Sélectionnez le runtime que vous souhaitez utiliser. Cette fois Python 3.8 image.png
  3. Sélectionnez un modèle. Cette fois, je vais l'utiliser seul, alors Hwllo World image.png
  4. Spécifiez le répertoire dans lequel vous souhaitez créer le projet. L'explorateur s'ouvrira, alors sélectionnez n'importe quel dossier. image.png
  5. Spécifiez le nom du projet. Appuyez sur Entrée pour créer le projet. image.png image.png

Exécutez le débogage local

  1. Ouvrez hello_world / app.py et sélectionnez Déboguer localement pour créer un environnement virtuel dans le docker et exécuter la fonction. image.png
  2. OK si le résultat est sorti sur la console de débogage image.png

définir l'événement

.aws/templates.jsonで設定できる image.png

Déployer

Nous déploierons en fonction de template.yaml.

  1. Sélectionnez Deploy SAM Application dans la palette de commandes image.png
  2. Sélectionnez un modèle. Cette fois templete.yaml image.png
  3. Sélectionnez une région de destination de déploiement. Cette fois Tokyo image.png
  4. Spécifiez le nom du compartiment pour S3. Vous devez spécifier un nom de compartiment existant ici. image.png
  5. Spécifiez le nom de la pile. Stack est le nom d'un groupe de services créé par CloudFormation. Il porte le même nom que le nom du projet. image.png
  6. Si le déploiement réussit, la console de débogage s'affiche. image.png

Confirmez qu'il a été déployé

Vous pouvez voir que le lambda a été créé comme indiqué ci-dessous. image.png Vous pouvez également confirmer que l'API est créée dans API Gateway. image.png

Personnaliser

L'API créée par défaut est GET: / hello, vous devez donc modifier templete.yaml pour changer cela.

Ci-dessous se trouve le templete.yaml par défaut

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  trial-sam

  Sample SAM Template for trial-sam

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 3

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.8
      Events:
        HelloWorld:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /hello
            Method: get

Outputs:
  # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
  # Find out more about other implicit resources you can reference within SAM
  # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
  HelloWorldApi:
    Description: "API Gateway endpoint URL for Prod stage for Hello World function"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
  HelloWorldFunction:
    Description: "Hello World Lambda Function ARN"
    Value: !GetAtt HelloWorldFunction.Arn
  HelloWorldFunctionIamRole:
    Description: "Implicit IAM Role created for Hello World function"
    Value: !GetAtt HelloWorldFunctionRole.Arn

Vous pouvez changer le chemin et la méthode HTTP en réécrivant ceci comme suit

Before

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.8
      Events:
        HelloWorld:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /hello
            Method: get

After

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.8
      Events:
        HelloWorld:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /anypath # hello → anypath
            Method: post # get → post

POST: J'ai pu changer en ʻanypath`. image.png

Tout ce que vous avez à faire est d'écrire la logique

Tout ce que vous avez à faire est d'assembler la logique selon vos besoins.

Si vous le déployez à nouveau, les modifications seront reflétées.

Recommended Posts

Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
[AWS SAM] Créer une API avec DynamoDB + Lambda + API Gateway
[AWS] Créer une API avec API Gateway + Lambda
LINE BOT avec Python + AWS Lambda + API Gateway
Prenez rapidement une chaîne de requête avec API Gateway-> Lambda (Python)
[AWS] Utilisation de fichiers ini avec Lambda [Python]
[Python] Créez rapidement une API avec Flask
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
Application sans serveur avec AWS SAM! (APIGATEWAY + Lambda (Python))
[AWS] Essayez de tracer API Gateway + Lambda avec X-Ray
Version Amazon API Gateway et AWS Lambda Python
Créez rapidement un serveur API avec Python + Falcon
AWS CDK-Lambda + API Gateway (Python)
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
Récapitulatif si vous utilisez AWS Lambda (Python)
[AWS] Essayez d'ajouter la bibliothèque Python à la couche avec SAM + Lambda (Python)
Créez une API en utilisant hug avec mod_wsgi
Notifier HipChat avec AWS Lambda (Python)
J'ai écrit un script pour créer rapidement un environnement de développement pour Twitter Bot avec AWS Lambda + Python 2.7
J'ai essayé ChatOps avec Slack x API Gateway x Lambda (Python) x RDS
[Pour Python] Créez rapidement un fichier de téléchargement vers AWS Lambda Layer
Comment créer une API de machine learning sans serveur avec AWS Lambda
Créez automatiquement la documentation de l'API Python avec Sphinx
Créez rapidement un fichier Excel avec Python #python
Connectez-vous à s3 avec AWS Lambda Python
API REST facile avec API Gateway / Lambda / DynamoDB
[AWS] Créez un environnement Python Lambda avec CodeStar et faites Hello World
Afficher les images sur S3 avec API Gateway + Lambda
Création récente de classement à l'aide de l'API Qiita avec Python
Pages HTML dynamiques créées avec AWS Lambda et Python
[AWS] Play with Step Functions (SAM + Lambda) Part.3 (Branch)
Créer une fonction Lambda de version Python (+ couche Lambda) avec Serverless Framework
[Python] Générer ValueObject avec un constructeur complet à l'aide de classes de données
Vérifiez types_map lors de l'utilisation de mimetypes avec AWS Lambda (Python)
Comment configurer Layer sur Lambda à l'aide d'AWS SAM
Enregistrez des tickets avec l'API de Redmine en utilisant des requêtes Python
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
[AWS] Play with Step Functions (SAM + Lambda) Part.1 (Basic)
Je veux AWS Lambda avec Python sur Mac!
Créez des tweets ordinaires comme une flotte avec AWS Lambda et Python
[AWS] Play with Step Functions (SAM + Lambda) Part.2 (Paramètres)
[LINE Messaging API] Créer un BOT de retour de perroquet avec Python
Créez rapidement un tableau de bord d'analyse de données Python avec Streamlit et déployez-le sur AWS
Essayez d'utiliser l'API Twitter rapidement et facilement avec Python
Exploitez TwitterBot avec Lambda, Python
[S3] CRUD avec S3 utilisant Python [Python]
[Python] Scraping dans AWS Lambda
Créer une API avec Django
Création d'un BOT «Présentation non officielle du produit remis à neuf par Apple» avec l'API de messagerie LINE (v2) + API Gateway + lambda (python)
Utiliser l'API Twitter avec Python
Utilisation de Quaternion avec Python ~ numpy-quaternion ~