web-dev-qa-db-fra.com

Comment passez-vous la variable d'environnement personnalisée sur Amazon Elastic Beanstalk (AWS EBS)?

Le texte de présentation d'Amazon Elastic Beanstalk dit:

Elastic Beanstalk vous permet "d'ouvrir le capot" et de conserver un contrôle total ... et même de transmettre des variables d'environnement via la console Elastic Beanstalk.

http://aws.Amazon.com/elasticbeanstalk/

Comment passer d'autres variables d'environnement en plus de celle de la configuration Elastic Beanstalk?

112
Ben

En guise de tête à quiconque utilise le .ebextensions/*.config façon: vous pouvez maintenant, ajouter, éditer et supprimer des variables d’environnement dans l’interface Web Elastic Beanstalk.

Les variables sont sous Configuration → Configuration du logiciel:

Environment Properties

Créer les vars dans .ebextensions comme dans réponse de l'Onema fonctionne toujours.

Cela peut même être préférable, par exemple si vous déployez plus tard dans un autre environnement et que vous avez peur d'oublier de les définir manuellement, ou si vous acceptez de valider les valeurs dans le contrôle de source. J'utilise un mélange des deux.

130
lime

Seules 5 valeurs sont limitantes ou vous pouvez avoir un nom de variable d'environnement personnalisé. Vous pouvez le faire en utilisant les fichiers de configuration. Créez un répertoire à la racine de votre projet appelé

. ebextensions/

Ensuite, créez un fichier appelé environment.config (ce fichier peut être appelé n'importe quoi mais il doit avoir l'extension .config) et ajoutez les valeurs suivantes

option_settings:
  - option_name: CUSTOM_ENV
    value: staging

Après avoir déployé votre application, vous verrez cette nouvelle valeur sous Détails de l’environnement -> Modifier la configuration -> Conteneur.

pour plus d'informations, consultez la documentation ici: http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-options

Mettre à jour

Pour éviter de valider les valeurs de votre référentiel telles que les clés d'API, les secrets, etc., vous pouvez définir une valeur d'espace réservé.

option_settings:
  - option_name: SOME_API_KEY
    value: placeholder-value-change-me

Plus tard, vous pouvez accéder au panneau d'administration AWS (Détails de l'environnement -> Modifier la configuration -> Conteneur) et mettre à jour les valeurs à cet endroit. D'après mon expérience, ces valeurs ne changent pas après les déploiements ultérieurs.

Update 2 Comme @Benjamin l'a déclaré dans son commentaire, le nouveau apparence a été déployé le 18 juillet 2013 et est Il est possible de définir un nombre quelconque de variables d’environnement directement à partir de la console:

Configuration > Software Configuration > Environment Properties

105
Onema

Dans l'AMI 2016 Java8 Tomcat8, ElasticBeanstalk ne parvient pas à définir les variables d'environnement à partir de la configuration Web. Ils définissent vraiment les propriétés jvm -D à la place.

- "Les propriétés suivantes sont transmises à l'application en tant que variables d'environnement. En savoir plus."

Cette instruction est incorrecte pour le Java AMI de Tomcat. Amazon le fait pas les définir comme variables d'environnement. Elles sont définies en tant que propriétés système transmises à la ligne de commande à Tomcat en tant que -D propriété pour jvm. La méthode dans Java pour obtenir les variables d’environnement n’est pas la même chose que pour obtenir une propriété. System.getenv vs System.getProperty

J'ai ssh'd dans la boîte et vérifié que la variable d'environnement n'a jamais été définie. Cependant, dans les journaux Tomcat, je peux voir que la propriété -D est définie.

J'ai changé mon code pour vérifier les deux emplacements maintenant comme solution de contournement.

27
Ed J

AWS interprétera les chaînes de modèle CloudFormation dans vos variables d'environnement. Vous pouvez l'utiliser pour accéder à des informations sur votre environnement EB dans votre application:

Dans l'interface Web AWS, les éléments suivants seront évalués en tant que nom de votre environnement (notez les ticks arrière):

`{ "Ref" : "AWSEBEnvironmentName" }`

Ou, vous pouvez utiliser un .ebextensions/*.config et encapsulez le modèle CloudFormation dans les ticks arrière (`):

{
  "option_settings": [
    {
      "namespace": "aws:elasticbeanstalk:application:environment",
      "option_name": "ENVIRONMENT_NAME",
      "value": "`{ \"Ref\" : \"AWSEBEnvironmentName\" }`"
    }
  ]
}
12
George Brassey

Détails de l'environnement -> Modifier la configuration -> Conteneur

enter image description here

9
Ben

Vous pouvez également utiliser la CLI Elastic Beanstalk pour définir les variables d’environnement.

Pour définir une variable d'environnement: eb setenv FOO=bar

Pour afficher les variables d'environnement: eb printenv

9
trex

Cela semble être le seul moyen de définir des ENV avec des valeurs dynamiques dans beanstalk. J'ai mis au point une solution de contournement qui fonctionne pour la configuration de mon multi-station d'accueil:

1) Ajoutez-le à votre fichier Docker avant la construction et le téléchargement dans votre référentiel ECS:

CMD eval `cat /tmp/envs/env_file$`; <base image CMD goes here>;

2) Dans votre fichier Dockerrun.aws.json, créez un volume:

{
    "name": "env-file",
    "Host": {
        "sourcePath": "/var/app/current/envs"
    }
}

3) Montez le volume sur votre conteneur

{
  "sourceVolume": "env-file",
  "containerPath": "/tmp/envs",
  "readOnly": true
}

4) Dans votre fichier .ebextensions/options.config, ajoutez un bloc container_commands comme suit:

container_commands:
  01_create_mount:
    command: "mkdir -p envs/"
  02_create_env_file:
    command: { "Fn::Join" : [ "", [ 'echo "', "export ENVIRONMENT_NAME=" , { "Ref", "RESOURCE" }, ';" > envs/env_file;' ] ] }

5) eb deploy et votre ENVS devrait être disponible dans votre conteneur docker

Vous pouvez ajouter plus de ENV en ajoutant plus de conteneur_commands comme:

  02_create_env_file_2:
    command: { "Fn::Join" : [ "", [ 'echo "', "export ENVIRONMENT_NAME_2=" , { "Ref", "RESOURCE2" }, ';" >> envs/env_file;' \] \] }

J'espère que cela t'aides!

5
dsorensen