Amazon ECS Windows コンテナインスタンスをブートストラップしてデータを渡す - Amazon Elastic Container Service

Amazon ECS Windows コンテナインスタンスをブートストラップしてデータを渡す

Amazon EC2 インスタンスを起動するときに、ユーザーデータを EC2 インスタンスに渡すことができます。インスタンスの起動時に、データを使って、一般的な自動設定タスクを実行したり、スクリプトを実行したりできます。Amazon ECS では、ユーザーデータの最も一般的なユースケースは、設定情報を Docker デーモンと Amazon ECS コンテナエージェントに渡すことです。

クラウドブートフック、シェルスクリプト、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 エージェントのインストールユーザーデータ

この例のユーザーデータスクリプトは、Windows_Server-2016-English-Full-Containers AMI で起動されたインスタンスにAmazon ECS コンテナエージェントをインストールします。これは、Amazon ECS コンテナエージェントの GitHub リポジトリ README ページのエージェントのインストール手順から変更されています。

注記

このスクリプトは、サンプル目的で共有されます。Amazon ECS に最適化された Windows 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>