Mit Python mit Kelch ganz einfach ohne Server

Tag 5 von Python Adventskalender 2016 Dies ist der Artikel am 5. Tag von Fusic Adventskalender 2016.

Schön dich kennenzulernen, mein Name ist seike460. Normalerweise berühre ich PHP und den Server.

Ich möchte in der Mode serverlos sein! Ich dachte, Die aktuelle Situation ist, dass PHP unter AWS nicht serverlos sein kann, was ich auf freundliche Weise verwende. (Um genau zu sein, können Sie es tun, wenn Sie Ihr Bestes geben, aber ich werde diese Geschichte beiseite lassen.)

Ich kann nicht helfen, was ich nicht kann, also dachte ich, ich würde es ohne Server in einer anderen Sprache versuchen. Ich habe beschlossen, es mit Python serverlos zu machen, was mich in letzter Zeit angezogen hat.

Wenn Sie versuchen, Lambda und API Gateway zu konfigurieren, ohne etwas zu verwenden, ~~ Es ist zu nervig und ich fühle mich verrückt ~~ Ich hatte den Eindruck, dass es ineffizient war und die eigentliche Operation nicht ertragen konnte.

Deshalb habe ich die offizielle Amazon Python-Bibliothek "chalice" ausgewählt und implementiert.

Wenn Sie über ein AWS-Konto verfügen, können Sie Hello World in weniger als 10 Minuten ohne Server ausführen, indem Sie den Abschnitt Schnellstart ausführen. ~~ Immerhin ist der Name, der die beiden Herzen der Küche stimuliert, der beste, der Heilige Becher! Heiliger Becher! ~~ Da die Einführungsmethode bereits in READ ME geschrieben wurde, wird die Einführungsmethode weggelassen.

Diese Zielsetzung

Dieses Mal war das Ziel, Json an API Gateway zu senden und Json in S3 zu speichern. Es wird davon ausgegangen, dass eine API zum Empfangen von Daten installiert und die Daten über S3 verwendet werden.

qiita-2016-12-05_1.png

Entwicklungsumgebung

OS:macOS v10.12(Sierra) Python:2.7.10

Vorbereitung auf der AWS-Seite

Bereiten Sie zunächst eine IAM-Rolle für charis vor. Dieses Mal werden wir es unabhängig von der Autorität einstellen. Vorerst werde ich Ihnen Autorität geben. ** * Eigentlich solltest du darüber nachdenken! Selbstverantwortung !! **

↓ Es sieht so aus.

qiita-2016-12-05_2.png

Legen Sie dann die Anmeldeinformationen in Ihrer Entwicklungsumgebung fest.

~/.aws/config


[default]
aws_access_key_id=Ich kann es dir nicht zeigen! !! !! ]]
aws_secret_access_key=Ich kann es dir nicht zeigen! !! !! ]]
region=ap-northeast-1 ← Region Tokio

Hallo Welt ist bereit zu gehen.

Ich werde auch AWS berühren, also werde ich auch boto3 einschließen. Wenn Sie zu diesem Zeitpunkt virtualenvs verwenden möchten, installieren Sie es in der Umgebung, in der charice verwendet wird.

boto3


(chalice) $ pip install boto3

--Referenz - boto3 - virtualenvs

Let's hello world Erstellen Sie ein save2S3-Projekt.

new-project


(chalice) $ chalice new-project save2S3

Anschließend wird die folgende Verzeichnisstruktur erstellt.

save2S3


save2S3
├── .chalice
│   └── config.json
├── .gitignore
├── app.py
└── requirements.txt

Bearbeiten Sie diese app.py, um sie serverlos zu machen. Öffnen wir app.py.

app.py



from chalice import Chalice

app = Chalice(app_name='save2S3')


@app.route('/')
def index():
    return {'hello': 'world'}


# The view function above will return {"hello": "world"}
# whenver you make an HTTP GET request to '/'.
#
# Here are a few more examples:
#
# @app.route('/hello/{name}')
# def hello_name(name):
#    # '/hello/james' -> {"hello": "james"}
#    return {'hello': name}
#
# @app.route('/users', methods=['POST'])
# def create_user():
#     # This is the JSON body the user sent in their POST request.
#     user_as_json = app.json_body
#     # Suppose we had some 'db' object that we used to
#     # read/write from our database.
#     # user_id = db.create_user(user_as_json)
#     return {'user_id': user_id}
#
# See the README documentation for more examples.
#

Die Atmosphäre, die in der Lage zu sein scheint, Hallo Welt zu tun, ist erstaunlich. Es scheint, dass Kelch eine Hallo-Welt hat, also lasst es uns sofort auf AWS bereitstellen.

deploy


(chalice) $ chalice deploy

Initial creation of lambda function.
Creating role
Creating deployment package.
Lambda deploy done.
Initiating first time deployment...
Deploying to: dev
https://[Dein einzigartiger Weg].execute-api.ap-northeast-1.amazonaws.com/dev/

Die Bereitstellung war sehr einfach. Standardmäßig wird es in einem Pfad namens / dev erstellt. Wenn Sie es in einem Pfad namens api erstellen möchten, können Sie den folgenden Befehl verwenden.

deploy_to_api


(chalice) $ chalice deploy api

Ich werde versuchen, sofort auf die URL zuzugreifen.

deploy


(chalice) $ curl https://[Dein einzigartiger Weg].execute-api.ap-northeast-1.amazonaws.com/dev/
{"hello": "world"}

Damit ist Ihr Charis-Debüt abgeschlossen. Zeigen Sie Ihrem Nachbarn: "Ich kann den Heiligen Pokal benutzen." ** Es ist nicht meine Schuld, wenn das Ergebnis enttäuschend ist. Eigenverantwortung **

Code, um das Ziel zu erreichen

Das Top ist gut! Ich schreibe so einen kleinen Code.

app.py


from chalice import Chalice
import boto3
import json

# for S3
clientS3 = boto3.client('s3')
yourBucketPath = '[Schreiben Sie Ihren Eimer hier! ]]'

app = Chalice(app_name='save2S3')

@app.route('/save', methods=['POST'], content_types=['application/json'])
def save():
  saveJson = app.current_request.json_body
  if (validateKey(saveJson) == False):
    return {'error':'please input key'}
  SavePath = saveJson['key'] + '.json'
  clientS3.put_object(Bucket=yourBucketPath, Key=SavePath, Body=json.dumps(saveJson, ensure_ascii=False))
  return {'save':saveJson['key']}

def validateKey(saveJson):
  if (saveJson.has_key("key") == False):
      return False
  return True

Es wird nur die minimale Schlüsselüberprüfung gespeichert.

Ich werde auch einen kleinen Code schreiben, um diesen Kerl zu überprüfen. ** * Ich habe das in Python3 geschrieben. ** (Lambda unterstützt Python3)

postJson.py


import urllib.request
import json

url = "https://[Dein einzigartiger Weg].execute-api.ap-northeast-1.amazonaws.com/dev/save"
method = "POST"
headers = {"Content-Type" : "application/json"}
obj = {"key" : "seike460", "val" : "Ich kann den Heiligen Pokal benutzen"}
json_data = json.dumps(obj).encode("utf-8")

request = urllib.request.Request(
  url,
  data=json_data,
  method=method,
  headers=headers
)
with urllib.request.urlopen(request) as response:
  response_body = response.read().decode("utf-8")
print(response_body)

Wenn Sie dies ausführen, ist es ein ** * python3-Befehl !! **

deploy


$ python3 postJson.py
{"save": "seike460"}

Es sollte auch in S3 gut gespeichert sein. Zu diesem Zeitpunkt sind Sie ein Server-Wrestler. Lassen Sie uns nach Herzenslust ohne Server sein. In dieser Phase können wir ohne Server arbeiten. Es scheint, dass unser Sergeant ohne Server theoretisch überfordert sein wird, also werde ich aufhören.

Zusammenfassung und Eindrücke

Diesmal hat PHPer versucht, Python zu verwenden, um ohne Server zu sein. darin,

Ich hatte das Gefühl, diesmal war es eine Geschichte, die AWS nahe stand. Ich werde weiterhin etwas mit Python-Material schreiben.

Ich möchte Django berühren

Recommended Posts

Mit Python mit Kelch ganz einfach ohne Server
Machen Sie einfach einen Piepton mit Python
Machen Sie es sich mit Serverless Python Requirements einfach
Implementieren Sie einfach Unterbefehle mit Python-Klick
Einfache Handhabung von Listen mit Python + SQLite3
Mit Python 3 einfach auf Twitter posten
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Scraping mit Python
Python mit Go
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Laden Sie einfach mp3 / mp4 mit Python und youtube-dl herunter!
Vergleich von Python Serverless Frameworks-Zappa mit Chalice
Serverlose Gesichtserkennungs-API mit Python
Berühren Sie AWS mit Serverless Framework und Python
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Verwenden Sie zusätzliche Python-Pakete mit Serverless Framework (v1.x)
Sie können auch mit Python problemlos eine GUI erstellen
Serverlose Anwendung mit AWS SAM! (APIGATEWAY + Lambda (Python))
Erste Schritte mit AWS IoT in Python
Erstellen Sie einfach eine Python-Konsolenanwendung mit Click
Serielle Kommunikation mit Python
Zip, entpacken mit Python
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Mit Supervisor einfach zu dämonisieren
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Führen Sie Python mit VBA aus
Umgang mit Yaml mit Python
Löse AtCoder 167 mit Python
Serielle Kommunikation mit Python
[Python] Verwenden Sie JSON mit Python
Python lernen mit ChemTHEATER 05-1
Lerne Python mit ChemTHEATER
Führen Sie prepDE.py mit python3 aus
1.1 Erste Schritte mit Python
Tweets mit Python sammeln
Binarisierung mit OpenCV / Python
3. 3. KI-Programmierung mit Python
Kernel-Methode mit Python
Nicht blockierend mit Python + uWSGI
Scraping mit Python + PhantomJS
Tweets mit Python posten