如何在 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
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 4 个月前