Amazon Elastic Beanstalk 광고는 다음과 같이 말합니다.
Elastic Beanstalk를 사용하면 “후드를 열고”모든 권한을 유지할 수 있습니다. 심지어 Elastic Beanstalk 콘솔을 통해 환경 변수를 전달할 수도 있습니다.
http://aws.amazon.com/elasticbeanstalk/
Elastic Beanstalk 구성에서 다른 환경 변수를 전달하는 방법은 무엇입니까?
답변
이 .ebextensions/*.config
방법 을 사용하는 모든 사람에게주의를 기울이십시오. 요즘에는 Elastic Beanstalk 웹 인터페이스에서 환경 변수를 추가, 편집 및 제거 할 수 있습니다 .
변수는 구성 → 소프트웨어 구성에 있습니다.
Onema의 답변 에서 .ebextensions
와 같이 vars를 만드는 것은 여전히 작동합니다.
예를 들어 나중에 다른 환경에 배포 할 예정이고 수동으로 설정하는 것을 잊는 것이 두려우거나 값을 소스 제어에 커밋하는 것이 괜찮은 경우에도 바람직 할 수 있습니다. 나는 둘 다 사용합니다.
답변
5 개의 값만 제한적이거나 사용자 지정 환경 변수 이름을 가질 수 있습니다. 구성 파일을 사용하여이를 수행 할 수 있습니다. 프로젝트의 루트에 다음 디렉토리를 만듭니다.
.ebextensions /
그런 다음 environment.config 라는 파일을 만들고 (이 파일은 어떤 이름으로도 불릴 수 있지만 확장자는 .config 여야 함) 다음 값을 추가합니다.
option_settings:
- option_name: CUSTOM_ENV
value: staging
애플리케이션을 배포 한 후 환경 세부 정보-> 구성 편집-> 컨테이너 아래에이 새 값이 표시됩니다.
자세한 내용은 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-options 에서 설명서를 확인하십시오.
최신 정보
API 키, 비밀 등과 같은 리포지토리 값에 대한 커밋을 방지하기 위해 자리 표시 자 값을 입력 할 수 있습니다.
option_settings:
- option_name: SOME_API_KEY
value: placeholder-value-change-me
나중에 AWS 관리자 패널 (Environment Details-> Edit Configuration-> Container)로 이동하여 값을 업데이트 할 수 있습니다. 내 경험상 이러한 값은 후속 배포 후에도 변경되지 않습니다.
업데이트 2
@Benjamin이 자신의 의견에서 언급했듯이 새로운 모양과 느낌 이 2013 년 7 월 18 일에 출시 되었으므로 콘솔에서 직접 여러 환경 변수를 정의 할 수 있습니다.
Configuration > Software Configuration > Environment Properties
답변
2016 Java8 Tomcat8 AMI에서 ElasticBeanstalk는 웹 구성에서 환경 변수를 설정하지 못합니다. 그들은 실제로 jvm -D 속성을 대신 설정하고 있습니다.
– “다음 속성은 환경 변수로 응용 프로그램에 전달됩니다. 자세히 알아보기”
이 명령문은 Java Tomcat ami에 대해 올바르지 않습니다. Amazon은이 를 환경 변수로 설정 하지 않습니다 . 명령 줄에서 Tomcat에 jvm의 -D 속성으로 전달되는 시스템 속성으로 설정됩니다. 환경 변수를 가져 오는 Java의 방법은 속성을 가져 오는 방법과 동일하지 않습니다. System.getenv 대 System.getProperty
상자에 들어가서 환경 변수가 설정되지 않았 음을 확인했습니다. 그러나 tomcat 로그에서 -D 속성이 설정된 것을 볼 수 있습니다.
해결 방법으로 두 위치를 모두 확인하도록 코드를 변경했습니다.
답변
AWS는 환경 변수의 CloudFormation 템플릿 문자열을 해석합니다. 이를 사용하여 애플리케이션 내부의 EB 환경에 대한 정보에 액세스 할 수 있습니다.
AWS 웹 인터페이스에서 다음은 환경 이름으로 평가됩니다 (백틱 참고).
`{ "Ref" : "AWSEBEnvironmentName" }`
또는 .ebextensions/*.config
CloudFormation 템플릿을 사용하고 백틱 (`)으로 래핑 할 수 있습니다 .
{
"option_settings": [
{
"namespace": "aws:elasticbeanstalk:application:environment",
"option_name": "ENVIRONMENT_NAME",
"value": "`{ \"Ref\" : \"AWSEBEnvironmentName\" }`"
}
]
}
답변
또는 Elastic Beanstalk CLI를 사용하여 환경 변수를 설정할 수 있습니다.
환경 변수를 설정하려면 : eb setenv FOO=bar
환경 변수를 보려면 : eb printenv
답변
환경 세부 정보-> 구성 편집-> 컨테이너
답변
이것이 beantalk에서 동적 값으로 ENV를 설정하는 유일한 방법 인 것 같습니다. 다중 도커 설정에 적합한 해결 방법을 찾았습니다.
1) 빌드하고 ECS 리포지토리에 업로드하기 전에 Dockerfile에 추가합니다.
CMD eval `cat /tmp/envs/env_file$`; <base image CMD goes here>;
2) Dockerrun.aws.json 파일에서 볼륨을 생성합니다.
{
"name": "env-file",
"host": {
"sourcePath": "/var/app/current/envs"
}
}
3) 컨테이너에 볼륨 마운트
{
"sourceVolume": "env-file",
"containerPath": "/tmp/envs",
"readOnly": true
}
4) .ebextensions / options.config 파일에서 다음과 같이 container_commands 블록을 추가합니다.
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 및 ENVS를 Docker 컨테이너에서 사용할 수 있어야합니다.
다음과 같은 container_command를 더 추가하여 더 많은 ENV를 추가 할 수 있습니다.
02_create_env_file_2:
command: { "Fn::Join" : [ "", [ 'echo "', "export ENVIRONMENT_NAME_2=" , { "Ref", "RESOURCE2" }, ';" >> envs/env_file;' \] \] }
도움이 되었기를 바랍니다!
