如何在 Amazon ECS 中建立和使用自訂 AMI?
上次更新日期:2022 年 4 月 15 日
我想要在 Amazon Elastic Container Service (Amazon ECS) 叢集中設定和使用以 CentOS、SUSE Enterprise Server 或 RHEL 為基礎的自訂 Amazon Machine Image (AMI)。
簡短描述
若要建立與 Amazon ECS 搭配使用的自訂 AMI,請執行以下操作:
- 建立 AMI。
- 為作業系統安裝 Docker。
- 安裝 ecs-init 套裝服務。
- 啟用 ECS 服務,並確認 ECS 容器代理程式處於作用中狀態。
- 清除映像以供日後使用。
- 建立新的 Amazon Elastic Compute Cloud (Amazon EC2) 映像。
- 啟動 Amazon ECS Linux 容器執行個體,並在執行該執行個體時新增所需的 UserData 以設定 ecs.config 檔案。
解決方案
建立 AMI
有三種選項可供建立 AMI:
- 若要根據 Amazon Linux ECS 最佳化 AMI 來建立自訂 AMI,請搭配使用 ECS 最佳化 AMI 建置配方與 Hashicorp Packer 來建立映像。
- 使用 EC2 Image Builder 服務可協助您建置和管理映像的維護。
- 啟動 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體,然後設定執行個體來納入 ECS 所需的元件。若要建立內建了 ECS 要求的 AMI,並在想要作為 ECS AMI 建立基礎的 AMI 上建立 AMI,請參閲如何透過自訂 Amazon Machine Image (AMI) 啟動 EC2 執行個體? 在執行個體開始執行後,請參閲使用 SSH 用戶端來連接到 Linux 執行個體。
安裝 Docker
若要為作業系統和系統架構安裝 Docker,請參閲安裝 Docker Engine。
安裝 ecs-int 套裝服務
注意:請將 region 替換為執行個體啟動時所在的 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 服務,並確認 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 的安全最佳實務中的指令碼範例來清除執行個體中的各種檔案。
3. 若要清除 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