

# Amazon ECS 컨테이너 에이전트 구성
<a name="ecs-agent-config"></a>

**적용 대상**: EC2 인스턴스

Amazon ECS 컨테이너 에이전트는 다양한 구성 옵션을 지원하며 대부분은 환경 변수를 통해 설정합니다.

Amazon ECS 최적화 AMI의 Linux 변형을 사용하여 컨테이너 인스턴스를 시작한 경우, 이들 환경 변수를 `/etc/ecs/ecs.config` 파일에서 설정한 후 에이전트를 다시 시작할 수 있습니다. 실행 시 Amazon EC2 사용자 데이터를 사용하여 컨테이너 인스턴스에 구성 변수를 작성할 수도 있습니다. 자세한 내용은 [데이터 전달을 위한 Amazon ECS Linux 컨테이너 인스턴스 부트스트래핑](bootstrap_container_instance.md) 섹션을 참조하세요.

컨테이너 인스턴스가 Amazon ECS 최적화 AMI의 Windows 변형으로 시작된 경우 PowerShell SetEnvironmentVariable 명령을 사용하여 이러한 환경 변수를 설정한 다음 에이전트를 다시 시작할 수 있습니다. 자세한 내용은 *Amazon EC2 사용 설명서*의 [사용자 데이터 입력을 사용하여 EC2 인스턴스를 시작할 때 명령 실행](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html)과 [데이터 전달을 위한 Amazon ECS Windows 컨테이너 인스턴스 부트스트래핑](bootstrap_windows_container_instance.md)를 참조하세요.

수동으로 Amazon ECS 컨테이너 에이전트(비 Amazon ECS 최적화 AMI 이외 용도)를 시작하는 경우 에이전트를 시작하는 데 사용하는 **docker run** 명령에서 이 환경 변수를 사용할 수 있습니다. `--env=VARIABLE_NAME=VARIABLE_VALUE` 구문에 이러한 변수를 사용합니다. 프라이빗 리포지토리의 인증 자격 증명과 같은 민감한 정보의 경우, 에이전트 환경 변수를 파일에 저장하고 `--env-file path_to_env_file` 옵션을 사용하여 한 번에 모두 전달해야 합니다. 이러한 명령을 사용하여 변수를 추가할 수 있습니다.

```
sudo systemctl stop ecs
sudo vi /etc/ecs/ecs.config 
# And add the environment variables with VARIABLE_NAME=VARIABLE_VALUE format.
sudo systemctl start ecs
```

## 호스트 PID 네임스페이스로 Amazon ECS 에이전트 실행
<a name="ecs-agent-pid-namespace"></a>

기본적으로 Amazon ECS 에이전트는 자체 PID 네임스페이스로 실행됩니다. 다음 구성에서 호스트 PID 네임스페이스로 실행되도록 Amazon ECS 에이전트를 구성할 수 있습니다.
+ SELinux 적용 모드가 활성화되었습니다.
+ Docker의 SELinux 보안 정책이 true로 설정되었습니다.

`/etc/ecs/ecs.config` 파일에서 `ECS_AGENT_PID_NAMESPACE_HOST` 환경 변수를 `true`로 설정하여 이 동작을 구성할 수 있습니다. 이 변수가 활성화되면 `ecs-init`는 호스트의 PID 네임스페이스(`--pid=host`)로 Amazon ECS 에이전트 컨테이너를 시작하여 에이전트가 SELinux 적용 환경에서 올바르게 부트스트랩할 수 있도록 합니다. 이 기능은 Amazon ECS 에이전트 버전 `1.94.0` 이상에서 사용할 수 있습니다.

이 기능을 활성화하려면 `/etc/ecs/ecs.config` 파일에 다음 줄을 추가하세요.

```
ECS_AGENT_PID_NAMESPACE_HOST=true
```

이렇게 변경한 후 Amazon ECS 에이전트를 다시 시작하여 변경 사항을 적용하세요.

```
sudo systemctl restart ecs
```

SELinux 적용 모드가 활성화되어 있고 Docker 보안 정책이 true로 설정되어 있는 경우 `ECS_AGENT_PID_NAMESPACE_HOST=true`가 설정되어 있어도 다음 기능은 작동하지 않습니다.
+ Amazon ECS Exec
+ Amazon EBS 태스크 연결
+ Service Connect
+ Amazon ECS용 FireLens

## 사용 가능한 파라미터
<a name="ecs-agent-availparam"></a>

사용 가능한 Amazon ECS 컨테이너 에이전트 구성 파라미터에 대한 자세한 정보는 GitHub의 [Amazon ECS Container Agent](https://github.com/aws/amazon-ecs-agent/blob/master/README.md)를 참조하세요.

# Amazon S3에 Amazon ECS 컨테이너 인스턴스 구성 저장
<a name="ecs-config-s3"></a>

Amazon ECS 컨테이너 에이전트 구성은 환경 변수로 제어됩니다. Amazon ECS 최적화 AMI의 Linux 변형은 컨테이너 에이전트가 시작될 때 `/etc/ecs/ecs.config`에서 이들 변수를 확인하여 그에 따라 에이전트를 구성합니다. `ECS_CLUSTER`와 같이 민감하지 않은 환경 변수는 시작 시 Amazon EC2 사용자 데이터를 통해 컨테이너 인스턴스로 전달되고 아무 영향 없이 이 파일에 기록될 수 있습니다. 하지만 AWS 자격 증명 또는 `ECS_ENGINE_AUTH_DATA` 변수와 같은 기타 민감한 정보는 사용자 데이터에서 인스턴스로 전달되거나 `.bash_history` 파일에 표시되도록 허용할 `/etc/ecs/ecs.config`에 기록되어서는 절대 안 됩니다.

Amazon S3에서 구성 정보를 프라이빗 버킷에 저장하고 컨테이너 인스턴스 IAM 역할에 읽기 전용 액세스를 부여하면 시작 시 컨테이너 인스턴스 구성을 안전하고 편리하게 허용할 수 있습니다. 프라이빗 버킷에 `ecs.config` 파일의 사본을 저장할 수 있습니다. 그런 다음 Amazon EC2 사용자 데이터를 사용하여 AWS CLI를 설치하고 인스턴스가 시작될 때 구성 정보를 `/etc/ecs/ecs.config`에 복사할 수 있습니다.

**Amazon S3에 `ecs.config` 파일을 저장하는 방법**

1. Amazon S3에 대해 읽기 전용으로 액세스하려면 컨테이너 인스턴스 역할(**ecsInstanceRole**)에 권한을 부여해야 합니다. **AmazonS3ReadOnlyAccess**를 `ecsInstanceRole` 역할에 할당하면 됩니다. 역할에 정책을 연결하는 방법에 대한 자세한 내용은 *AWS Identity and Access Management 사용 설명서*의 [역할 권한 업데이트](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html)를 참조하세요.

1. 다음 형식을 사용하여 유효한 Amazon ECS 에이전트 구성 변수를 포함하는 `ecs.config` 파일을 생성합니다. 이 예제에서는 프라이빗 레지스트리 인증을 구성합니다. 자세한 내용은 [Amazon ECS에서 AWS 컨테이너가 아닌 이미지 사용](private-auth.md) 섹션을 참조하세요.

   ```
   ECS_ENGINE_AUTH_TYPE=dockercfg
   ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example.com"}}
   ```
**참고**  
사용 가능한 Amazon ECS 에이전트 구성 변수의 전체 목록은 GitHub의 [Amazon ECS Container Agent](https://github.com/aws/amazon-ecs-agent/blob/master/README.md)를 참조하세요.

1. 구성 파일을 저장하려면 Amazon S3에 프라이빗 버킷을 만듭니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*에서 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)을 참조하세요.

1. `ecs.config` 파일을 S3 버킷에 업로드합니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [객체 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)를 참조하세요.

**시작 시 Amazon S3에서 `ecs.config` 파일을 로드하려면**

1. 이 섹션에서 앞서 설명한 절차를 완료하여 컨테이너 인스턴스에 읽기 전용 Amazon S3 액세스를 부여하고 프라이빗 S3 버킷에 `ecs.config` 파일을 저장합니다.

1. 새 컨테이너 인스턴스를 시작하고 EC2 사용자 데이터에서 다음 예제 스크립트를 사용합니다. 스크립트는 AWS CLI를 설치하고 구성 파일을 `/etc/ecs/ecs.config`에 복사합니다. 자세한 내용은 [Amazon ECS Linux 컨테이너 인스턴스 시작](launch_container_instance.md) 섹션을 참조하세요.

   ```
   #!/bin/bash
   yum install -y aws-cli
   aws s3 cp s3://your_bucket_name/ecs.config /etc/ecs/ecs.config
   ```