Amazon ECS 컨테이너에 환경 변수 전달하기
Amazon ECS 컨테이너에 환경 변수 전달하기
Amazon S3에 저장된 환경 변수 파일을 사용해 컨테이너에 환경 변수를 일괄 전달하는 방법과 제한 사항, 문법을 알아봐요.
출처: 문서
본문
중요 — 민감한 데이터는 AWS Secrets Manager 시크릿이나 AWS Systems Manager Parameter Store 파라미터에 저장할 것을 권장해요. 자세한 내용은 Pass sensitive data to an Amazon ECS container 참고.
환경 변수 파일은 Amazon S3의 객체이며 모든 Amazon S3 보안 고려 사항이 적용돼요. environmentFiles 파라미터는 Windows 컨테이너와 Fargate의 Windows 컨테이너에서는 사용할 수 없어요.
환경 변수 파일을 만들어 Amazon S3에 저장하면 컨테이너에 환경 변수를 전달할 수 있어요. 파일에서 환경 변수를 지정하면 환경 변수를 일괄 주입(bulk inject)할 수 있어요. 컨테이너 정의 내에서 환경 변수 파일이 포함된 Amazon S3 버킷 목록과 함께 environmentFiles 객체를 지정하세요. Amazon ECS는 환경 변수 크기 제한을 강제하지 않지만, 큰 환경 변수 파일은 디스크 공간을 채울 수 있어요. 환경 변수 파일을 사용하는 각 태스크는 파일 사본을 디스크에 다운로드해요. Amazon ECS는 태스크 정리의 일부로 파일을 제거해요. 지원되는 환경 변수에 대한 내용은 Advanced container definition parameters - Environment 참고.
컨테이너 정의에서 환경 변수 파일을 지정할 때 다음을 고려하세요.
- Amazon EC2의 Amazon ECS 태스크의 경우, 이 기능을 사용하려면 컨테이너 인스턴스의 container agent 버전이 1.39.0 이상이어야 해요. 에이전트 버전 확인 및 최신 버전 업데이트 방법은 Updating the Amazon ECS container agent 참고.
- AWS Fargate의 Amazon ECS 태스크의 경우, 이 기능을 사용하려면 태스크가 플랫폼 버전 1.4.0 이상(Linux)을 사용해야 해요. 자세한 내용은 Fargate platform versions for Amazon ECS 참고.
- 변수가 운영 체제 플랫폼에서 지원되는지 확인하세요. 자세한 내용은 Container definitions와 Other task definition parameters 참고.
- 파일은
.env파일 확장자와 UTF-8 인코딩을 사용해야 해요. - 이 기능을 사용하려면 Amazon S3에 대한 추가 권한이 있는 태스크 실행 역할이 필요해요. 이를 통해 container agent가 Amazon S3에서 환경 변수 파일을 가져올 수 있어요. 자세한 내용은 Amazon ECS task execution IAM role 참고.
- 태스크 정의당 파일은 최대 10개까지 제한돼요.
- 환경 파일의 각 줄은
VARIABLE=VALUE형식의 환경 변수를 포함해야 해요. 공백이나 따옴표는 Amazon ECS 파일의 값 일부로 포함돼요.#로 시작하는 줄은 주석으로 처리되고 무시돼요. 환경 변수 파일 문법에 대한 자세한 내용은 Docker 문서의 Set environment variables (-e, --env, --env-file) 참고.
적절한 문법은 다음과 같아요:
#This is a comment and will be ignored
VARIABLE=VALUE
ENVIRONMENT=PRODUCTION
- 컨테이너 정의의
environment파라미터로 지정된 환경 변수가 있으면 환경 파일에 포함된 변수보다 우선해요. - 여러 환경 파일이 지정되고 같은 변수를 포함하면 입력 순서대로 처리돼요. 즉, 변수의 첫 번째 값이 사용되고 중복 변수의 이후 값은 무시돼요. 고유한 변수 이름을 사용할 것을 권장해요.
- 환경 파일이 컨테이너 오버라이드로 지정되면 그것이 사용돼요. 그리고 컨테이너 정의에 지정된 다른 환경 파일은 무시돼요.
Fargate에 적용되는 규칙
- 파일은 네이티브 Docker env-file과 유사하게 처리돼요.
- Amazon S3에 저장된 공백인 환경 변수를 참조하는 컨테이너 정의는 컨테이너에 나타나지 않아요.
- 셸 이스케이프 처리는 지원되지 않아요.
- 컨테이너 진입점(entry point)이
VARIABLE값을 해석해요.
예시 (Example)
환경 변수 파일을 지정하는 방법을 보여주는 태스크 정의 스니펫:
{
"family": "",
"containerDefinitions": [
{
"name": "",
"image": "",
...
"environmentFiles": [
{
"value": "arn:aws:s3:::amzn-s3-demo-bucket/envfile_object_name.env",
"type": "s3"
}
],
...
}
],
...
}