当可用磁盘空间不足时,如何自动评估和修复 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%。自动化文档使用 VolumeExpansionGibIncreaseVolumeExpansionPercentageIncrease 之间的最大净增加量。

新的卷大小为 40 GB,在指定的 2048 VolumeExpansionCapSize 之内。