Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何在 Amazon ECS 中创建和使用自定义 AMI?
我想在 Amazon Elastic Container Service(Amazon ECS)集群中设置和使用基于 CentOS、SUSE Enterprise Server 或 RHEL 的自定义亚马逊云机器镜像(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 容器实例,然后在运行该实例时添加所需的 UserData 以配置 ecs.config 文件。
解决方法
创建 AMI
可通过三种方法创建 AMI:
- 如需基于 Amazon Linux ECS 优化的 AMI 创建自定义 AMI,请使用带有 HashiCorp Packer 的 ECS 优化的 AMI 构建配方来创建镜像。
- 使用 EC2 Image Builder 来帮助您构建和管理镜像的维护。
- 启动 Amazon EC2 实例,然后将该实例配置为包括 ECS 所需的组件。如需创建具有内置 ECS 要求的 AMI,并在您希望 ECS AMI 所基于的 AMI 上进行创建,请参阅如何从自定义亚马逊机器映像 (AMI) 启动 EC2 实例?在实例运行后,请参阅使用 SSH 客户端连接到 Linux 实例。
安装 Docker
如需安装适用于您的操作系统和系统架构的 Docker,请参阅 Docker 网站上的安装 Docker 引擎说明。
安装 ecs-int 包
1. 运行下列命令,以下载适用于 CentOS、SUSE Enterprise Server 或 RHEL 的 Amazon 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 的 SSM Agent
如需使用 Amazon ECS Exec 调试功能,必须安装适用于 Amazon ECS 的 SSM Agent。
1. 运行下列命令,下载并提取 SSM Agent 二进制文件:
$ mkdir -p ssm-binaries && cd ssm-binaries
2. 为 CentOS、SUSE Enterprise Server 或 RHEL 运行下列命令之一:
注意: 请将 region 替换为您在其中启动实例的区域。
对于 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
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
- 语言
- 中文 (简体)
