如何在 Amazon ECS 中创建和使用自定义 AMI?

3 分钟阅读
0

我想在 Amazon Elastic Container Service(Amazon ECS)集群中设置和使用基于 CentOS、SUSE Enterprise Server 或 RHEL 的自定义亚马逊云机器镜像(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 容器实例,然后在运行该实例时添加所需的 UserData 以配置 ecs.config 文件。

解决方法

创建 AMI

可通过三种方法创建 AMI:

安装 Docker

如需安装适用于您的操作系统和系统架构的 Docker,请参阅 Docker 网站上的安装 Docker 引擎说明。

安装 ecs-int 包

1.    运行下列命令,以下载适用于 CentOSSUSE Enterprise ServerRHEL 的 Amazon ecs-int 包:

**注意:**请将 region 替换为您在其中启动实例的 AWS 区域。

对于 x86_64 CentOS 7 / 8SUSE Enterprise Server 15RHEL 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 / 8RHEL 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 / 8RHEL 7rpm 包:

$ 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

2.    为 CentOSSUSE Enterprise ServerRHEL 运行下列命令之一:

注意: 请将 region 替换为您在其中启动实例的区域。

对于 x86_64 CentOS 7 / 8SUSE Enterprise Server 15RHEL 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 / 8RHEL 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

4.    获取 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 安全最佳实践中的示例脚本,以此来清理实例中的各种文件。

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
AWS 官方
AWS 官方已更新 1 年前