Jour 5 du Calendrier de l'Avent Python 2016 Ceci est l'article sur le 5ème jour du Calendrier de l'Avent Fusic 2016.
Ravi de vous rencontrer, je m'appelle seike460. Je touche généralement PHP et le serveur.
Je veux être à la mode sans serveur! J'ai pensé, La situation actuelle est que PHP ne peut pas être sans serveur sur AWS, que j'utilise de manière conviviale. (Pour être précis, vous pouvez le faire si vous faites de votre mieux, mais je laisserai cette histoire de côté.)
Je ne peux pas m'empêcher de faire ce que je ne peux pas faire, alors j'ai pensé essayer le serveur sans serveur dans une autre langue, J'ai décidé de le rendre sans serveur en utilisant Python, ce qui m'a attiré récemment.
Si vous essayez de configurer Lambda et API Gateway sans rien utiliser, ~~ C'est trop ennuyeux et j'ai l'impression de devenir fou ~~ J'ai eu l'impression que c'était inefficace et ne pouvait pas supporter l'opération réelle.
Par conséquent, j'ai sélectionné et implémenté la bibliothèque officielle Amazon Python "calice".
Si vous avez un compte AWS, vous pouvez faire Hello World sans serveur en moins de 10 minutes en exécutant simplement la section Démarrage rapide. ~~ Après tout, le nom qui stimule les deux cœurs de la cuisine est le meilleur, la Holy Cup! Holy Cup! ~~ Puisque la méthode d'introduction a déjà été écrite dans READ ME, la méthode d'introduction sera omise.
Cette fois, l'objectif était d'envoyer Json vers API Gateway et de sauvegarder Json dans S3. On suppose qu'une API pour recevoir des données sera installée et que les données seront utilisées via S3.
OS:macOS v10.12(Sierra) Python:2.7.10
Tout d'abord, préparez un rôle IAM pour charis. Cette fois, nous le définirons indépendamment de l'autorité. Pour le moment, je vais vous donner l'autorité. ** * En fait, vous devriez y penser! L'auto-responsabilité !! **
↓ Cela ressemble à ceci.
Ensuite, définissez les informations d'identification dans votre environnement de développement.
~/.aws/config
[default]
aws_access_key_id=Je ne peux pas te montrer! !! !! ]
aws_secret_access_key=Je ne peux pas te montrer! !! !! ]
region=ap-northeast-1 ← Région de Tokyo
Hello world est prêt à partir.
Je vais également toucher AWS, donc j'inclurai également boto3. Si vous souhaitez utiliser virtualenvs à ce stade, installez-le dans l'environnement qui utilise charice.
boto3
(chalice) $ pip install boto3
--Référence - boto3 - virtualenvs
Let's hello world Créez un projet save2S3.
new-project
(chalice) $ chalice new-project save2S3
Ensuite, la structure de répertoires suivante sera créée.
save2S3
save2S3
├── .chalice
│ └── config.json
├── .gitignore
├── app.py
└── requirements.txt
Modifiez ce fichier app.py pour le rendre sans serveur. Ouvrons 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.
#
L'atmosphère qui semble pouvoir faire hello world est incroyable. Il semble que le calice a bonjour le monde, alors déployons-le immédiatement sur AWS.
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://[Votre chemin unique].execute-api.ap-northeast-1.amazonaws.com/dev/
C'était très facile à déployer. Par défaut, il est créé dans un chemin appelé / dev. Si vous souhaitez le créer dans un chemin appelé api, vous pouvez utiliser la commande suivante.
deploy_to_api
(chalice) $ chalice deploy api
J'essaierai d'accéder à l'URL immédiatement.
deploy
(chalice) $ curl https://[Votre chemin unique].execute-api.ap-northeast-1.amazonaws.com/dev/
{"hello": "world"}
Ceci termine vos débuts avec Charice. Montrez à votre voisin: "Je peux utiliser la Sainte Coupe." ** Ce n'est pas ma faute si le résultat est décevant. Responsabilité personnelle **
Le top est bon! J'écris un petit code comme ça.
app.py
from chalice import Chalice
import boto3
import json
# for S3
clientS3 = boto3.client('s3')
yourBucketPath = '[Écrivez votre seau ici! ]'
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
Seule la validation de clé minimale sera enregistrée.
J'écris aussi un petit code pour vérifier ce type. ** * J'ai écrit ceci en python3. ** (lambda prend en charge python3)
postJson.py
import urllib.request
import json
url = "https://[Votre chemin unique].execute-api.ap-northeast-1.amazonaws.com/dev/save"
method = "POST"
headers = {"Content-Type" : "application/json"}
obj = {"key" : "seike460", "val" : "Je peux utiliser la Sainte Coupe"}
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)
Lorsque vous exécutez ceci, c'est une commande ** * python3 !! **
deploy
$ python3 postJson.py
{"save": "seike460"}
Il devrait également être bien enregistré dans S3. À ce stade, vous êtes un lutteur de serveur. Soyons sans serveur à votre guise. Nous pouvons faire sans serveur à ce stade. Il semble que notre sergent sans serveur sera dépassé en théorie, alors je vais m'arrêter.
Cette fois, PHPer a essayé d'utiliser Python dans le but d'être sans serveur. à l'intérieur de ça,
J'ai senti que, cette fois, c'était une histoire proche d'AWS, Je vais continuer à écrire quelque chose avec du matériel Python.
Je veux toucher Django
Recommended Posts