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