Amazon EC2 사용자 데이터를 사용하여 Windows 컨테이너 인스턴스 부트스트래핑 - Amazon Elastic Container Service

Amazon EC2 사용자 데이터를 사용하여 Windows 컨테이너 인스턴스 부트스트래핑

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

클라우드 boothook, 셸 스크립트, cloud-init 명령을 비롯하여 여러 유형의 사용자 데이터를 Amazon EC2에 전달할 수 있습니다. 이러한 유형 및 다른 형식 유형에 대한 자세한 정보는 Cloud-Init 설명서를 참조하세요.

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

기본 Windows 사용자 데이터

이 예제 사용자 데이터 스크립트에는 클러스터 생성 마법사를 사용할 경우 Windows 컨테이너 인스턴스가 수신하는 기본 사용자 데이터가 표시되어 있습니다. 아래의 스크립트는 다음 태스크를 수행합니다.

  • 클러스터 이름을 windows로 설정합니다.

  • 태스크에 대한 IAM 역할을 설정합니다.

  • json-fileawslogs를 사용 가능한 로깅 드라이버로 설정합니다.

또한 awsvpc 네트워크 모드를 사용할 때 다음과 같은 옵션을 사용할 수 있습니다.

  • EnableTaskENI: 이 플래그는 태스크 네트워킹을 활성화하며, awsvpc 네트워크 모드를 사용할 때 필요합니다.

  • AwsvpcBlockIMDS: 이 선택적 플래그는 awsvpc 네트워크 모드에서 실행 중인 태스크 컨테이너에 대한 IMDS 액세스를 차단합니다.

  • AwsvpcAdditionalLocalRoutes: 이 선택적 플래그를 사용하면 추가 경로를 가질 수 있습니다.

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

고유한 컨테이너 인스턴스(Amazon ECS 최적화 Windows Server AMI에서 시작된 경우)에 이 스크립트를 사용할 수 있지만 -Cluster windows 줄을 교체하여 고유한 클러스터 이름을 지정해야 합니다(이름이 windows인 클러스터를 사용하지 않는 경우).

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

Windows 에이전트 설치 사용자 데이터

이 예제 사용자 데이터 스크립트에서는 Amazon ECS 컨테이너 에이전트를 Windows_Server-2016-English-Full-Containers AMI로 시작하는 인스턴스에 설치합니다. Amazon ECS Container Agent GitHub repository README 페이지의 에이전트 설치 지침에서 수정된 것입니다.

참고

이 스크립트는 예시용으로 공유합니다. Amazon ECS 최적화 Windows Server AMI를 사용하여 Windows 컨테이너를 시작하는 것이 훨씬 쉽습니다. 자세한 정보는 클래식 콘솔을 사용하여 클러스터 생성 섹션을 참조하세요.

고유한 컨테이너 인스턴스(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>

태스크를 위한 Windows IAM 역할

IAM 태스크 역할 부트스트랩에 대한 다음 Windows 예제를 참조하세요.