[PYTHON] Déterminer si AWS Chalice est un calice local

introduction

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.

Tâche

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é.

Solution

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.

Exemple

fichier de configuration

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`.

Corps du code

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].

Méthode d'exécution

$ chalice local --stage local

Lorsque vous faites calice local, spécifiez l'étape définie avec l'option --stage.

en conclusion

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

Déterminer si AWS Chalice est un calice local
Déterminez si la chaîne est formatable
Déterminez si la bibliothèque est installée.
Déterminez si la pièce d'or est authentique
Déterminer si un attribut est défini dans l'objet
J'ai touché AWS Chalice
Déterminer si la chaîne est l'heure avec une expression régulière python
J'ai essayé d'utiliser AWS Chalice
Déterminer si la sortie standard est acheminée lors de l'exécution d'un script Python