[PYTHON] Ich habe die Entwicklungsumgebung von AWS Chalice mit Docker erstellt und versucht, eine serverlose Anwendung mit sehr hoher Geschwindigkeit bereitzustellen

Ich habe die Entwicklungsumgebung von AWS Chalice mit Docker erstellt und versucht, eine serverlose Anwendung mit sehr hoher Geschwindigkeit bereitzustellen

Kelch und Lambda sind neu für mich, Ich freue mich über meine erste serverlose Anwendung und werde sie schreiben

Quellcode naokit-dev / python3_chalice_on_docker

Kelch?

Von AWS bereitgestelltes Python-Framework Stellen Sie mit Lambda ganz einfach serverlose Anwendungen bereit Documentation — AWS Chalice

Umgebung

docker --version
Docker version 19.03.13, build 4484c46d9d
docker-compose --version
docker-compose version 1.27.4, build 40524192

Außerdem ist ** AWS-Zugriffsschlüssel erforderlich **

Vorbereitende Bewegung

Überprüfen Sie das von Docker Hub verwendete Image python - Docker Hub

AWS Chalice kann alle von Lambda unterstützten Pythons verwenden, es werden jedoch 3 Serien empfohlen

AWS Chalice supports all versions of python supported by AWS Lambda, which includes python2.7, python3.6, python3.7, python3.8. We recommend you use a version of Python 3. Quickstart — AWS Chalice

Hier werde ich versuchen, 3.8-alpine zu verwenden

Erstellen Sie einen neuen Arbeitsbereich mit VS Code Ich habe es "python3_chalice_on_docker" gemacht

(Ich brauche die folgenden Schritte nicht, aber ich habe es als Mindestkonfiguration versucht, damit Python funktioniert.)

Ziehen Sie das Docker Hub-Image und starten Sie den Container

--- it An Standardeingabe anhängen ---- rm Container beim Verlassen des Containers löschen --- v <Host_Pfad>: Mounten Sie den Hostpfad als Volume

docker run -it --rm -v $PWD:/python python:3.8-alpine /bin/sh

(Wenn Sie versuchen, mit einem relativen Pfad wie "-v .: / Python" zu mounten, wird eine Fehlermeldung angezeigt, aber es scheint, dass Sie die Umgebungsvariable "$ PWD" verwenden können, und es gibt kein Problem mit "-v $ PWD: / python" | Volume relative Ich möchte Docker ausführen, auch wenn ich den Pfad angegeben habe! --Qiita)

# python --version
Python 3.8.6

Erstellen Sie eine Docker-Datei

Sie arbeiten in dem zuvor erstellten Arbeitsbereich

Erstellen Sie eine Docker-Datei Installieren Sie den Kelch mit pip install chalice

touch Dockerfile
FROM python:3.8-alpine

WORKDIR /app

RUN pip install chalice

CMD [ "/bin/sh"]

Als nächstes erstellen Sie "docker-compose.yml" Zusätzlich zur Portzuordnung und Datenträgererstellung können die in .env beschriebenen Umgebungsvariablen im Container behandelt werden.

touch docker-compose.yml
version: "3.8"
services:
  app:
    build: .
    ports:
      - "80:8000"
    volumes:
      - .:/app
    command: chalice local --host=0.0.0.0 --port=8000
    tty: true
    stdin_open: true
    working_dir: "${APP_PATH}"
    environment:
      - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
      - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
      - AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}

Erstellen Sie .env Definieren Sie hier Umgebungsvariablen APP_NAME ist jetzt leer Andere können unverändert bleiben, aber Sie schreiben die Anmeldeinformationen, die für die Bereitstellung in AWS erforderlich sind.

touch .env
APP_NAME=
APP_PATH=/app/${APP_NAME}
AWS_ACCESS_KEY_ID=[YOUR_ACCESS_KEY_ID]
AWS_SECRET_ACCESS_KEY=[YOUR_SECRET_ACCESS_KEY]
AWS_DEFAULT_REGION=ap-northeast-1

Wenn AWS-Anmeldeinformationen auf dem Gerät gespeichert sind Sie können unten überprüfen

cat ~/.aws/credentials

Erstellen Sie ein Kelchprojekt

Erstellen Sie ein neues Projekt mit chalice new-project <Projektname>

docker-compose run app chalice new-project test_chalice

Es hat die folgende Konfiguration

.
├── .env
├── Dockerfile
├── docker-compose.yml
└── test_chalice
    ├── .chalice
    │   └── config.json
    ├── .gitignore
    ├── app.py
    └── requirements.txt

Umgebungsvariablen definieren

Bearbeiten Sie .env Geben Sie hier den Projektnamen in APP_NAME sowie AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY ein. Die Region ist auf "ap-nordost-1" eingestellt, aber bitte ändern Sie sie entsprechend.

APP_NAME=test_chalice
APP_PATH=/app/${APP_NAME}
AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxx
AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxx
AWS_DEFAULT_REGION=ap-northeast-1

Richten Sie einen lokalen Server ein

Starten Sie den lokalen Server

docker-compose up

Ich habe den Befehl in docker-compose.yml als "Befehl: chalice local --host = 0.0.0.0 --port = 8000" überschrieben, daher wird "chalice local" bei "docker-compose up" ausgeführt

Ich habe Port 80 auf der Hostseite Port 8000 im Container mit den Ports zugeordnet: - "80: 8000". Wenn ich also vom Host auf "localhost" zugreife, wird der Port an den lokalen Server von chalice weitergeleitet.

curl localhost
{"hello":"world"}%

"Hallo Welt" wird zurückgegeben

Werfen wir einen Blick auf test_chalice / app.py Kommentieren Sie die folgenden auskommentierten Teile aus

# @app.route('/hello/{name}')
# def hello_name(name):
#    # '/hello/james' -> {"hello": "james"}
#    return {'hello': name}

Wenn ich versuche, auf / hello / chalice zuzugreifen

curl localhost/hello/chalice
{"hello":"chalice"}%

"Hallo Kelch" wird zurückgegeben Sie können RESTful Verhalten sehen

Stoppen Sie den lokalen Server

docker-compose down

Versuchen Sie zu implementieren

Wird als AWS Lambda-Funktion mit "Kelchbereitstellung" bereitgestellt

docker-compose run app chalice deploy

Creating deployment package.
Creating IAM role: test_chalice-dev
Creating lambda function: test_chalice-dev
Creating Rest API
Resources deployed:
  - Lambda ARN: arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxx:function:test_chalice-dev
  - Rest API URL: https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/api/

Versuchen Sie, auf die Rest-API-URL zuzugreifen

curl https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/api/
{"hello":"world"}%

curl https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/api/hello/lambda
{"hello":"lambda"}%

Kelch analysiert den Code Es scheint, dass es als Lambda-Funktion mit der erforderlichen IAM-Rolle bereitgestellt wird.

Als nächstes möchte ich eine etwas praktische App ausprobieren.

Ref. Documentation — AWS Chalice

Recommended Posts

Ich habe die Entwicklungsumgebung von AWS Chalice mit Docker erstellt und versucht, eine serverlose Anwendung mit sehr hoher Geschwindigkeit bereitzustellen
Ich habe gerade eine virtuelle Umgebung mit der AWS-Lambda-Schicht erstellt
Ich habe versucht, mit Docker einen Dienst aufzubauen, der maschinell erlernte Daten mit explosiver Geschwindigkeit verkauft
Ich habe eine Entwicklungsumgebung für Django 3.0 mit Docker, Docker-Compose und Poetry erstellt
[DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Ich habe versucht, einen URL-Verkürzungsdienst mit AWS CDK serverlos zu machen
Ich habe Java8 + Spring Boot mit GAE SE (und seiner Entwicklungsumgebung) ausprobiert.
So führen Sie eine Django-Anwendung auf einem Docker-Container aus (Entwicklungs- und Produktionsumgebung)
Ich habe versucht, eine Umgebung zu erstellen, um regelmäßig mit Selenium mit AWS Fargate zu überprüfen
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Ich habe versucht, eine Umgebung mit WSL + Ubuntu + VS-Code in einer Windows-Umgebung zu erstellen
[VueSlsApp] Ich habe ein Beispiel für eine serverlose App erstellt, die mit Entwicklungs- und Betriebs-Know-how ausgestattet ist.
Verwendung von Docker zum Containerisieren Ihrer Anwendung und Verwenden von Docker Compose zum Ausführen Ihrer Anwendung in einer Entwicklungsumgebung
[Go + Gin] Ich habe versucht, eine Docker-Umgebung zu erstellen
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Ich habe versucht, eine OCR-App mit PySimpleGUI zu erstellen
Erstellen Sie eine Entwicklungsumgebung mit Poetry Django Docker Pycharm
Python: Ich habe es mit Lügner und Ehrlichkeit versucht
Ich habe ein Skript geschrieben, um mit AWS Lambda + Python 2.7 schnell eine Entwicklungsumgebung für Twitter Bot zu erstellen
[Memo] Erstellen Sie mit Docker eine Entwicklungsumgebung für Django + Nuxt.js
Erstellen Sie einfach eine GCP-Umgebung für Kaggle mit hoher Geschwindigkeit
[Django] Erstellen Sie mit PyCharm schnell eine Entwicklungsumgebung für Django-Container (Docker)
Erstellen Sie mit VSCode & Docker Desktop eine einfache Python-Entwicklungsumgebung
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
Erstellen Sie mit Docker kostengünstig eine Flask-Entwicklungsumgebung
[AWS] Flask-Anwendungsbereitstellungsversion, die versucht hat, eine Python-Umgebung mit eb zu erstellen [Elastic Beanstalk]
Ist die Umgebung ohne Server mehr als 600 Mal langsamer? ~ Ich habe Benchmarking mit Go, Node.js und Python versucht! ~
[TF2.0-Anwendung] Ein Fall, in dem die allgemeine Datenerweiterung mit der starken Datensatzfunktion des TF-Beispiels parallelisiert und mit hoher Geschwindigkeit realisiert wurde.