使用脚本为现有 SQS 队列创建警报

问题描述

我正在尝试使用云形成基于我的 AWS 账户中现有的 SQS 队列指标创建警报。我有超过 25 个 SQS 队列,不想重复我一一提到 SQS 队列的代码。有没有一种有效的方法(更短的代码)使用编程来创建警报?

这是 CloudFormation 模板的 YAML 代码。在此,我提到了我现有队列中的一个队列。

Parameters:
  SQSAlarm:
    Type: String
    Description: Alarm for existing SQS Queues
    Default: Queue1
  SQSAlarm:
    Type: String
    Description: Alarm for existing SQS Queues
    Default: Queue3

Resources:
  MyAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName:
        !Ref SQSAlarm
      MetricName: "QueueName"
      Namespace: AWS/SQS
      Statistic: Average
      Period: 60
      EvaluationPeriods: 1
      Threshold: 60
      Comparisonoperator: GreaterThanThreshold
      MetricName: ApproximateAgeOfOldestMessage
      AlarmActions:
        - arn:aws:sns:us-east-1:589557565942:SQS-Oldest-Message
      Dimensions:
        - Name: QueueName
          Value: !Ref SQSAlarm

解决方法

在 CloudFormation (CFN) 中没有循环。唯一适合您的解决方案如下:

  • 创建 CFN macro,自动生成队列定义。
  • 创建一个 custom resource 以使用 lambda 函数和 AWS 开发工具包“手动”创建队列。
  • 使用nested stack,仍然需要重复,但可能会更短。
  • 不要使用 CFN。还有其他更强大的 IaC 工具,例如 Terraform,它们具有循环和范围的编程技术组合,可以轻松自动生成这些队列。