Amazon Elastic Beanstalk 광고는 다음과 같이 말합니다.
Elastic Beanstalk를 사용하면 "후드를 열고"모든 권한을 유지할 수 있습니다. 심지어 Elastic Beanstalk 콘솔을 통해 환경 변수를 전달할 수도 있습니다.
http://aws.amazon.com/elasticbeanstalk/
Elastic Beanstalk 구성에서 다른 환경 변수를 전달하는 방법은 무엇입니까?
Amazon Elastic Beanstalk 광고는 다음과 같이 말합니다.
Elastic Beanstalk를 사용하면 "후드를 열고"모든 권한을 유지할 수 있습니다. 심지어 Elastic Beanstalk 콘솔을 통해 환경 변수를 전달할 수도 있습니다.
http://aws.amazon.com/elasticbeanstalk/
Elastic Beanstalk 구성에서 다른 환경 변수를 전달하는 방법은 무엇입니까?
답변:
이 .ebextensions/*.config
방법 을 사용하는 모든 사람에게주의를 기울이십시오. 요즘에는 Elastic Beanstalk 웹 인터페이스에서 환경 변수를 추가, 편집 및 제거 할 수 있습니다 .
변수는 구성 → 소프트웨어 구성에 있습니다.
Onema의 답변 에서 .ebextensions
와 같이 vars를 만드는 것은 여전히 작동합니다.
예를 들어 나중에 다른 환경에 배포 할 예정이고 수동으로 설정하는 것을 잊는 것이 두려우거나 값을 소스 제어에 커밋하는 것이 괜찮은 경우에도 바람직 할 수 있습니다. 나는 둘 다 사용합니다.
ENV["CUSTOM_ENV"]
반환합니다 "something-something"
.
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
command: "nrsysmond-config --set license_key={$NR_INSTALL_KEY}"
2016 Java8 Tomcat8 AMI에서 ElasticBeanstalk는 웹 구성에서 환경 변수를 설정하지 못합니다. 그들은 실제로 jvm -D 속성을 대신 설정하고 있습니다.
- "다음 속성은 환경 변수로 응용 프로그램에 전달됩니다. 자세히 알아보기"
이 명령문은 Java Tomcat ami에 대해 올바르지 않습니다. Amazon은이 를 환경 변수로 설정 하지 않습니다 . 명령 줄에서 Tomcat에 jvm의 -D 속성으로 전달되는 시스템 속성으로 설정됩니다. 환경 변수를 가져 오는 Java의 방법은 속성을 가져 오는 방법과 동일하지 않습니다. System.getenv 대 System.getProperty
상자에 들어가서 환경 변수가 설정되지 않았 음을 확인했습니다. 그러나 tomcat 로그에서 -D 속성이 설정된 것을 볼 수 있습니다.
해결 방법으로 두 위치를 모두 확인하도록 코드를 변경했습니다.
Amazon Linux 2017.03 v2.5.4 with Java8
또한 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.
변수가와 같은 로그인 스크립트에 설정되어 있지 않습니다 .bashrc
. 그러나 올바른 Tomcat 변수는 속성으로 전달됩니다. (링크 된 페이지 상단 참조)
AWS는 환경 변수의 CloudFormation 템플릿 문자열을 해석합니다. 이를 사용하여 애플리케이션 내부의 EB 환경에 대한 정보에 액세스 할 수 있습니다.
AWS 웹 인터페이스에서 다음은 환경 이름으로 평가됩니다 (백틱 참고).
`{ "Ref" : "AWSEBEnvironmentName" }`
또는 .ebextensions/*.config
CloudFormation 템플릿을 사용하고 백틱 (`)으로 래핑 할 수 있습니다 .
{
"option_settings": [
{
"namespace": "aws:elasticbeanstalk:application:environment",
"option_name": "ENVIRONMENT_NAME",
"value": "`{ \"Ref\" : \"AWSEBEnvironmentName\" }`"
}
]
}
이것이 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;' \] \] }
도움이 되었기를 바랍니다!
X: '
{ "Ref": "MyCache"} '
값은 {"Ref": "MyCache"}
컨테이너가 액세스를 시도 할 때 기본적으로 파싱되지 않습니다 (값은 ' '))). 이를 통해 이와 같은 동적 변수를 가질 수 있습니다.