Amazon ECS でカスタム AMI を作成して使用する方法を教えてください。
Amazon Elastic Container Service (Amazon ECS) クラスターで CentOS、SUSE Enterprise Server、または RHEL ベースのカスタム Amazon マシンイメージ (AMI) をセットアップして使用したいと考えています。
簡単な説明
Amazon ECS で使用するカスタム AMI を作成するには、以下を実行してください。
- AMI を作成します。
- お使いのオペレーティングシステムに Docker をインストールします。
- ecs-init パッケージをインストールします。
- (オプション) ECS 用 AWS Systems Manager Agent (SSM Agent) をインストールします。
- ECS サービスをオンにし、ECS コンテナエージェントがアクティブであることを確認します。
- 後で使用できるようにイメージをクリーンアップしてください。
- 新しい Amazon Elastic Compute Cloud (Amazon EC2)イメージを作成します。
- Amazon ECS Linux コンテナインスタンスを起動し、インスタンスの実行時に必要なユーザーデータを追加して ecs.config ファイルを設定します。
解決方法
AMI を作成する
AMI を作成するには 3 つのオプションがあります。
- Amazon Linux ECS に最適化された AMI に基づいてカスタマイズされた AMI を作成するには、 ECS に最適化された AMI ビルドレシピと HashiCorp パッカーを使用してイメージを作成します。
- EC2 Image Builder を使用すると、イメージの構築とメンテナンスの管理が容易になります。
- Amazon EC2 インスタンスを起動し、ECS に必要なコンポーネントを含むようにインスタンスを設定します。ECS 要件が組み込まれ、ECS AMI のベースとなる AMI 上の AMI で AMI を作成するには、「カスタム Amazon マシンイメージ (AMI) から EC2 インスタンスを起動する方法を教えてください」を参照してください。インスタンスが実行されたら、「SSH クライアントを使用して Linux インスタンスに接続する」を参照してください。
Docker をインストール
お使いのオペレーティングシステムとシステムアーキテクチャに Docker をインストールするには、Docker Web サイトの「 Docker Engine のインストール手順」を参照してください。
ecs-int パッケージのインストール
- 次のコマンドを実行して、CentOS、SUSE Enterprise Server、または RHEL 用の Amazon ecs-int パッケージをダウンロードします。
注:****リージョンをインスタンスを起動した AWS リージョンに置き換えます。
x86\ _64 CentOS 7/8、SUSE Enterprise Server 15、または RHEL 7 の場合:
$ curl -o amazon-ecs-init.rpm https://s3.<region>.amazonaws.com/amazon-ecs-agent-<region>/amazon-ecs-init-latest.x86_64.rpm
aarch64 CentOS 7/8 または RHEL 7 の場合:
$ curl -o amazon-ecs-init.rpm https://s3.<region>.amazonaws.com/amazon-ecs-agent-<region>/amazon-ecs-init-latest.aarch64.rpm
2. 以下のコマンドのいずれかを実行して、インスタンス用にダウンロードした rpm パッケージをインストールします。
CentOS 7/8 および RHEL 7 用の rpm パッケージの場合:
$ sudo yum install -y ./amazon-ecs-init.rpm
SUSE Enterprise Server 15 の rpm パッケージの場合:
$ sudo zypper install -y --allow-unsigned-rpm ./amazon-ecs-init.rpm
(オプション) ECS 用 SSM Agent のインストール
デバッグ用 Amazon ECS Exec 機能を使用するには、Amazon ECS 用 SSM Agent をインストールする必要があります。
- SSM Agent のバイナリをダウンロードして抽出するには、次のコマンドを実行します。
$ mkdir -p ssm-binaries && cd ssm-binaries
- CentOS、SUSE Enterprise Server、または RHEL で以下のいずれかのコマンドを実行します。
注: リージョンをインスタンスを起動したリージョンに置き換えます。
x86\ _64 CentOS 7/8、SUSE Enterprise Server 15、または RHEL 7 の場合:
$ curl -o amazon-ssm-agent.tar.gz https://amazon-ssm-<region>.s3.<region>.amazonaws.com/latest/linux_amd64/amazon-ssm-agent-binaries.tar.gz
aarch64 CentOS 7/8 または RHEL 7 の場合:
$ curl -o amazon-ssm-agent.tar.gz https://amazon-ssm-<region>.s3.<region>.amazonaws.com/latest/linux_arm64/amazon-ssm-agent-binaries.tar.gz
3. 次のコマンドを実行してエージェントファイルを抽出します。
$ tar -xzvf amazon-ssm-agent.tar.gz
- SSM Agent のバージョンを入手し、** /var/lib/ecs/deps/execute-command/bin/** の下にディレクトリを作成します。SSM Agent のバージョンを使用してディレクトリに名前を付けます。SSM Agent のバージョンを取得するコマンドの例を以下に示します。
$ ./amazon-ssm-agent -version SSM Agent version: 3.2.286.0 $ export SSM_VERSION=3.2.286.0 $ sudo mkdir -p /var/lib/ecs/deps/execute-command/bin/$SSM_VERSION
5. 次のコマンドを実行して、SSM Agent のバイナリファイルをディレクトリにコピーします。
$ sudo cp amazon-ssm-agent /var/lib/ecs/deps/execute-command/bin/$SSM_VERSION/amazon-ssm-agent $ sudo cp ssm-agent-worker /var/lib/ecs/deps/execute-command/bin/$SSM_VERSION/ssm-agent-worker $ sudo cp ssm-session-worker /var/lib/ecs/deps/execute-command/bin/$SSM_VERSION/ssm-session-worker
6. 次のコマンドを実行して SSM Agent の TLS 証明書をコピーします。
$ sudo mkdir -p /var/lib/ecs/deps/execute-command/certs $ sudo cp /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem /var/lib/ecs/deps/execute-command/certs/tls-ca-bundle.pem $ sudo chmod 400 /var/lib/ecs/deps/execute-command/certs/tls-ca-bundle.pem
ECS サービスをオンにし、ECS コンテナエージェントがアクティブであることを確認します
- ECS サービスをオンにするには、次のコマンドを実行します。
$ sudo systemctl enable --now ecs
2. 次のコマンドを実行して、ECS サービスがオンになっていて、ECS コンテナエージェントがアクティブであることを確認します。
$ sudo systemctl status ecs $ sudo docker ps
出力は次のようになります。
ecs.service - Amazon Elastic Container Service - container agent Loaded: loaded (/lib/systemd/system/ecs.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-02-22 08:39:02 UTC; 11min ago (...)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 108cfb8a10d2 amazon/amazon-ecs-agent:latest "/agent" 9 minutes ago Up 9 minutes (healthy) ecs-agent
イメージをクリーンアップ
1. 後で使用できるようにイメージをクリーンアップするには、次のコマンドを実行して ecs-init パッケージと Docker プロセスを停止します。
$ sudo systemctl stop ecs $ sudo systemctl stop docker
2. イメージを保存するときにログファイルが保存されないように、現在のインスタンスからすべてのログファイルを削除します。EC2 Image Builder のセキュリティベストプラクティスのサンプルスクリプトを使用して、インスタンスからさまざまなファイルをクリーンアップします。
- ECS 固有のデータをクリーンアップするには、次のコマンドを実行します。
$ sudo rm -rf /var/log/ecs/* $ sudo rm /var/lib/ecs/data/agent.db
新しい Amazon EC2 イメージを作成する
次のコマンドを実行して、前のステップで設定したイメージを使用して新しいイメージを作成します。
$ aws ec2 create-image --description "My ECS Image" --instance-id i-012345678910 --name Custom-ECS-Image --reboot
出力は次の例のようになります:
{ "ImageId": "ami-01234567890101" }
インスタンスを起動する
インスタンスを起動するには、「Amazon ECS Linux コンテナインスタンスの起動」を参照してください。
新しい AMI で次のコマンドを実行して、** UserData** に ecs.config ファイルに書き込むコマンドが含まれていることを確認します。
**注:**your\ _cluster\ _name をお使いのクラスターの名前に置き換えてください。
#!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
関連するコンテンツ
- AWS公式更新しました 2年前
- AWS公式更新しました 6ヶ月前
- AWS公式更新しました 2年前
- AWS公式更新しました 2ヶ月前