[PYTHON] Einfache REST-API mit API Gateway / Lambda / DynamoDB

Die 4. WEB Service Development Rekordserie mit 3 Freunden vom College.

In der Konfiguration des WEB-Dienstes, die wir dieses Mal erstellen werden (eingeführt in diesem Artikel) Ich möchte die API-Konstruktionsmethode auf der Back-End-Seite (API-Gateway + Lambda + DynamoDB) zusammenfassen.

Annahme

Umfang dieses Artikels

Diagramm

image.png

In diesem Artikel möchte ich die folgenden zwei Punkte erläutern.

  1. Aktuelle Einstellungen für API Gateway, Lambda und DynamoDB im obigen Konfigurationsdiagramm
  2. Ändern Sie die Prozedur, wenn Sie der API eine neue Methode hinzufügen

Aktuelle Einstellungen

Beginnen wir zunächst mit der Situation von DynamoDB, dem endgültigen Endpunkt der Daten. Als Nächstes werde ich die Einstellungen des API-Gateways vorstellen, das Anforderungen von der Flask-App empfängt. Schauen wir uns zum Schluss den Inhalt von Lambda an, das DynamoDB und API Gateway verbindet.

DynamoDB Öffnen Sie DynamoDB in der AWS Management Console, um die DynamoDB-Einstellungen zu überprüfen. image.png

Wählen Sie nach dem Öffnen der DynamoDB-Administrationskonsole im linken Menü "Tabellen" aus, um die Tabellenliste anzuzeigen. image.png

Wählen Sie die Tabelle aus, auf die Sie verweisen möchten (diesmal "ripple_prj"), um detaillierte Informationen anzuzeigen, z. B. eine Übersicht über die Tabelle und die registrierten Elemente. image.png

Der Name der diesmal verwendeten Tabelle "ripple_prj" wird durch die Regel " _ " benannt. Das heißt, ripple_prj ist eine Tabelle zum Verwalten von prj-Ressourcen auf der Ripple-Site.

Der primäre Partitionsschlüssel ist prj_id.

In der Ripple-Site, die wir dieses Mal erstellen, ist der Sortierschlüssel nicht so eingestellt, dass prj-Informationen an den Bildschirm zurückgegeben werden und Sie mit dem Anzeigesteuerelement auf dem Bildschirm suchen und eingrenzen können. Wenn Sie beim Abrufen von Daten aus DynamoDB Suchbedingungen festlegen möchten, müssen Sie das Element angeben, das Sie als Sortierschlüssel festlegen möchten.

image.png

Wenn Sie die Registerkarte Element öffnen, werden die in der Tabelle ripple_prj registrierten Daten angezeigt. Sie können die Details jedes Datensatzes überprüfen und bearbeiten, indem Sie auf den primären Partitionsschlüssel jeder Zeile klicken (Teil "prj0001" oder "prj0002" wird in der Spalte "prj_id" blau angezeigt).

image.png

Bisher haben wir die Tabelle in DynamoDB und den Inhalt der in der Tabelle gespeicherten Daten bestätigt.

Bei der tatsächlichen Verknüpfung mit der Flask-App werden wir überlegen und implementieren, wie diese DynamoDB-Daten erfasst und registriert und aktualisiert werden.

API Gateway Öffnen Sie das API-Gateway über die AWS Management Console. image.png

Die Liste der in API Gateway festgelegten APIs wird geöffnet. Die API des WEB-Dienstes, den wir dieses Mal erstellen, wird mit dem Namen "Ripple" erstellt. Klicken Sie also darauf, um die Details zu öffnen. image.png

Die hierarchische Struktur der in der API festgelegten Ressourcen und Methoden wird angezeigt. image.png

Klicken Sie auf / prj (prj-Ressource), um eine Liste der in der prj-Ressource festgelegten Methoden anzuzeigen. GET / prj ist der Prozess zum Abrufen der prj-Liste. POST / prj ist ein neuer Registrierungsprozess für prj Es entspricht. image.png

Wenn Sie auf / {prjid} (/ prj / {prjid} resource) klicken, wird eine Liste der für diese Ressource konfigurierten Methoden angezeigt. GET / prj / {prjid} ist der Prozess zum Abrufen eines bestimmten von prjid angegebenen Projekts. Es entspricht. image.png

Derzeit wurde bestätigt, dass drei Arten der Verarbeitung in der Ripple-API registriert sind. Als nächstes möchte ich den Inhalt jedes Prozesses genauer betrachten.

GET /prj Klicken Sie in der Ressource / prj auf GET, um den Verarbeitungsablauf innerhalb der Methode anzuzeigen. image.png

Die API-Gateway-Verarbeitung wird gemäß dem folgenden Ablauf ausgeführt.

Client (in diesem Fall die Flask App auf Heroku) → Methodenanforderung (Legen Sie die Parameter fest, die API Gateway vom Client empfängt.) → Integrationsanforderung (Legen Sie die Parameter fest, die das API-Gateway an das nachfolgende Lambda übergibt.)   →Lambda → Integrierte Antwort (Legen Sie die Parameter fest, die API Gateway von Lambda empfängt.) → Methodenantwort (Legen Sie die Parameter fest, die API Gateway an den Client zurückgibt.) → Client (empfängt API Gateway-Verarbeitungsergebnisse)

GET / prj setzt zwei Teile fest: Methodenanforderung und Integrationsanforderung.

GET / prj-Methodenanforderung

Ich habe die Notwendigkeit eines API-Schlüssels auf true gesetzt. Ripple erfordert einen API-Schlüssel für alle APIs. Der Grund, warum der API-Schlüssel dieses Mal benötigt wird, ist, dass wir die Zugriffsquelle nur auf die Flask-App auf Heroku beschränken möchten.

Der Parameter für die URL-Abfragezeichenfolge ist nicht besonders festgelegt. Im Allgemeinen können Sie bei der GET-Methode "?" Am Ende der URL wie "https: //my-api.com/prj? Key1 = value1 & key2 = value2" hinzufügen und Parameter in Form von "key = value" übergeben. Ich kann es schaffen Dieses Mal war es nicht notwendig, die Parameter einzustellen, da die Verarbeitung von GET / prj die Liste von prj erhalten soll. image.png

Integrationsanfrage

Dieses Mal, da die nachfolgende Verarbeitung in Lambda implementiert ist, Integrationstyp: Lambda Lambda-Funktion: ripple_prj Ist eingestellt. (Die Implementierung von ripple_prj wird später beschrieben.)

Eine Zuordnungsvorlage wird definiert, um die Parameter festzulegen, die an Lambda übergeben werden sollen. image.png

Der Inhalt der Zuordnungsvorlage lautet wie folgt. Die feste Zeichenkette "Suche" wird in der Parametermethode eingestellt. image.png

POST /prj Wird zu einem späteren Zeitpunkt hinzugefügt.

GET /prj/{prjid} Wird zu einem späteren Zeitpunkt hinzugefügt.

Lambda Ich erstelle eine Lambda-Funktion namens ripple_rpj.

ripple_prj/lambda_function.py


import boto3

dynamodb = boto3.resource('dynamodb') #Wählen Sie die zu verwendenden Ressourcen aus
table_name = "ripple_prj" #Tabellenname
dynamotable = dynamodb.Table(table_name)

def get(event):
    if "prj_id" not in event:
        return event
    primary_key = {"prj_id": event["prj_id"]} #Tabellenname
    res = dynamotable.get_item(Key=primary_key) #Suchen Sie mit dem angegebenen Prismar und erhalten Sie das Ergebnis
    item = res["Item"] #Da kein Element angegeben ist, alle

    return item

def search(event):
    response = dynamotable.scan()
    items = response['Items']
    return items

def create(event):
    print(event)
    response = dynamotable.put_item(
        Item={
            'prj_id': event['prj_id'],
            'name': event['name'],
            'goal': event['goal'],
            'issue': event['issue'],
            'description': event['description'],
            'term': event['term'],
            'term_unit': event['term_unit'],
            'create_date': event['create_date'],
        }
    )
    return response
    

def lambda_handler(event, context):
    print(event)
    return eval(event['method'])(event)

Implementierungspunkte

Ändern Sie die Prozedur, wenn Sie der API eine neue Methode hinzufügen

Derzeit gibt es nur eine Referenz und Registrierung von prj. Implementieren wir also den Aktualisierungsprozess von prj.

DynamoDB Keine Arbeit, da keine Änderungen an vorhandenen Tabellen / Elementen vorgenommen wurden

API Gateway Fügen Sie eine neue Put-Methode für die prj-Ressource hinzu. Wird zu einem späteren Zeitpunkt hinzugefügt.

Lambda Schreiben und speichern Sie den Prozess des Überschreibens und Aktualisierens der vorhandenen prj-Informationen mit den empfangenen prj-Informationen. Wird zu einem späteren Zeitpunkt hinzugefügt

Stellen Sie das API-Gateway bereit

Testen Sie, wann alles erledigt ist, und stellen Sie es bereit, wenn es in Ordnung ist. Nach der Bereitstellung werden die Änderungen veröffentlicht und neue Methoden können über die Flask-App aufgerufen werden. Wird zu einem späteren Zeitpunkt hinzugefügt

Korrespondenz auf der Kolbenseite

API-Aufrufverarbeitung hinzufügen. Bei dieser Methode haben mehrere Personen gleichzeitig die Projektseite geöffnet. Bei jeder Aktualisierung werden die Daten der Person, die zuvor aktualisiert wurde, von der späteren Person überschrieben und verschwinden. Gegenstände, die nur einen enthalten können, wie der Projektname und die Ziele, können später gewonnen werden. Bei Elementen, die mehrere Werte haben können, z. B. die Zeitleiste, muss auf den neuesten DynamoDB-Status verwiesen und zusammengeführt werden, wenn sich eine spätere Person registriert. Implementieren Sie die Logik unter Berücksichtigung dieser Seite. Wird zu einem späteren Zeitpunkt hinzugefügt.

Recommended Posts

Einfache REST-API mit API Gateway / Lambda / DynamoDB
[AWS SAM] Erstellen Sie eine API mit DynamoDB + Lambda + API Gateway
[AWS] API mit API Gateway + Lambda erstellen
Zeigen Sie Bilder in S3 mit API Gateway + Lambda an
LINE BOT mit Python + AWS Lambda + API Gateway
[AWS] Versuchen Sie, API Gateway + Lambda mit X-Ray zu verfolgen
Nehmen Sie schnell eine Abfragezeichenfolge mit API Gateway-> Lambda (Python)
Erstellen Sie mit AWS SAM schnell eine API mit Python, Lambda und API Gateway
Betreiben Sie Nutanix mit der REST-API Teil 2
Senden Sie mit ESP32-WROOM-32 aufgenommene Bilder an AWS (API Gateway → Lambda → S3).
Ich habe ChatOps mit Slack x API Gateway x Lambda (Python) x RDS ausprobiert
[Python] Ich habe eine REST-API mit AWS API Gateway und Lambda geschrieben.
Erstellen Sie eine REST-API, um dynamodb mit dem Django REST Framework zu betreiben
Bearbeiten von DynamoDB-Daten mit Lambda (Node & Python)
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
Versuchen Sie, einen Cisco Spark Bot mit AWS Lambda + Amazon API Gateway (Python) zu implementieren.
Einfache Röntgenaufnahme mit Lambda Layer und CloudFormation / sam-cli
Übergeben Sie die Cognito-ID über das API-Gateway an Lambda
Amazon API Gateway und AWS Lambda Python-Version
Schreiben Sie mit Lambda (Python, JavaScript) mehrere Datensätze in DynamoDB.
Versuchen Sie, die Überwachung der Anzahl von Qiita mit Lambda + DynamoDB + CloudWatch zu automatisieren
Bilden Sie Lambda-Schichten mit Lambda
Easy Grad-CAM mit Pytorch-Gradcam
"Inoffizielle Apple Refurbished Product Introduction" BOT mit LINE Messaging API (v2) + API Gateway + Lambda (Python)
Verwenden Sie DynamoDB mit Python
Extrudieren Sie mit der Fusion360-API
Einfaches Debuggen mit ipdb
Einfache TopView mit OpenCV
Berücksichtigen Sie bei der Verarbeitung von DynamoDB Stream mit Lambda (Python) die allgemeine Vorverarbeitung.
Einfache Verwendung der Nifty Cloud API mit Botocore und Python
Die erste API, die mit dem Python Djnago REST-Framework erstellt wurde