Service WEB utilisant API Gateway et Lambda sur AWS AWS Chalice, un framework Python utile lors de la création. L'un des points pratiques est qu'avec une seule commande calice local, un serveur WEB démarre sur votre PC (local) et la même chose qui s'exécute sur AWS exécutera [^ 1]. Les tests et le débogage sont incroyablement rapides.
C'est un «calice local» pratique, mais il ne semblait y avoir aucun moyen direct de déterminer qu'il fonctionnait localement avec du code, alors j'y ai pensé.
Vous pouvez le faire avec: Tirez parti des variables d'environnement [^ 3].
--Définissez l'étape pour calice local dans le fichier de réglage du calice (config.json), et définissez les variables d'environnement appropriées dans l'étape définie.
--Lorsque vous faites calice local, spécifiez l'étape définie ci-dessus avec l'option --stage.
Cela permet au code de déterminer s'il s'agit de "calice local" (s'exécutant localement) en vérifiant l'existence de variables d'environnement.
config.json
{
"version": "2.0",
"app_name": "testapp",
"environment_variables": {
},
"stages": {
"dev": {
"api_gateway_stage": "api"
},
"local": {
"environment_variables": {
"IS_LOCAL": "true"
}
}
}
}
Une variable d'environnement appelée ʻIS_LOCAL est définie dans l'étape appelée local`.
app.Partie de py
import logging
import os
# setup logger
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logformat = (
'[%(levelname)s] %(asctime)s.%(msecs)dZ (%(aws_request_id)s) '
'%(filename)s:%(funcName)s[%(lineno)d] %(message)s'
)
if os.environ.get('IS_LOCAL'):
logformat = (
'[%(levelname)s] %(asctime)s.%(msecs)dZ '
'%(filename)s:%(funcName)s[%(lineno)d] %(message)s'
)
formatter = logging.Formatter(logformat, '%Y-%m-%dT%H:%M:%S')
for handler in logger.handlers:
handler.setFormatter(formatter)
Je change le format du journal lors de l'exécution sur AWS et lors de l'exécution locale [^ 2].
$ chalice local --stage local
Lorsque vous faites calice local, spécifiez l'étape définie avec l'option --stage.
Cette méthode, ce n'est pas bien que vous ayez toujours besoin d'ajouter l'option --stage à calice local, mais je l'utilise car le problème a certainement été résolu.
Recommended Posts