Inicialização de instâncias de contêiner do Windows no Amazon ECS para transmitir dados
Ao iniciar uma instância do Amazon EC2, é possível transmitir dados do usuário para a instância do EC2. Os dados podem ser usados para realizar tarefas de configuração automatizadas em comum e até mesmo executar scripts na inicialização da instância. Para o Amazon ECS, os casos de uso mais comuns para dados de usuário devem transmitir informações de configuração para o daemon do Docker e o agente de contêiner do Amazon ECS.
É possível transmitir vários tipos de dados de usuário para o Amazon EC2, inclusive boothooks de nuvem, scripts de shell e diretivas cloud-init
. Para obter mais informações sobre esses e outros tipos de formato, consulte a documentação Cloud-Init
É possível transmitir esses dados do usuário ao usar o assistente de inicialização do Amazon EC2. Para obter mais informações, consulte Iniciar uma instância de contêiner do Linux do Amazon ECS.
Dados dos usuário do Windows padrão
Este exemplo de script de dados do usuário mostra os dados do usuário padrão que as instâncias de contêiner do Windows receberão se você usar o console. O script abaixo faz o seguinte:
-
Define o nome do cluster para o nome que você inseriu.
-
Define as funções do IAM para tarefas.
-
Define
json-file
eawslogs
como os drivers de registro em log disponíveis.
Além disso, as seguintes opções estão disponíveis quando for usado o modo de rede awsvpc
.
-
EnableTaskENI
:este sinalizador ativa a rede de tarefas e é necessário quando é usado o modo de redeawsvpc
. -
AwsvpcBlockIMDS
: este sinalizador opcional bloqueia o acesso IMDS para os contêineres de tarefas em execução no modo de redeawsvpc
. -
AwsvpcAdditionalLocalRoutes
: este sinalizador opcional permite que você tenha rotas adicionais.Substitua
ip-address
pelo o endereço IP das rotas adicionais, por exemplo, 172.31.42.23/32.
É possível usar esse script nas próprias instâncias de contêiner (desde que elas sejam iniciadas em AMIs Windows Server otimizadas para o Amazon ECS).
Substitua a linha -Cluster
para especificar o nome do seu próprio cluster.cluster-name
<powershell> Initialize-ECSAgent -Cluster
cluster-name
-EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]' -EnableTaskENI -AwsvpcBlockIMDS -AwsvpcAdditionalLocalRoutes '["ip-address
"]' </powershell>
Para tarefas do Windows configuradas para usar o driver de log awslogs
, também é necessário definir a variável de ambiente ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE
na instância de contêiner. Use a sintaxe a seguir.
Substitua a linha -Cluster
para especificar o nome do seu próprio cluster.cluster-name
<powershell> [Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", $TRUE, "Machine") Initialize-ECSAgent -Cluster
cluster-name
-EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]' </powershell>
Dados do usuário da instalação do agente do Windows
Este exemplo de script de dados do usuário instala o agente de contêiner do Amazon ECS em uma instância iniciada com uma AMI Windows_Server-2016-English-Full-Containers. Ele foi adaptado com base nas instruções de instalação do agente na página README Repositório do GitHub do Amazon ECS Container Agent
nota
Esse script é compartilhado com finalidades de exemplo. É muito mais fácil começar a usar os contêineres do Windows usando a AMI do Windows Server otimizada para Amazon ECS. Para obter mais informações, consulte Criação de um cluster do Amazon ECS para o tipo de inicialização do Fargate.
Para obter informações sobre como instalar o agente do Amazon ECS no Windows Server 2022 Full, consulte o problema 3753
É possível usar esse script para suas próprias instâncias de contêiner (desde que elas sejam executadas com uma versão da AMI Windows_Server-2016-English-Full-Contêineres). Não se esqueça de substituir a linha
para especificar o nome de seu próprio cluster (caso não esteja usando um cluster chamado 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>