根据RDS存储大小更新cloudwatch告警阈值

Update cloudwatch alarm threshold based on the stoarge size of RDS

我们有一个设置,其中 RDS 通过 Terraform 进行配置,RDS 的 free storage space 指标的 cloudwatch 警报通过 Terraform 设置为 <10% total RDS storage。 RDS 存储总量是一个静态值。每当存储不足时,我们都会通过 AWS 控制台手动增加 RDS 存储。有没有办法自动更新cloudwatch报警阈值,增加RDS存储后设置为10% of new total storage

如果您使用 terraform 代码更新分配的 space,这应该由 terraform 自动更新。 Cloudwatch 本身不了解您正在观看的内容之间的关系 - 它只是在您应用模板时由 Terraform 编程了一个阈值。由于 terraform 代表您执行这两项操作(分配 RDS 实例和设置 cloudwatch 指标),它了解需要设置的内容。但是,使用 AWS 控制台本质上是在绕过地形。当大小增加时,terraform 并不知道 cloudwatch 指标的变化。使用 terraform 应用大小更新应该可以修复警报,具体取决于您设置警报阈值的方式。

虽然被认为是一种反模式,但还有一个替代方案。它被认为是一种反模式,因为让两个不同的进程控制同一资源的配置通常不是一个好主意。但是,如果您坚持要在 terraform 计划之外控制 RDS 的大小,您可以自动化 cloudwatch 指标设置。

根本问题是 FreeSpaceAvailable RDS 指标只理解字节,而不理解百分比。 Terraform 会为您进行转换,因此您不会看到它。这就是为什么当您在 RDS 控制台中更改分配的 space 时警报不会更改的原因。您可以开发一个简单的 lambda 函数,它使用一个 AWS API(例如 python 的 boto3)来定期查询 RDS 数据库的大小并相应地更新 FreeSpaceAvailable 上的警报。通过让 SNS 通知 SQS 队列有关 RDS 配置的更改,它可以更加复杂,然后可以触发 lambda 评估指标,这将使更新非常快速和高效。您需要应用 IAM 策略,允许 lambda 读取相关 RDS 实例上的数据,并允许更新相关指标。或者,您可以在 AWS 控制台更新后立即手动 运行 然后 运行 它,但在这种情况下,您可以自己手动更新指标。

由于 terraform 已经控制了资源,我仍然不建议使用此路径。