New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
如何利用最佳实践和强化技术保护我的 Amazon ECS 容器实例?
我的 Amazon Elastic Container Service (Amazon ECS) 实例或底层 Amazon Elastic Compute Cloud (Amazon EC2) 实例遇到意外终止、重启、扩展问题或数据丢失等问题。我想保护我的 Amazon ECS 容器实例。
简短描述
如果您在 Amazon ECS 中使用 Amazon EC2 启动类型,则 EC2 实例问题(例如终止、重启或性能瓶颈)会影响容器。要解决这些问题,请实施最佳实践来保护您的 Amazon ECS 容器实例,并解决 Amazon EC2 的维护、扩展和故障排除问题。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
保护您的 Amazon ECS 容器实例
限制 AWS 账户根用户访问权限
不要使用根账户,除非必须使用,例如更改账户设置或修改根用户密码。请改用 AWS Identity and Access Management (IAM) 角色和策略来设置符合最低权限原则的访问权限。此外,请为根账户设置多重身份验证 (MFA)。
实施安全强化
使用安全组将入站和出站流量限制为仅所需的 IP 地址和端口。定期修补和更新 Amazon ECS 容器实例。您还可以使用 Amazon Inspector 来识别漏洞。
对传输中的敏感数据(例如 HTTPS)和静态敏感数据(例如 Amazon Elastic Block Storage (Amazon EBS) 卷)使用加密。有关详细信息,请参阅 Infrastructure protection。
使用 AWS Systems Manager 简化 Amazon ECS 容器实例的修补和维护。使用经 Amazon ECS 优化的亚马逊机器映像 (AMI) 上预安装的 AWS Systems Manager Agent (SSM Agent) 来实施自动化修补管理工作流。这包括计划的维护时段和实例替换策略。有关详细信息,请参阅 Automate patching by replacing Amazon ECS container instances。
启用日志记录和监控
配置 AWS CloudTrail 以记录 API 活动。最佳做法是设置 Amazon CloudWatch 警报,以在 CpuUtilization、DiskReadOps、DiskWriteOps、NetworkIn 或 NetworkOut 值过高时提醒您。
要监控您的容器实例性能和资源使用情况,请激活 Container Insights。
设置备份和还原策略
使用 Amazon EBS 快照或创建 AMI 作为灾难恢复计划的一部分。有关详细信息,请参阅使用 AWS Backup 进行 Amazon EC2 备份和还原。
**重要事项:**如果您删除 EBS 卷,则只有在创建了 Amazon EBS 快照或 AMI 备份时才能恢复该卷。
要收集和导出元数据、实例日志和应用程序数据,请使用 SSH 连接到您的实例。然后,运行以下 AWS CLI 命令 describe-instances 导出实例元数据:
aws ec2 describe-instances \ --instance-ids i-abcdxyz\ -- query "Reservations[].Instances[]" \ -- output text > file.txt
要导出实例日志,请运行以下 get-console-output 命令:
aws ec2 get-console-output --instance-id i-abcdxyz --output text
**注意:**在前面的命令中,请将 i-abcdxyz 替换为您的实例 ID。
对 EC2 实例问题进行故障排除
对意外终止和重启问题进行故障排除
使用 Amazon ECS 托管实例耗尽来确保您的工作负载在出现 Spot 中断或类似事件时能正常停止并转换到稳定实例。
为确保安全性和性能,Amazon EC2 会定期为您的实例计划例行维护活动,例如重启、停止和启动以及停用。您可以使用 AWS Health Dashboard 来跟踪这些可能需要几分钟才能完成的事件。有关在例行维护事件后您可以执行哪些操作的信息,请参阅受计划事件影响的 Amazon EC2 实例适用的建议操作。
如果您遇到竞价型实例终止的情况,请参阅Amazon EC2 为何中断我的竞价型实例?
作为计划维护的一部分,Amazon EC2 可能会终止您的实例。要管理此类实例终止问题,最佳做法是使用 Amazon EC2 Auto Scaling 生命周期挂钩。
对高资源利用率进行故障排除
要检查 CPU 或内存使用率是否较高,请检查实例的应用程序日志以及 CloudWatch 指标 CpuUtilization、NetworkIn、NetworkOut、DiskReadOps 和 DiskWriteOps。此外,请检查 Container Insights 指标 MemoryUtilized。
如果您的配置不满足实例的资源需求,请纵向扩展您的实例。
或者,使用 Amazon ECS 容量提供商来动态扩展和优化集群的计算资源。要创建容量提供商,请使用 Amazon ECS 控制台。或者,运行类似于以下示例的 create-capacity-provider 命令:
aws ecs create-capacity-provider --name "example-capacity=provider" --auto-scaling-group-provider "autoScalingGroupArn=arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111:autoScalingGroupName/MyAutoScalingGroup,managedScaling={status=ENABLED,targetCapacity=100,minimumScalingStepSize=1,maximumScalingStepSize=100},managedTerminationProtection=ENABLED"
解决磁盘空间不足的问题
运行 Amazon ECS 任务的 EC2 实例的主存储空间可能会由于以下原因而变满:
- 应用程序日志
- 容器映像存储空间过大
- 运行容器实例创建的临时文件
请注意,每个文件或目录都会使用一个索引节点,无论其大小如何。因此,如果您有多个小文件,则可能会超过您的索引节点配额。如果您超过了索引节点配额,则即使有可用磁盘空间也无法创建新文件。
使用 Amazon ECS 配置自动执行任务和映像清理,并删除已停止的任务和未使用的 Docker 映像。此外,请使用 ECS_RESERVED_MEMORY 变量来确保任务不会占用所有可用内存。
要自动清理存储库中旧的或未使用的映像,请使用 Amazon Elastic Container Registry (Amazon ECR) 生命周期策略。要清理未使用的对象(例如映像、容器实例、卷和网络),请使用 Docker prune 命令。有关详细信息,请参阅 Docker 文档网站上的 Prune unused Docker objects。
要查看所有已挂载文件系统使用的磁盘空间,请运行以下命令:
df -h
要查看特定文件系统使用的磁盘空间,请运行以下命令:
df -h /
**注意:**前面的命令仅显示根文件系统的数据。
由于可用索引节点很少,因此可能会出现资源问题。要检查您的索引节点使用情况,请运行以下命令:
df -i
要查看特定目录使用的总磁盘空间,请运行以下命令:
du -sh /path/to/directory
**注意:**请将 directory 替换为您的目录名称。
要列出应用程序中最大的目录或文件,请运行以下命令:
du -ah /path/to/directory | sort -rh | head -n 10
**注意:**前面的命令将列出前 10 个最大的文件或目录。请将 10 替换为要查看的大文件和目录的数量,将 directory 替换为您的目录名称。
要检查目录中每个子目录的大小,请运行以下命令:
du -h --max-depth=1
要优化您的可用容量,请为您的 EC2 实例使用竞价型实例集或容量提供商。有关详细信息,请参阅 Powering your Amazon ECS clusters with Spot Fleet。
相关信息

相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 10 个月前
- AWS 官方已更新 8 个月前
- AWS 官方已更新 9 个月前