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

コンテナインスタンスのユーザーデータ設定スクリプトの例

以下のユーザーデータスクリプトの例では、起動時に Amazon ECS コンテナインスタンスを設定しています。

Amazon EFS ファイルシステムを使用する Amazon ECS 最適化 AMI コンテナインスタンス

このユーザーデータスクリプトの例では、既存の Amazon EFS ファイルシステムを使用するように、Amazon ECS 最適化 AMI から起動されるインスタンスを設定しています。詳細については、「チュートリアル: Amazon ECS での Amazon EFS ファイルシステムの使用」を参照してください。

このスクリプトは以下の処理を実行します。

  • NFS クライアントをインストールする nfs-utils パッケージをインストールする

  • /efs で NFS ファイルシステムのマウントディレクトリを作成する

  • /etc/fstab ファイルにファイルシステムのマウントエントリを作成し、ファイルシステムをマウントする

  • Amazon ECS エージェント設定ファイルにクラスター名 default を書き込む

このスクリプトを実際のコンテナインスタンスに使用できます。ただし、それらのインスタンスが Amazon ECS 最適化 AMI から起動される場合です。default クラスターを使用しない場合は、設定ファイルの ECS_CLUSTER=default 行を置き換えて、独自のクラスターの名前を指定します。コンテナインスタンスの起動の詳細については、「Amazon ECS コンテナインスタンスの起動」を参照してください。

Content-Type: multipart/mixed; boundary="==BOUNDARY==" MIME-Version: 1.0 --==BOUNDARY== Content-Type: text/cloud-boothook; charset="us-ascii" # Install nfs-utils cloud-init-per once yum_update yum update -y cloud-init-per once install_nfs_utils yum install -y nfs-utils # Create /efs folder cloud-init-per once mkdir_efs mkdir /efs # Mount /efs cloud-init-per once mount_efs echo -e 'fs-abcd1234.efs.us-east-1.amazonaws.com:/ /efs nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 0 0' >> /etc/fstab mount -a --==BOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash # Set any ECS agent configuration options echo "ECS_CLUSTER=default" >> /etc/ecs/ecs.config --==BOUNDARY==--

systemd を使用する Ubuntu コンテナインスタンス

この例のユーザーデータスクリプトは、Ubuntu 16.04 インスタンスを以下のように設定します。

  • Docker のインストール

  • タスク用の IAM ロールに必要な iptables ルールを作成する

  • Amazon ECS コンテナエージェントに必要なディレクトリを作成する

  • Amazon ECS コンテナエージェント設定ファイルを作成する

  • エージェントをモニタリングするための systemd ユニットファイルを作成する

  • systemd ユニットを有効にして起動する

このスクリプトを実際のコンテナインスタンスに使用できます。ただし、それらのインスタンスが Ubuntu 16.04 AMI から起動される場合です。default クラスターを使用しない場合は、設定ファイルの ECS_CLUSTER=default 行を置き換えて、独自のクラスターの名前を指定します。コンテナインスタンスの起動の詳細については、「Amazon ECS コンテナインスタンスの起動」を参照してください。

#!/bin/bash # Install Docker apt-get update -y && apt-get install -y docker.io # Set iptables rules echo 'net.ipv4.conf.all.route_localnet = 1' >> /etc/sysctl.conf sysctl -p /etc/sysctl.conf iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679 iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679 # Write iptables rules to persist after reboot iptables-save > /etc/iptables/rules.v4 # Create directories for ECS agent mkdir -p /var/log/ecs /var/lib/ecs/data /etc/ecs # Write ECS config file cat << EOF > /etc/ecs/ecs.config ECS_DATADIR=/data ECS_ENABLE_TASK_IAM_ROLE=true ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true ECS_LOGFILE=/log/ecs-agent.log ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"] ECS_LOGLEVEL=info ECS_CLUSTER=default EOF # Write systemd unit file cat << EOF > /etc/systemd/system/docker-container@ecs-agent.service [Unit] Description=Docker Container %I Requires=docker.service After=docker.service [Service] Restart=always ExecStartPre=-/usr/bin/docker rm -f %i ExecStart=/usr/bin/docker run --name %i \ --restart=on-failure:10 \ --volume=/var/run:/var/run \ --volume=/var/log/ecs/:/log \ --volume=/var/lib/ecs/data:/data \ --volume=/etc/ecs:/etc/ecs \ --net=host \ --env-file=/etc/ecs/ecs.config \ amazon/amazon-ecs-agent:latest ExecStop=/usr/bin/docker stop %i [Install] WantedBy=default.target EOF systemctl enable docker-container@ecs-agent.service systemctl start docker-container@ecs-agent.service

systemdSELinux を使用する CentOS コンテナインスタンス

この例のユーザーデータスクリプトは、SELinux を使用する CentOS 7 インスタンスを以下のように設定します。

  • Docker のインストール

  • タスク用の IAM ロールに必要な iptables ルールを作成する

  • Amazon ECS コンテナエージェントに必要なディレクトリを作成する

  • Amazon ECS コンテナエージェント設定ファイルを作成する

  • エージェントをモニタリングするための systemd ユニットファイルを作成する

  • systemd ユニットを有効にして起動する

注記

以下の systemd ユニットファイルの docker run コマンドには、SELinux に必要な変更 (--privileged フラグや、ボリュームマウントに対する :Z プレフィックスなど) が含まれます。

このスクリプトを実際のコンテナインスタンスに使用できますが (それらのインスタンスが CentOS 7 AMI から起動される場合)、設定ファイルの ECS_CLUSTER=default 行を置き換えて、独自のクラスターの名前を指定してください (default クラスターを使用しない場合)。コンテナインスタンスの起動の詳細については、「Amazon ECS コンテナインスタンスの起動」を参照してください。

#!/bin/bash # Install Docker yum install -y docker # Set iptables rules echo 'net.ipv4.conf.all.route_localnet = 1' >> /etc/sysctl.conf sysctl -p /etc/sysctl.conf iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679 iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679 # Write iptables rules to persist after reboot iptables-save > /etc/sysconfig/iptables # Create directories for ECS agent mkdir -p /var/log/ecs /var/lib/ecs/data /etc/ecs # Write ECS config file cat << EOF > /etc/ecs/ecs.config ECS_DATADIR=/data ECS_ENABLE_TASK_IAM_ROLE=true ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true ECS_LOGFILE=/log/ecs-agent.log ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"] ECS_LOGLEVEL=info ECS_CLUSTER=default EOF # Write systemd unit file cat << EOF > /etc/systemd/system/docker-container@ecs-agent.service [Unit] Description=Docker Container %I Requires=docker.service After=docker.service [Service] Restart=always ExecStartPre=-/usr/bin/docker rm -f %i ExecStart=/usr/bin/docker run --name %i \ --privileged \ --restart=on-failure:10 \ --volume=/var/run:/var/run \ --volume=/var/log/ecs/:/log:Z \ --volume=/var/lib/ecs/data:/data:Z \ --volume=/etc/ecs:/etc/ecs \ --net=host \ --env-file=/etc/ecs/ecs.config \ amazon/amazon-ecs-agent:latest ExecStop=/usr/bin/docker stop %i [Install] WantedBy=default.target EOF systemctl enable docker-container@ecs-agent.service systemctl start docker-container@ecs-agent.service