

# 데이터 전달을 위한 Amazon ECS Windows 컨테이너 인스턴스 부트스트래핑
<a name="bootstrap_windows_container_instance"></a>

Amazon EC2 인스턴스를 시작하면 사용자 데이터를 EC2 인스턴스에 전달할 수 있습니다. 이 데이터는 일반적인 구성 태스크를 자동으로 수행하는 데 사용할 수 있고, 인스턴스가 부팅될 때 스크립트를 실행하는 데 사용할 수도 있습니다. Amazon ECS의 경우 사용자 데이터의 가장 일반적인 사용 사례는 구성 정보를 Docker 대몬 및 Amazon ECS 컨테이너 에이전트에 전달하는 것입니다.

클라우드 boothook, 셸 스크립트, `cloud-init` 명령을 비롯하여 여러 유형의 사용자 데이터를 Amazon EC2에 전달할 수 있습니다. 이러한 유형 및 다른 형식 유형에 대한 자세한 정보는 [Cloud-Init 설명서](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)를 참조하세요.

Amazon EC2 시작 마법사를 사용할 때 이 사용자 데이터를 전달할 수 있습니다. 자세한 정보는 [Amazon ECS Linux 컨테이너 인스턴스 시작](launch_container_instance.md) 섹션을 참조하세요.

## 기본 Windows 사용자 데이터
<a name="windows-default-userdata"></a>

이 예제 사용자 데이터 스크립트에는 콘솔을 사용하는 경우 Windows 컨테이너 인스턴스가 수신하는 기본 사용자 데이터가 표시되어 있습니다. 아래의 스크립트는 다음을 수행합니다.
+ 클러스터 이름을 입력한 이름으로 설정합니다.
+ 태스크에 대한 IAM 역할을 설정합니다.
+ `json-file` 및 `awslogs`를 사용 가능한 로깅 드라이버로 설정합니다.

또한 `awsvpc` 네트워크 모드를 사용할 때 다음과 같은 옵션을 사용할 수 있습니다.
+ `EnableTaskENI`: 이 플래그는 태스크 네트워킹을 활성화하며, `awsvpc` 네트워크 모드를 사용할 때 필요합니다.
+ `AwsvpcBlockIMDS`: 이 선택적 플래그는 `awsvpc` 네트워크 모드에서 실행 중인 태스크 컨테이너에 대한 IMDS 액세스를 차단합니다.
+ `AwsvpcAdditionalLocalRoutes`: 이 선택적 플래그를 사용하면 추가 경로를 가질 수 있습니다.

  `ip-address`를 추가 경로의 IP 주소(예: 172.31.42.23/32)로 교체합니다.

자체 컨테이너 인스턴스(Amazon ECS 최적화 Windows Server AMI에서 시작된 경우)에 이 스크립트를 사용할 수 있습니다.

`-Cluster cluster-name` 줄을 바꾸어 자체 클러스터 이름을 지정합니다.

```
<powershell>
Initialize-ECSAgent -Cluster cluster-name -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]' -EnableTaskENI -AwsvpcBlockIMDS -AwsvpcAdditionalLocalRoutes
'["ip-address"]'
</powershell>
```

 `awslogs` 로깅 드라이버를 사용하도록 구성된 Windows 태스크의 경우 컨테이너 인스턴스에 `ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE` 환경 변수도 설정해야 합니다. 다음 구문을 사용합니다.

`-Cluster cluster-name` 줄을 바꾸어 자체 클러스터 이름을 지정합니다.

```
<powershell>
[Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", $TRUE, "Machine")
Initialize-ECSAgent -Cluster cluster-name -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]'
</powershell>
```

## Windows 에이전트 설치 사용자 데이터
<a name="agent-service-userdata"></a>

이 예제 사용자 데이터 스크립트에서는 Amazon ECS 컨테이너 에이전트를 **Windows\$1Server-2016-English-Full-Containers** AMI로 시작하는 인스턴스에 설치합니다. [Amazon ECS Container Agent GitHub repository](https://github.com/aws/amazon-ecs-agent) README 페이지의 에이전트 설치 지침에서 수정된 것입니다.

**참고**  
이 스크립트는 예시용으로 공유합니다. Amazon ECS 최적화 Windows Server AMI를 사용하여 Windows 컨테이너를 시작하는 것이 훨씬 쉽습니다. 자세한 내용은 [Fargate 워크로드에 대한 Amazon ECS 클러스터 생성](create-cluster-console-v2.md) 섹션을 참조하세요.

Windows Server 2022 Full에 Amazon ECS 에이전트를 설치하는 방법에 대한 자세한 내용은 GitHub에서[문제 3753](https://github.com/aws/amazon-ecs-agent/issues/3753)을 참조하세요.

고유한 컨테이너 인스턴스(**Windows\$1Server-2016-English-Full-Containers** AMI 버전으로 시작된 경우)에 이 스크립트를 사용할 수 있습니다. `windows` 줄을 교체하여 고유한 클러스터 이름을 지정해야 합니다(이름이 `windows`인 클러스터를 사용하지 않는 경우).

```
<powershell>
# Set up directories the agent uses
New-Item -Type directory -Path ${env:ProgramFiles}\Amazon\ECS -Force
New-Item -Type directory -Path ${env:ProgramData}\Amazon\ECS -Force
New-Item -Type directory -Path ${env:ProgramData}\Amazon\ECS\data -Force
# Set up configuration
$ecsExeDir = "${env:ProgramFiles}\Amazon\ECS"
[Environment]::SetEnvironmentVariable("ECS_CLUSTER", "windows", "Machine")
[Environment]::SetEnvironmentVariable("ECS_LOGFILE", "${env:ProgramData}\Amazon\ECS\log\ecs-agent.log", "Machine")
[Environment]::SetEnvironmentVariable("ECS_DATADIR", "${env:ProgramData}\Amazon\ECS\data", "Machine")
# Download the agent
$agentVersion = "latest"
$agentZipUri = "https://s3.amazonaws.com/amazon-ecs-agent/ecs-agent-windows-$agentVersion.zip"
$zipFile = "${env:TEMP}\ecs-agent.zip"
Invoke-RestMethod -OutFile $zipFile -Uri $agentZipUri
# Put the executables in the executable directory.
Expand-Archive -Path $zipFile -DestinationPath $ecsExeDir -Force
Set-Location ${ecsExeDir}
# Set $EnableTaskIAMRoles to $true to enable task IAM roles
# Note that enabling IAM roles will make port 80 unavailable for tasks.
[bool]$EnableTaskIAMRoles = $false
if (${EnableTaskIAMRoles}) {
  $HostSetupScript = Invoke-WebRequest https://raw.githubusercontent.com/aws/amazon-ecs-agent/master/misc/windows-deploy/hostsetup.ps1
  Invoke-Expression $($HostSetupScript.Content)
}
# Install the agent service
New-Service -Name "AmazonECS" `
        -BinaryPathName "$ecsExeDir\amazon-ecs-agent.exe -windows-service" `
        -DisplayName "Amazon ECS" `
        -Description "Amazon ECS service runs the Amazon ECS agent" `
        -DependsOn Docker `
        -StartupType Manual
sc.exe failure AmazonECS reset=300 actions=restart/5000/restart/30000/restart/60000
sc.exe failureflag AmazonECS 1
Start-Service AmazonECS
</powershell>
```