A sinopse do Amazon Elastic Beanstalk diz:
O Elastic Beanstalk permite "abrir o capô" e manter o controle total ... até mesmo passar variáveis de ambiente através do console do Elastic Beanstalk.
http://aws.amazon.com/elasticbeanstalk/
Como passar outras variáveis de ambiente além daquela na configuração do Elastic Beanstalk?
Respostas:
Como aviso para quem usa o
.ebextensions/*.config
caminho: hoje em dia você pode adicionar, editar e remover variáveis de ambiente na interface da web do Elastic Beanstalk.As variáveis estão em Configuração → Configuração do software:
Criar os vars
.ebextensions
como na resposta do Onema ainda funciona.Pode até ser preferível, por exemplo, se você implantar em outro ambiente mais tarde e tiver medo de esquecer de defini-los manualmente ou se concordar em confirmar os valores no controle de origem. Eu uso uma mistura de ambos.
fonte
ENV["CUSTOM_ENV"]
retornaria"something-something"
.Apenas 5 valores são limitantes ou você pode querer ter um nome de variável de ambiente customizado. Você pode fazer isso usando os arquivos de configuração. Crie um diretório na raiz do seu projeto chamado
.ebextensions /
Em seguida, crie um arquivo chamado environment.config (esse arquivo pode ser chamado de qualquer coisa, mas deve ter a extensão .config) e adicione os seguintes valores
Depois de implantar seu aplicativo, você verá esse novo valor em Detalhes do ambiente -> Editar configuração -> Contêiner
para obter mais informações, consulte a documentação aqui: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-options
Atualizar
Para evitar comprometer os valores do seu repositório, como chaves de API, segredos e assim por diante, você pode colocar um valor de espaço reservado.
Posteriormente, você pode acessar o painel de administração da AWS (Detalhes do ambiente -> Editar configuração -> Contêiner) e atualizar os valores lá. Na minha experiência, esses valores não mudam após implantações subsequentes.
Atualização 2 Como @Benjamin afirmou em seu comentário, desde que a nova aparência foi lançada em 18 de julho de 2013, é possível definir qualquer número de variáveis de ambiente diretamente do console:
Configuration > Software Configuration > Environment Properties
fonte
command: "nrsysmond-config --set license_key={$NR_INSTALL_KEY}"
Na AMI do Java8 Tomcat8 de 2016, o ElasticBeanstalk falha ao definir variáveis de ambiente a partir da configuração da web. Eles estão realmente configurando as propriedades jvm -D.
- "As seguintes propriedades são passadas para o aplicativo como variáveis de ambiente. Saiba mais."
Esta declaração está incorreta para o Java Tomcat ami. A Amazon não as define como variáveis de ambiente. Eles são definidos como propriedades do sistema transmitidas na linha de comandos para o Tomcat como uma propriedade -D para jvm. O método em Java para obter variáveis de ambiente não é o mesmo para obter uma propriedade. System.getenv vs System.getProperty
Entrei na caixa e verifiquei que a variável de ambiente nunca foi definida. No entanto, nos logs do tomcat, posso ver que a propriedade -D está configurada.
Alterei meu código para verificar os dois locais agora como uma solução alternativa.
fonte
Amazon Linux 2017.03 v2.5.4 with Java8
também não define env.In general, however, environment properties are passed only to the application and can't be viewed by connecting an instance in your environment and running env.
Suas variáveis não estão definidas em um script de login como.bashrc
. No entanto, você está correto. As variáveis do Tomcat são passadas como propriedades. (Veja o topo da página vinculada.)A AWS interpretará as seqüências de modelos do CloudFormation em suas variáveis de ambiente. Você pode usar isso para acessar informações sobre o seu ambiente EB dentro do seu aplicativo:
Na interface da web da AWS, o seguinte será avaliado como o nome do seu ambiente (observe as marcas anteriores):
Ou, você pode usar
.ebextensions/*.config
e envolver o modelo CloudFormation em back ticks (`):fonte
Como alternativa, você pode usar a CLI do Elastic Beanstalk para definir variáveis de ambiente.
Para definir uma variável de ambiente:
eb setenv FOO=bar
Para visualizar as variáveis de ambiente:
eb printenv
fonte
Detalhes do ambiente -> Editar configuração -> Contêiner
fonte
Esta parece ser a única maneira de definir ENVs com valores dinâmicos no pé de feijão. Eu vim com uma solução alternativa que funciona para minha configuração de várias janelas de encaixe:
1) Adicione isso ao seu Dockerfile antes de criar + fazer upload no seu repositório ECS:
2) No seu arquivo Dockerrun.aws.json, crie um volume:
3) Monte o volume no seu contêiner
4) No seu arquivo .ebextensions / options.config, adicione um bloco container_commands da seguinte maneira:
5) eb deploy e seu ENVS deve estar disponível no contêiner do docker
Você pode adicionar mais ENVs adicionando mais comandos container_ como:
Espero que isto ajude!
fonte
X: '
{"Ref": "MyCache"}'
não será analisado (o valor é apenas '{"Ref": "MyCache"}
') por padrão quando o contêiner tentar acessá-lo. Com isso, você pode ter variáveis dinâmicas como essa.