Amazon EC2 ユーザーデータを使用して Windows コンテナインスタンスをブートストラップする - Amazon Elastic Container Service

Amazon EC2 ユーザーデータを使用して Windows コンテナインスタンスをブートストラップする

Amazon ECS コンテナインスタンスを起動するとき、インスタンスにユーザーデータを渡すオプションがあります。このデータを使用して、一般的な自動設定タスクを実行したり、インスタンスの起動時にスクリプトを実行したりすることができます。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 および外部起動タイプ用のクラスター作成」を参照してください。

このスクリプトは、独自のコンテナインスタンスに使用できます (それらのインスタンスが 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 の例を参照してください。