데이터 전달을 위한 Amazon ECS Windows 컨테이너 인스턴스 부트스트래핑
Amazon EC2 인스턴스를 시작하면 사용자 데이터를 EC2 인스턴스에 전달할 수 있습니다. 이 데이터는 일반적인 구성 태스크를 자동으로 수행하는 데 사용할 수 있고, 인스턴스가 부팅될 때 스크립트를 실행하는 데 사용할 수도 있습니다. Amazon ECS의 경우 사용자 데이터의 가장 일반적인 사용 사례는 구성 정보를 Docker 대몬 및 Amazon ECS 컨테이너 에이전트에 전달하는 것입니다.
클라우드 boothook, 셸 스크립트, cloud-init
명령을 비롯하여 여러 유형의 사용자 데이터를 Amazon EC2에 전달할 수 있습니다. 이러한 유형 및 다른 형식 유형에 대한 자세한 정보는 Cloud-Init 설명서
Amazon EC2 시작 마법사를 사용할 때 이 사용자 데이터를 전달할 수 있습니다. 자세한 정보는 Amazon ECS Linux 컨테이너 인스턴스 시작 섹션을 참조하세요.
기본 Windows 사용자 데이터
이 예제 사용자 데이터 스크립트에는 콘솔을 사용하는 경우 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 에이전트 설치 사용자 데이터
이 예제 사용자 데이터 스크립트에서는 Amazon ECS 컨테이너 에이전트를 Windows_Server-2016-English-Full-Containers AMI로 시작하는 인스턴스에 설치합니다. Amazon ECS Container Agent GitHub repository
참고
이 스크립트는 예시용으로 공유합니다. Amazon ECS 최적화 Windows Server AMI를 사용하여 Windows 컨테이너를 시작하는 것이 훨씬 쉽습니다. 자세한 내용은 Fargate 시작 유형에 대한 Amazon ECS 클러스터 생성 단원을 참조하십시오.
고유한 컨테이너 인스턴스(Windows_Server-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>