Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

HTTP プロキシ設定

Amazon ECS コンテナエージェントと Docker デーモンの両方に HTTP プロキシを使用するように Amazon ECS コンテナインスタンスを設定できます。これは、コンテナインスタンスに、Amazon VPC インターネットゲートウェイ、NAT ゲートウェイ、またはインスタンスを介した外部ネットワークアクセスがない場合に便利です。このプロセスは、Linux および Windows インスタンスで異なるため、以下でアプリケーション用の適切なセクションを必ず参照してください。

Amazon Linux コンテナインスタンスの設定

HTTP プロキシを使用するように Amazon ECS Linux コンテナインスタンスを設定するには、起動時に該当するファイルで以下の変数に Amazon EC2 ユーザーデータを設定します。手動で設定ファイルを編集した後、エージェントを再び開始することもできます。

/etc/ecs/ecs.config (Amazon Linux 2 および Amazon Linux AMI)
HTTP_PROXY=10.0.0.131:3128

この値を、ECS エージェントがインターネットへの接続に使用する HTTP プロキシのホスト名 (または IP アドレス) とポート番号に設定します。たとえば、コンテナインスタンスに、Amazon VPC インターネットゲートウェイ、NAT ゲートウェイ、またはインスタンスを介した外部ネットワークアクセスがない場合です。

NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock

この値を 169.254.169.254,169.254.170.2,/var/run/docker.sock に設定して、EC2 インスタンスのメタデータ、タスク用の IAM ロール、および Docker デーモンのトラフィックをプロキシからフィルタリングします。

/etc/systemd/system/ecs.service.d/http-proxy.conf (Amazon Linux 2 のみ)
Environment="HTTP_PROXY=10.0.0.131:3128/"

この値を、ecs-init がインターネットへの接続に使用する HTTP プロキシのホスト名 (または IP アドレス) とポート番号に設定します。たとえば、コンテナインスタンスに、Amazon VPC インターネットゲートウェイ、NAT ゲートウェイ、またはインスタンスを介した外部ネットワークアクセスがない場合です。

Environment="NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock"

この値を 169.254.169.254,169.254.170.2,/var/run/docker.sock に設定して、EC2 インスタンスのメタデータ、タスク用の IAM ロール、および Docker デーモンのトラフィックをプロキシからフィルタリングします。

/etc/init/ecs.override (Amazon Linux AMI のみ)
env HTTP_PROXY=10.0.0.131:3128

この値を、ecs-init がインターネットへの接続に使用する HTTP プロキシのホスト名 (または IP アドレス) とポート番号に設定します。たとえば、コンテナインスタンスに、Amazon VPC インターネットゲートウェイ、NAT ゲートウェイ、またはインスタンスを介した外部ネットワークアクセスがない場合です。

env NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock

この値を 169.254.169.254,169.254.170.2,/var/run/docker.sock に設定して、EC2 インスタンスのメタデータ、タスク用の IAM ロール、および Docker デーモンのトラフィックをプロキシからフィルタリングします。

/etc/systemd/system/docker.service.d/http-proxy.conf (Amazon Linux 2 のみ)
Environment="HTTP_PROXY=http://10.0.0.131:3128"

この値を、Docker デーモンがインターネットへの接続に使用する HTTP プロキシのホスト名 (または IP アドレス) とポート番号に設定します。たとえば、コンテナインスタンスに、Amazon VPC インターネットゲートウェイ、NAT ゲートウェイ、またはインスタンスを介した外部ネットワークアクセスがない場合です。

Environment="NO_PROXY=169.254.169.254"

この値を 169.254.169.254 に設定して、EC2 インスタンスのメタデータをプロキシからフィルタリングします。

/etc/sysconfig/docker (Amazon Linux AMI および Amazon Linux 2 のみ)
export HTTP_PROXY=10.0.0.131:3128

この値を、Docker デーモンがインターネットへの接続に使用する HTTP プロキシのホスト名 (または IP アドレス) とポート番号に設定します。たとえば、コンテナインスタンスに、Amazon VPC インターネットゲートウェイ、NAT ゲートウェイ、またはインスタンスを介した外部ネットワークアクセスがない場合です。

export NO_PROXY=169.254.169.254,169.254.170.2

この値を 169.254.169.254 に設定して、EC2 インスタンスのメタデータをプロキシからフィルタリングします。

これらの環境変数を上記のファイルで設定すると、Amazon ECS コンテナエージェント、ecs-init、および Docker デーモンのみに影響があります。プロキシを使用する他のサービス (yum など) を設定することはありません。

例 Amazon Linux HTTP プロキシのユーザーデータスクリプト

以下のユーザーデータ cloud-boothook スクリプトの例では、Amazon ECS コンテナエージェント、ecs-init、Docker デーモン、および yum が指定された HTTP プロキシを使用するように設定します。コンテナインスタンス自体が登録されているクラスターを指定することもできます。

コンテナインスタンスの起動時にこのスクリプトを使用するには、「Amazon ECS コンテナインスタンスの起動」と「ステップ 6.g」の手順に従います。その後、以下の cloud-boothook スクリプトをコピーして [User data] フィールドに貼り付けます (必ず、赤いサンプル値を実際のプロキシおよびクラスターの情報に置き換えてください)。

注記

以下のユーザーデータスクリプトは、Amazon ECS 最適化 AMI の Amazon Linux 2 および Amazon Linux AMI タイプのみをサポートしています。

#cloud-boothook # Configure Yum, the Docker daemon, and the ECS agent to use an HTTP proxy # Specify proxy host, port number, and ECS cluster name to use PROXY_HOST=10.0.0.131 PROXY_PORT=3128 CLUSTER_NAME=proxy-test if grep -q 'Amazon Linux release 2' /etc/system-release ; then OS=AL2 echo "Setting OS to Amazon Linux 2" elif grep -q 'Amazon Linux AMI' /etc/system-release ; then OS=ALAMI echo "Setting OS to Amazon Linux AMI" else echo "This user data script only supports Amazon Linux 2 and Amazon Linux AMI." fi # Set Yum HTTP proxy if [ ! -f /var/lib/cloud/instance/sem/config_yum_http_proxy ]; then echo "proxy=http://$PROXY_HOST:$PROXY_PORT" >> /etc/yum.conf echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_yum_http_proxy fi # Set Docker HTTP proxy (different methods for Amazon Linux 2 and Amazon Linux AMI) # Amazon Linux 2 if [ $OS == "AL2" ] && [ ! -f /var/lib/cloud/instance/sem/config_docker_http_proxy ]; then mkdir /etc/systemd/system/docker.service.d cat <<EOF > /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment="HTTP_PROXY=http://$PROXY_HOST:$PROXY_PORT/" Environment="HTTPS_PROXY=https://$PROXY_HOST:$PROXY_PORT/" Environment="NO_PROXY=169.254.169.254,169.254.170.2" EOF systemctl daemon-reload if [ "$(systemctl is-active docker)" == "active" ] then systemctl restart docker fi echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_docker_http_proxy fi # Amazon Linux AMI if [ $OS == "ALAMI" ] && [ ! -f /var/lib/cloud/instance/sem/config_docker_http_proxy ]; then echo "export HTTP_PROXY=http://$PROXY_HOST:$PROXY_PORT/" >> /etc/sysconfig/docker echo "export HTTPS_PROXY=https://$PROXY_HOST:$PROXY_PORT/" >> /etc/sysconfig/docker echo "export NO_PROXY=169.254.169.254,169.254.170.2" >> /etc/sysconfig/docker echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_docker_http_proxy fi # Set ECS agent HTTP proxy if [ ! -f /var/lib/cloud/instance/sem/config_ecs-agent_http_proxy ]; then cat <<EOF > /etc/ecs/ecs.config ECS_CLUSTER=$CLUSTER_NAME HTTP_PROXY=$PROXY_HOST:$PROXY_PORT NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock EOF echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_ecs-agent_http_proxy fi # Set ecs-init HTTP proxy (different methods for Amazon Linux 2 and Amazon Linux AMI) # Amazon Linux 2 if [ $OS == "AL2" ] && [ ! -f /var/lib/cloud/instance/sem/config_ecs-init_http_proxy ]; then mkdir /etc/systemd/system/ecs.service.d cat <<EOF > /etc/systemd/system/ecs.service.d/http-proxy.conf [Service] Environment="HTTP_PROXY=$PROXY_HOST:$PROXY_PORT/" Environment="NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock" EOF systemctl daemon-reload if [ "$(systemctl is-active ecs)" == "active" ]; then systemctl restart ecs fi echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_ecs-init_http_proxy fi # Amazon Linux AMI if [ $OS == "ALAMI" ] && [ ! -f /var/lib/cloud/instance/sem/config_ecs-init_http_proxy ]; then cat <<EOF > /etc/init/ecs.override env HTTP_PROXY=$PROXY_HOST:$PROXY_PORT env NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock EOF echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_ecs-init_http_proxy fi

Windows コンテナインスタンスの設定

Amazon ECS Windows コンテナインスタンスが HTTP プロキシを使用するように設定するには、起動時に (Amazon EC2 ユーザーデータを使用して) 以下の変数を設定します。

[Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://proxy.mydomain:port", "Machine")

HTTP_PROXY を、ECS エージェントがインターネットへの接続に使用する HTTP プロキシのホスト名 (または IP アドレス) とポート番号に設定します。たとえば、コンテナインスタンスに、Amazon VPC インターネットゲートウェイ、NAT ゲートウェイ、またはインスタンスを介した外部ネットワークアクセスがない場合です。

[Environment]::SetEnvironmentVariable("NO_PROXY", "169.254.169.254,169.254.170.2,\\.\pipe\docker_engine", "Machine")

NO_PROXY169.254.169.254,169.254.170.2,\\.\pipe\docker_engine に設定して、EC2 インスタンスのメタデータ、タスク用の IAM ロール、および Docker デーモンのトラフィックをプロキシからフィルタリングします。

例 Windows HTTP プロキシのユーザーデータスクリプト

以下のユーザーデータ PowerShell スクリプトの例では、Amazon ECS コンテナエージェント、および Docker デーモンが指定された HTTP プロキシを使用するように設定します。コンテナインスタンス自体が登録されているクラスターを指定することもできます。

コンテナインスタンスの起動時にこのスクリプトを使用するには、「ステップ 2: Windows コンテナインスタンスをクラスターで起動する」のステップに従います。「ステップ 9」に到達したら、以下の PowerShell スクリプトをコピーして [ユーザーデータ] フィールドに貼り付けます (必ず、赤いサンプル値を実際のプロキシおよびクラスターの情報に置き換えてください)。

注記

この -EnableTaskIAMRole オプションは、タスクの IAM ロールを有効にするために必要です。詳細については、「Windows タスク用の IAM ロール」を参照してください。

<powershell> Import-Module ECSTools $proxy = "http://proxy.mydomain:port" [Environment]::SetEnvironmentVariable("HTTP_PROXY", $proxy, "Machine") [Environment]::SetEnvironmentVariable("NO_PROXY", "169.254.169.254,169.254.170.2,\\.\pipe\docker_engine", "Machine") Restart-Service Docker Initialize-ECSAgent -Cluster MyCluster -EnableTaskIAMRole </powershell>