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.
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.
OS:macOS v10.12(Sierra) Python:2.7.10
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.
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 **
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.
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