Amazon ECS でカスタム AMI を作成して使用する方法を教えてください。

所要時間3分
0

Amazon Elastic Container Service (Amazon ECS) クラスターで CentOS、SUSE Enterprise Server、または RHEL ベースのカスタム Amazon マシンイメージ (AMI) をセットアップして使用したいと考えています。

簡単な説明

Amazon ECS で使用するカスタム AMI を作成するには、以下を実行してください。

  1. AMI を作成します。
  2. お使いのオペレーティングシステムに Docker をインストールします。
  3. ecs-init パッケージをインストールします。
  4. (オプション) ECS 用 AWS Systems Manager Agent (SSM Agent) をインストールします。
  5. ECS サービスをオンにし、ECS コンテナエージェントがアクティブであることを確認します。
  6. 後で使用できるようにイメージをクリーンアップしてください。
  7. 新しい Amazon Elastic Compute Cloud (Amazon EC2)イメージを作成します。
  8. Amazon ECS Linux コンテナインスタンスを起動し、インスタンスの実行時に必要なユーザーデータを追加して ecs.config ファイルを設定します。

解決方法

AMI を作成する

AMI を作成するには 3 つのオプションがあります。

Docker をインストール

お使いのオペレーティングシステムとシステムアーキテクチャに Docker をインストールするには、Docker Web サイトの「 Docker Engine のインストール手順」を参照してください。

ecs-int パッケージのインストール

  1. 次のコマンドを実行して、CentOSSUSE Enterprise Server、または RHEL 用の Amazon ecs-int パッケージをダウンロードします。

注:****リージョンをインスタンスを起動した AWS リージョンに置き換えます。

x86\ _64 CentOS 7/8SUSE 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 15rpm パッケージの場合:

$ sudo zypper install -y --allow-unsigned-rpm ./amazon-ecs-init.rpm

(オプション) ECS 用 SSM Agent のインストール

デバッグ用 Amazon ECS Exec 機能を使用するには、Amazon ECS 用 SSM Agent をインストールする必要があります。

  1. SSM Agent のバイナリをダウンロードして抽出するには、次のコマンドを実行します。
$ mkdir -p ssm-binaries && cd ssm-binaries
  1. CentOSSUSE Enterprise Server、または RHEL で以下のいずれかのコマンドを実行します。

: リージョンをインスタンスを起動したリージョンに置き換えます。

x86\ _64 CentOS 7/8SUSE 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
  1. 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 コンテナエージェントがアクティブであることを確認します

  1. 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 のセキュリティベストプラクティスのサンプルスクリプトを使用して、インスタンスからさまざまなファイルをクリーンアップします。

  1. 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公式
AWS公式更新しました 1年前
コメントはありません