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
Von AWS bereitgestelltes Python-Framework Stellen Sie mit Lambda ganz einfach serverlose Anwendungen bereit Documentation — AWS Chalice
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 **
Ü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>:
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
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 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
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
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
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