amazon web services - sirve - ¿Cómo se transfiere la variable de entorno personalizada en Amazon Elastic Beanstalk(AWS EBS)?
elasticbeanstalk que es (7)
AWS interpretará cadenas de plantillas de CloudFormation en las variables de su entorno. Puede usar esto para acceder a información sobre su entorno EB dentro de su aplicación:
En la interfaz web de AWS, lo siguiente se evaluará como el nombre de su entorno (tenga en cuenta las marcas de retroceso):
`{ "Ref" : "AWSEBEnvironmentName" }`
O bien, puede usar una .ebextensions/*.config
Y ajustar la plantilla de CloudFormation en ticks posteriores (`):
{
"option_settings": [
{
"namespace": "aws:elasticbeanstalk:application:environment",
"option_name": "ENVIRONMENT_NAME",
"value": "`{ /"Ref/" : /"AWSEBEnvironmentName/" }`"
}
]
}
El anuncio de Amazon Elastic Beanstalk dice:
Elastic Beanstalk le permite "abrir el cofre" y mantener el control total ... incluso pasar variables de entorno a través de la consola Elastic Beanstalk.
http://aws.amazon.com/elasticbeanstalk/
¿Cómo pasar otras variables de entorno además de la de la configuración de Elastic Beanstalk?
Alternativamente, podría usar Elastic Beanstalk CLI para establecer variables de entorno.
Para establecer una variable de entorno: eb setenv FOO=bar
Para ver las variables de entorno: eb printenv
Detalles del entorno -> Editar configuración -> Contenedor
En el 2016 Java8 Tomcat8 AMI, ElasticBeanstalk no puede establecer variables de entorno desde la configuración web. En realidad, están estableciendo las propiedades jvm -D.
- "Las siguientes propiedades se pasan a la aplicación como variables de entorno. Obtenga más información".
Esta declaración es incorrecta para Java Tomcat ami. Amazon no los establece como variables de entorno. Se establecen como propiedades del sistema pasadas en la línea de comando a Tomcat como una propiedad -D para jvm. El método en Java para obtener variables de entorno no es lo mismo para obtener una propiedad. System.getenv versus System.getProperty
Entré en la caja y verifiqué que la variable de entorno nunca se configuró. Sin embargo, en los registros de Tomcat puedo ver que la propiedad -D está configurada.
Cambié mi código para buscar ambas ubicaciones ahora como una solución alternativa.
Esta parece ser la única forma de establecer ENV con valores dinámicos en beanstalk. Se me ocurrió una solución alternativa que funciona para mi configuración de multi-docker:
1) Agregue esto a su archivo Docker antes de construir + cargar en su repositorio ECS:
CMD eval `cat /tmp/envs/env_file$`; <base image CMD goes here>;
2) En su archivo Dockerrun.aws.json, cree un volumen:
{
"name": "env-file",
"host": {
"sourcePath": "/var/app/current/envs"
}
}
3) Monte el volumen en su contenedor
{
"sourceVolume": "env-file",
"containerPath": "/tmp/envs",
"readOnly": true
}
4) En su archivo .ebextensions / options.config, agregue un bloque container_commands así:
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 y tu ENVS debería estar disponible en tu contenedor de docker
Puede agregar más ENV agregando más container_commands como:
02_create_env_file_2:
command: { "Fn::Join" : [ "", [ ''echo "'', "export ENVIRONMENT_NAME_2=" , { "Ref", "RESOURCE2" }, '';" >> envs/env_file;'' /] /] }
¡Espero que esto ayude!
Solo 5 valores son limitantes, o es posible que desee tener un nombre de variable de entorno personalizado. Puedes hacer esto usando los archivos de configuración. Crea un directorio en la raíz de tu proyecto llamado
.ebextensions /
A continuación, cree un archivo llamado environment.config (este archivo se puede llamar de cualquier manera pero debe tener la extensión .config) y agregue los siguientes valores
option_settings:
- option_name: CUSTOM_ENV
value: staging
Después de implementar su aplicación, verá este nuevo valor en Detalles del entorno -> Editar configuración -> Contenedor
para obtener más información, consulte la documentación aquí: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-options
Actualizar
Para evitar comprometerse con los valores de su repositorio como claves de API, secretos, etc., puede poner un valor de marcador de posición.
option_settings:
- option_name: SOME_API_KEY
value: placeholder-value-change-me
Luego puede ir al panel de administración de AWS (Detalles del entorno -> Editar configuración -> Contenedor) y actualizar los valores allí. En mi experiencia, estos valores no cambian después de las implementaciones posteriores.
Actualización 2 Como @Benjamin declaró en su comentario, ya que la nueva apariencia se implementó el 18 de julio de 2013, es posible definir cualquier cantidad de variables de entorno directamente desde la consola:
Configuration > Software Configuration > Environment Properties
Como una .ebextensions/*.config
para cualquiera que use la forma .ebextensions/*.config
: hoy en día puede agregar, editar y eliminar variables de entorno en la interfaz web de Elastic Beanstalk.
Las variables están en Configuración → Configuración de software:
Crear los vars en .ebextensions
como en la respuesta de Onema todavía funciona.
Incluso puede ser preferible, por ejemplo, si se implementará en otro entorno más tarde y tiene miedo de olvidarse de configurarlos manualmente, o si está bien con la asignación de los valores al control de fuente. Yo uso una mezcla de ambos.