Application sans serveur avec AWS SAM! (APIGATEWAY + Lambda (Python))

introduction

Il y a quelque temps, lorsque j'ai créé une API dans un environnement AWS au travail. Possibilité de former un serveur sans serveur qui vous intéressait! J'étais heureux de penser que Il y a eu une période avant le début du développement, alors j'aimerais essayer quelque chose chez moi ... Mais j'ai peur si je charge accidentellement beaucoup lorsque je mets en place un test de charge ... Existe-t-il un moyen de le construire localement? Quand je l'ai cherché, il semblait être là.

Il semble que vous puissiez créer un environnement d'application sans serveur dans un environnement local avec l'AWS SAM CLI. Interface de ligne de commande AWS Serverless Application Model (SAM). Créer, tester et déboguer des applications sans serveur localement](https://aws.amazon.com/jp/blogs/news/aws-serverless-application-model-sam-command-line-interface-build-test- et-debug-serverless-apps-localement /)

Jouons à Hello World localement!


1: Environnement de mise en œuvre

・ Windows10 Famille ・ Docker Toolbox OU Docker pour Windows ・ Python ・ CLI AWS SAM Surface.


2: Composition

Navigateur → API GATEWAY → Lambda (Python)


3: Préparation environnementale

1. 1. Installation de Python

https://www.python.org/downloads/ Téléchargé depuis python-3.8.1.exe Installez autour. image.png Vérifiez le cercle rouge et mettez-le dans votre PATH.


2. Installer Docker

Vous avez besoin de Docker pour l'exécuter, alors mettez-le dans la boîte à outils Docker! (* Si le système d'exploitation n'est pas à la maison, vous devez installer Docker pour Windows dans cet élément! C'est également facile car je pense que vous pouvez utiliser uniquement le programme d'installation!)

https://github.com/docker/toolbox/releases De DockerToolbox-19.03.1.exe Déposez et installez! (La version de l'exe change en fonction de l'heure.)

Une fois installé image.png

Je pense qu'il y a une telle icône, Si vous l'exécutez et ouvrez un terminal comme celui-ci, l'installation est OK! image.png

3. 3. Installez sam

Vous pouvez l'installer en appuyant sur une commande, donc Entrons depuis la commande! Ouvrez PowerShell et tapez:

pip install aws-sam-cli

Ensuite, le téléchargement démarre et l'installation est terminée! Ensuite, appuyez sur la commande suivante pour vérifier.

PS C:\> sam --version
SAM CLI, version 0.40.0

Ce n'est pas grave si une version sort comme ça!


4: exemple d'exécution

1. 1. Installer un exemple Hello World

Mettons l'exemple d'application dans un dossier approprié.

mkdir C:\Users\Nom d'utilisateur\samtest
cd C:\Users\Nom d'utilisateur\samtest

Créez un dossier comme celui-ci et déplacez-le. (Le nom d'utilisateur est le nom d'utilisateur de connexion) Puis

sam init --runtime python3.7

Exécuter.

image.png Si vous voyez cet affichage, Appuyez sur 1

Project name [sam-app]:

Entrez tel quel

image.png Le suivant est encore 1 image.png L'installation est maintenant terminée!

Dans le dossier précédent sam-app Un dossier a été créé et un exemple de fichier a été créé à l'intérieur. ↓ Affichage de l'arborescence

└─sam-app
    │  .gitignore
    │  README.md
    │  template.yaml
    │
    ├─events
    │      event.json
    │
    ├─hello_world
    │      app.py
    │      requirements.txt
    │      __init__.py
    │
    └─tests
        └─unit
                test_handler.py
                __init__.py

2. Essai

Après avoir confirmé que l'installation est terminée, exécutons un test.

cd sam-app
python -m pip install --upgrade pip
pip install pytest pytest-mock --user
python -m pytest tests/ -v

Mettre à jour pip sur la deuxième ligne, Installer le test sur la ligne 3 Le test est exécuté sur la 4ème ligne. image.png Je pense que le test passera comme ça!


3. 3. Construire

Construisons et exécutons le programme!

sam build --use-container

image.png Une fois construit, HelloWorldFunction sera défini et prêt à fonctionner!


4. Exécution de l'API

Exécutez l'API localement afin qu'elle soit accessible depuis votre navigateur pour exécuter votre programme!

sam local start-api

image.png Parce qu'un affichage comme celui-ci apparaît

http://127.0.0.1:3000/hello

Vous pouvez voir que vous pouvez accéder!


5. accès!

http://127.0.0.1:3000/hello

Accédons. Le premier peut prendre un certain temps.

image.png Si vous voyez cet affichage, c'est OK!


EX: essayez de modifier

À ce rythme, il suffit d'exécuter l'exemple de programme Je ne sais pas ce qui se passe, alors je vais juste jouer avec et réessayer!


1. 1. Modification du programme

Arrêtez l'API une fois!

Touche Ctrl+Touche C

Appuyez dessus avec le clavier pour arrêter.

Puis Dans le dossier hello_world Modifiez app.py! (Veuillez modifier avec un éditeur de texte, etc.) image.png Ce fichier est la partie de traitement proprement dite.

import json

# import requests


def lambda_handler(event, context):
    """Sample pure Lambda function

    Parameters
    ----------
    event: dict, required
        API Gateway Lambda Proxy Input Format

        Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format

    context: object, required
        Lambda Context runtime methods and attributes

        Context doc: https://docs.aws.amazon.com/lambda/latest/dg/python-context-object.html

    Returns
    ------
    API Gateway Lambda Proxy Output Format: dict

        Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
    """

    # try:
    #     ip = requests.get("http://checkip.amazonaws.com/")
    # except requests.RequestException as e:
    #     # Send some context about this error to Lambda Logs
    #     print(e)

    #     raise e

    #Postscript
    Dataout = [{'Données 1': 'Bonjour','Données 2': 'Bonne nuit' , 'cd':'Z01'}]

    return {
        "statusCode": 200,
        "body": json.dumps({
            #Récrire"message": "hello world",
            "message": Dataout,
            # "location": ip.text.replace("\n", "")
        }),
    }

Ajout de variables Dataout Remplacement de la sortie du message. Merci de sauvegarder!


2. Reconstruction et exécution de l'API

Reconstruisez et exécutez l'API.

sam build --use-container
sam local start-api

3. 3. Re-accéder

Si vous pouvez le faire, essayez à nouveau d'y accéder.

http://127.0.0.1:3000/hello

Je pense qu'un tel résultat est renvoyé.

{"message": [{"\u30c7\u30fc\u30bf1": "\u306f\u308d\u30fc", "\u30c7\u30fc\u30bf2": "\u304a\u3084\u3059\u307f", "\uff43\uff44": "Z01"}]}

Décodons la chaîne de caractères retournée avec un service comme celui ci-dessous. http://dev.digitra.net/tools/jsonfairing.php image.png Si vous obtenez un tel résultat, vous réussissez!

Vous pouvez maintenant exécuter Hello World et apporter des modifications! Ensuite, j'aimerais connecter DynamoDB à celui que j'ai créé cette fois!

Recommended Posts

Application sans serveur avec AWS SAM! (APIGATEWAY + Lambda (Python))
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Notifier HipChat avec AWS Lambda (Python)
[AWS] Essayez d'ajouter la bibliothèque Python à la couche avec SAM + Lambda (Python)
Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Connectez-vous à s3 avec AWS Lambda Python
Touchez AWS avec Serverless Framework et Python
[AWS SAM] Créer une API avec DynamoDB + Lambda + API Gateway
Grattage sans serveur régulier avec AWS lambda + scrapy Part 1.8
LINE BOT avec Python + AWS Lambda + API Gateway
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
Créer une couche pour AWS Lambda Python dans Docker
[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)
Exploitez TwitterBot avec Lambda, Python
[Python] Scraping dans AWS Lambda
Déployer Django sans serveur avec Lambda
PyTorch avec AWS Lambda [importation Lambda]
Application Web avec Python + Flask ② ③
Simplifiez-vous la tâche avec les exigences Python sans serveur
Application Web avec Python + Flask ④
Surveillance du site et notification d'alerte avec AWS Lambda + Python + Slack
[Présentation de l'application Udemy Python3 +] 58. Lambda
Récapitulatif si vous utilisez AWS Lambda (Python)
[AWS] Créer une API avec API Gateway + Lambda
Extraction de texte avec AWS Textract (Python3.6)
Détection de visage avec Lambda (Python) + Rekognition
Ecrire une fonction AWS Lambda en Python
Surveillez les performances des applications Python avec Dynatrace ♪
Exécutez Python selon la planification sur AWS Lambda
Utiliser PostgreSQL avec Lambda (Python + psycopg2)
Développement d'applications avec Docker + Python + Flask
Application de Python: Nettoyage des données Partie 2: Nettoyage des données à l'aide de DataFrame
[AWS SAM] Présentation de la version Python
Créer une application Web de type Flask / Bottle sur AWS Lambda avec Chalice
Manipulation des données Kintone avec le pilote ODBC Python & C Data d'AWS Lambda
Grattage sans serveur régulier avec AWS lambda + scrapy, partie 1
Faisons une discussion WEB en utilisant WebSocket avec AWS sans serveur (Python)!
Comment créer une API de machine learning sans serveur avec AWS Lambda
ImportError lors de la tentative d'utilisation du package gcloud avec la version AWS Lambda Python
[AWS] Créez un environnement Python Lambda avec CodeStar et faites Hello World
Manipulation des données DynamoDB avec Lambda (Node et Python)
Je veux jouer avec aws avec python
[Python] Une application web rapide avec Bottle!
[AWS] Associez Lambda et S3 à boto3
Utiliser Application Insights avec Python 3 (y compris les bouteilles)
[Python] Exécutez Headless Chrome sur AWS Lambda
Exécutez une application Web Python avec Docker
API de reconnaissance faciale sans serveur conçue avec Python