当可用磁盘空间不足时,如何自动评估和修复 Amazon EC2 实例上不断增加的卷?
上次更新日期:2022 年 5 月 17 日
我想看看挂接到我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例的卷是否需要扩展。此外,在操作系统 (OS) 级别扩展分区和文件系统是一项耗时的操作。如何实现整个流程的自动化?
简短描述
您可以使用一组 AWS Systems Manager Automation 文档来评估和扩展 Amazon Elastic Block Store (Amazon EBS) 卷。自动化文档协同工作,允许您调查并选择修复 Amazon EC2 实例的低磁盘使用率。
AWSPremiumSupport-TroubleshootEC2DiskUsage 自动化文档根据操作系统类型编排其他 Systems Manager 文档的运行。
第一组文档执行基本诊断和评估,以确定是否可以通过扩展卷大小进行迁移:
- AWSPremiumSupport-DiagnoseDiskUsageOnWindows
- AWSPremiumSupport-DiagnoseDiskUsageOnLinux
第二组文档获取第一个文档的输出并运行 Python 代码来执行卷修改。然后,自动化将访问实例并扩展卷的分区和文件系统:
- AWSPremiumSupport-ExtendVolumesOnWindows
- AWSPremiumSupport-ExtendVolumesOnLinux
使用以下步骤设置所需的权限并运行自动化文档。
解决方法
授予权限
您必须授予以下权限以便使用自动化文档。
如果您还没有这么做,请为 Systems Manager 创建一个 AWS Identity and Access Management (IAM) 实例配置文件。然后,将其附加到目标实例。
要设置 AssumeRole(在自动化文档配置过程中指定 AutomationAssumeRole 参数所必需),请执行以下步骤:
1. 使用以下 JSON 策略文档在 JSON 选项卡上创建一个策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:DescribeVolumes",
"ec2:DescribeVolumesModifications",
"ec2:ModifyVolume",
"ec2:DescribeInstances",
"ec2:CreateImage",
"ec2:DescribeImages",
"ec2:DescribeTags",
"ec2:CreateTags",
"ec2:DeleteTags"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"iam:PassRole"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ssm:StartAutomationExecution",
"ssm:GetAutomationExecution",
"ssm:DescribeAutomationStepExecutions",
"ssm:DescribeAutomationExecutions"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ssm:SendCommand",
"ssm:DescribeInstanceInformation",
"ssm:ListCommands",
"ssm:ListCommandInvocations"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
2. 创建代入角色并附上在上一步中创建的策略。
3. 修改此语句,将 "Resource": "*" 替换为代入角色的 ARN。
{
"Action": [
"iam:PassRole"
],
"Resource": "*",
"Effect": "Allow"
},
运行自动化文档
要使用这组 Systems Manager 自动化文档,您只需要运行最初的 AWSPremiumSupport-TroubleshootEC2DiskUsage 文档。请遵循以下步骤:
1. 打开 Systems Manager 控制台,然后从导航窗格中选择自动化。
2. 选择执行自动化。
3. 选择 AWSPremiumSupport-TroubleshootEC2DiskUsage 的单选按钮,然后选择下一步。
4. 对于执行自动化文档,选择简单执行。
5. 在输入参数下:
对于 InstanceId,请输入您的 Amazon EC2 实例 ID。
对于 AutomationAssumeRole,请输入允许自动化代表您执行操作的角色的 ARN。这是您在授予权限时创建的代入角色。
6. (可选)如果您的要求与默认值不同,请在输入参数下指定以下输入:
VolumeExpansionEnabled:控制文档是否扩展受影响的卷和分区(默认值:True)
VolumeExpansionUsageTrigger:触发扩展所需的已用分区空间的最小百分比(默认值:85)
VolumeExpansionCapSize:EBS 卷将增加到的最大大小(以 GiB 为单位)(默认值:2048)
VolumeExpansionGibIncrease:以 GiB 为单位的卷增加(默认值:20)
VolumeExpansionPercentageIncrease:卷增加百分比(默认值:20)
7. 选择执行。
控制台显示自动化状态。
示例
您当前的卷为 30 GB,有 4 GB 的可用空间,这意味着您有 26 GB 的已用空间。您可以指定以下输入参数:
- VolumeExpansionUsageTrigger: 85
- VolumeExpansionGibIncrease: 10
- VolumeExpansionPercentageIncrease: 15
- VolumeExpansionCapSize: 2048
结果:
会触发增加,因为 26 GB 的已用空间高于为 VolumeExpansionUsageTrigger 指定的 85% 阈值。
卷增加了 10 GB。这是因为您指定卷应增加 10 GB 或当前卷大小 4.5 GB 的 15%。自动化文档使用 VolumeExpansionGibIncrease 和 VolumeExpansionPercentageIncrease 之间的最大净增加量。
新的卷大小为 40 GB,在指定的 2048 VolumeExpansionCapSize 之内。