Erstellen Sie mit AWS SAM schnell eine API mit Python, Lambda und API Gateway

Im Projekt habe ich beschlossen, eine einfache API mit Python zu erstellen, damit ich die Umgebung für die schnelle Erstellung der API vorbereiten kann.

Annahme

Editor ... VS Code OS…Windows10 Python 3.8 installiert AWS CLI installiert

Installieren von AWS CLI Version 2 auf der Windows-AWS-Befehlszeilenschnittstelle

Erforderliche Umgebung

Vorteile von AWS SAM

Laut dem offiziellen Dokument

  • Einzelne Bereitstellungskonfiguration --AWS CloudFormation-Erweiterungen
  • Eingebaute Best Practices
  • Lokales Debuggen und Testen
  • Enge Integration mit Entwicklungswerkzeugen

Ist ein Verdienst. Persönlich war es ein großer Vorteil, Lambda lokal debuggen zu können. Da es sich bei der tatsächlichen Situation um CloudFormation handelt, ist es auch in hohem Maße anpassbar.

Einführung in die AWS SAM CLI

Folgen Sie den offiziellen Dokumenten. Zusammenfassend

  1. Installieren Sie Docker
  2. Installieren Sie über das von AWS vertriebene Installationsprogramm (MSI-Datei) oder installieren Sie es mit pip install aws-sam-cli
  3. OK, wenn die Version mit sam --version ausgegeben wird

Docker wird installiert, um eine Ausführungsumgebung für Lambda auf dem lokalen Computer zu erstellen.

Einführung in das AWS Toolkit für Visual Studio Code

Dies ist eine Erweiterung von VSCode zum Betreiben von AWS SAM von VSCode mit GUI. AWS Toolkit - Visual Studio Marketplace

Erstellen Sie ein neues Projekt

Folgen Sie dem offiziellen Dokument.

  1. Öffnen Sie die Befehlspalette (Strg + Umschalt + P) und wählen Sie "Neue SAM-Anwendung erstellen" image.png
  2. Wählen Sie die Laufzeit aus, die Sie verwenden möchten. Diesmal Python 3.8 image.png
  3. Wählen Sie eine Vorlage aus. Dieses Mal werde ich es alleine benutzen, also Hwllo World image.png
  4. Geben Sie das Verzeichnis an, in dem Sie das Projekt erstellen möchten. Der Explorer wird geöffnet. Wählen Sie also einen beliebigen Ordner aus. image.png
  5. Geben Sie den Projektnamen an. Drücken Sie die Eingabetaste, um das Projekt zu erstellen. image.png image.png

Führen Sie das lokale Debugging aus

  1. Öffnen Sie "hello_world / app.py" und wählen Sie "Lokal debuggen", um eine virtuelle Umgebung im Docker zu erstellen und die Funktion auszuführen. image.png
  2. OK, wenn das Ergebnis an die Debug-Konsole ausgegeben wird image.png

Ereignis festlegen

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

Bereitstellen

Wir werden basierend auf template.yaml bereitstellen.

  1. Wählen Sie in der Befehlspalette die Option "SAM-Anwendung bereitstellen" image.png
  2. Wählen Sie eine Vorlage aus. Diesmal templete.yaml image.png
  3. Wählen Sie eine beliebige Bereitstellungszielregion aus. Diesmal Tokio image.png
  4. Geben Sie den Bucket-Namen für S3 an. Hier müssen Sie einen vorhandenen Bucket-Namen angeben. image.png
  5. Geben Sie den Stapelnamen an. Stapel ist der Name einer Gruppe von Diensten, die von CloudFormation erstellt wurden. Es hat den gleichen Namen wie der Projektname. image.png
  6. Wenn die Bereitstellung erfolgreich ist, wird die Debug-Konsole angezeigt. image.png

Bestätigen Sie, dass es bereitgestellt wurde

Sie können sehen, dass das Lambda wie unten gezeigt erstellt wurde. image.png Sie können bestätigen, dass die API auch in API Gateway erstellt wurde. image.png

Anpassen

Die standardmäßig erstellte API ist GET: / hello, also musst du templete.yaml bearbeiten, um dies zu ändern.

Unten ist die Standardeinstellung "templete.yaml"

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

Sie können den Pfad und die HTTP-Methode ändern, indem Sie dies wie folgt umschreiben

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: Ich konnte es in "anypath" ändern. image.png

Alles was Sie tun müssen, ist die Logik zu schreiben

Alles was Sie tun müssen, ist die Logik gemäß Ihren Anforderungen zusammenzustellen.

Wenn Sie es erneut bereitstellen, werden die Änderungen übernommen.

Recommended Posts

Erstellen Sie mit AWS SAM schnell eine API mit Python, Lambda und API Gateway
[AWS SAM] Erstellen Sie eine API mit DynamoDB + Lambda + API Gateway
[AWS] API mit API Gateway + Lambda erstellen
LINE BOT mit Python + AWS Lambda + API Gateway
Nehmen Sie schnell eine Abfragezeichenfolge mit API Gateway-> Lambda (Python)
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
[Python] Erstellen Sie schnell eine API mit Flask
[Python] Ich habe eine REST-API mit AWS API Gateway und Lambda geschrieben.
Serverlose Anwendung mit AWS SAM! (APIGATEWAY + Lambda (Python))
[AWS] Versuchen Sie, API Gateway + Lambda mit X-Ray zu verfolgen
Amazon API Gateway und AWS Lambda Python-Version
Erstellen Sie schnell einen API-Server mit Python + Falcon
AWS CDK-Lambda + API-Gateway (Python)
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
Versuchen Sie, einen Cisco Spark Bot mit AWS Lambda + Amazon API Gateway (Python) zu implementieren.
Erstellen Sie Awaitable mit der Python / C-API
Zusammenfassung bei Verwendung von AWS Lambda (Python)
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Erstellen Sie eine API mit hug mit mod_wsgi
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Ich habe ein Skript geschrieben, um mit AWS Lambda + Python 2.7 schnell eine Entwicklungsumgebung für Twitter Bot zu erstellen
Ich habe ChatOps mit Slack x API Gateway x Lambda (Python) x RDS ausprobiert
[Für Python] Erstellen Sie schnell eine Upload-Datei in AWS Lambda Layer
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
Erstellen Sie automatisch eine Python-API-Dokumentation mit Sphinx
Erstellen Sie schnell eine Excel-Datei mit Python #python
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Einfache REST-API mit API Gateway / Lambda / DynamoDB
[AWS] Erstellen Sie mit CodeStar eine Python Lambda-Umgebung und führen Sie Hello World aus
Zeigen Sie Bilder in S3 mit API Gateway + Lambda an
Letzte Ranglistenerstellung mit der Qiita-API mit Python
Dynamische HTML-Seiten mit AWS Lambda und Python
[AWS] Spielen mit Schrittfunktionen (SAM + Lambda) Teil 3 (Zweig)
Erstellen Sie eine Python-Version der Lambda-Funktion (+ Lambda-Schicht) mit Serverless Framework
[Python] Generieren Sie ValueObject mit dem vollständigen Konstruktor mithilfe von Datenklassen
Überprüfen Sie types_map, wenn Sie Mimetypen mit AWS Lambda (Python) verwenden.
So konfigurieren Sie Layer auf Lambda mit AWS SAM
Registrieren Sie Tickets mit der Redmine-API mithilfe von Python-Anforderungen
Stellen Sie die Python 3-Funktion mit Serverless Framework unter AWS Lambda bereit
[AWS] Spielen mit Schrittfunktionen (SAM + Lambda) Teil 1 (Basic)
Ich möchte Lambda mit Python auf Mac AWS!
Machen Sie mit AWS Lambda und Python gewöhnliche Tweets flottenartig
[AWS] Spielen mit Schrittfunktionen (SAM + Lambda) Teil 2 (Parameter)
[LINE Messaging API] Erstellen Sie einen Papageienrückgabe-BOT mit Python
Erstellen Sie mit Streamlit schnell ein Python-Datenanalyse-Dashboard und stellen Sie es in AWS bereit
Versuchen Sie, mit Python schnell und einfach auf die Twitter-API zuzugreifen
Betreiben Sie TwitterBot mit Lambda, Python
[S3] CRUD mit S3 unter Verwendung von Python [Python]
[Python] Scraping in AWS Lambda
Erstellen Sie eine API mit Django
"Inoffizielle Apple Refurbished Product Introduction" BOT mit LINE Messaging API (v2) + API Gateway + Lambda (Python)
Verwenden Sie die Twitter-API mit Python
Verwenden von Quaternion mit Python ~ numpy-quaternion ~