

# 환경 변수를 Amazon ECS 컨테이너로 전달
<a name="use-environment-file"></a>

**중요**  
민감한 데이터는 AWS Secrets Manager 암호 또는 AWS Systems Manager 파라미터 스토어 파라미터에 저장하는 것이 좋습니다. 자세한 내용은 [Amazon ECS 컨테이너로 민감한 데이터 전달](specifying-sensitive-data.md) 섹션을 참조하세요.  
환경 변수 파일은 Amazon S3의 객체이며 모든 Amazon S3 보안 고려 사항이 적용됩니다.  
Windows 컨테이너와 Fargate의 Windows 컨테이너에서는 `environmentFiles` 파라미터를 사용할 수 없습니다.

환경 변수 파일을 생성하고 Amazon S3에 저장하여 컨테이너로 환경 변수를 전달할 수 있습니다.

파일에 환경 변수를 지정하여 환경 변수를 대량으로 주입할 수 있습니다. 컨테이너 정의 내에서 환경 변수 파일이 포함된 Amazon S3 버킷 목록을 이용해 `environmentFiles` 객체를 지정합니다.

Amazon ECS는 환경 변수에 크기 제한을 적용하지 않지만 용량이 큰 환경 변수 파일로 인해 디스크 스페이스가 가득 찰 수도 있습니다. 환경 변수 파일을 사용하는 각 태스크는 해당 파일 사본을 디스크에 다운로드합니다. Amazon ECS에서는 작업 정리의 일부로 파일을 제거합니다.

지원되는 환경 변수에 대한 자세한 내용은 [Advanced container definition parameters- Environment](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definition_environment)를 참조하세요.

컨테이너 정의에서 환경 변수 파일을 지정할 때는 다음 사항을 고려합니다.
+ Amazon EC2에 있는 Amazon ECS 태스크의 경우 이 기능을 사용하기 위해 컨테이너 인스턴스에 버전 `1.39.0` 이상의 컨테이너 에이전트가 필요합니다. 에이전트 버전을 확인하고 최신 버전으로 업데이트하는 방법에 대한 자세한 정보는 [Amazon ECS 컨테이너 에이전트 업데이트](ecs-agent-update.md) 섹션을 참조하세요.
+ AWS Fargate에 있는 Amazon ECS 태스크의 경우 이 기능을 사용하기 위해 플랫폼 버전 `1.4.0` 이상(Linux)을 사용해야 합니다. 자세한 내용은 [Amazon ECS에 대한 Fargate 플랫폼 버전](platform-fargate.md) 섹션을 참조하세요.

  변수가 운영 체제 플랫폼에 대해 지원되는지 확인합니다. 자세한 내용은 [컨테이너 정의](task_definition_parameters.md#container_definitions) 및 [기타 태스크 정의 파라미터](task_definition_parameters.md#other_task_definition_params) 단원을 참조하세요.
+ 파일은 `.env` 파일 확장명과 UTF-8 인코딩을 사용해야 합니다.
+ 태스크 실행 역할은 Amazon S3에 대한 추가 권한과 함께 이 기능을 사용해야 합니다. 이렇게 하면 컨테이너 에이전트가 Amazon S3에서 환경 변수 파일을 가져올 수 있습니다. 자세한 내용은 [Amazon ECS 태스크 실행 IAM 역할](task_execution_IAM_role.md) 섹션을 참조하세요.
+ 작업 정의당 파일 수는 10개로 제한됩니다.
+ 환경 파일의 각 줄에는 `VARIABLE=VALUE` 형식의 환경 변수를 포함합니다. 공백이나 인용 부호는 Amazon ECS 파일 값의 일부로 **포함됩니다**. `#`으로 시작하는 줄은 주석으로 처리되며 무시됩니다. 환경 변수 파일 구문에 대한 자세한 내용은 Docker 설명서의 [환경 변수 설정(-e, --env, --env-file)](https://docs.docker.com/reference/cli/docker/container/run/#env)을 참조하세요.

  다음은 적절한 구문입니다.

  ```
  #This is a comment and will be ignored
  VARIABLE=VALUE
  ENVIRONMENT=PRODUCTION
  ```
+ 컨테이너 정의에서 `environment` 파라미터를 사용하여 지정된 환경 변수가 있는 경우 환경 파일 내에 포함된 변수보다 우선합니다.
+ 여러 환경 파일이 지정되고 동일한 변수를 포함하는 경우 입력 순서대로 처리됩니다. 즉, 변수의 첫 번째 값이 사용되고 중복 변수의 후속 값은 무시됩니다. 고유한 변수 이름을 사용하는 것이 좋습니다.
+ 환경 파일이 컨테이너 재정의로 지정된 경우 해당 파일이 사용됩니다. 또한 컨테이너 정의에 지정된 다른 환경 파일은 무시됩니다.
+ Fargate에는 다음 규칙이 적용됩니다.
  + 파일은 네이티브 Docker env 파일과 유사하게 처리됩니다.
  + 비어 있는 상태로 Amazon S3에 저장된 환경 변수를 참조하는 컨테이너 정의는 컨테이너에 표시되지 않습니다.
  + 셸 이스케이프 처리는 지원되지 않습니다.
  + 컨테이너 진입점은 `VARIABLE` 값을 해석합니다.

## 예제
<a name="environment-file-example"></a>

다음은 환경 변수 파일을 지정하는 방법을 보여주는 태스크 정의의 조각입니다.

```
{
    "family": "",
    "containerDefinitions": [
        {
            "name": "",
            "image": "",
            ...
            "environmentFiles": [
                {
                    "value": "arn:aws:s3:::amzn-s3-demo-bucket/envfile_object_name.env",
                    "type": "s3"
                }
            ],
            ...
        }
    ],
    ...
}
```