匹配具有指定前缀的 ServiceName

Matching ServiceName with a specified prefix

我正在尝试在 AWS CloudWatch 中创建警报。 有两种 CloudFormation 模板:一种用于创建架构(我无权访问),另一种用于警报。我想匹配 ServiceName 我知道的前缀,但它有一些随机后缀。 ServiceNameClusterName 都与 AWS ECS 有关。这是代码片段:

SomeAlarm:
  Type: 'AWS::CloudWatch::Alarm'
  Properties:
    ...
    Dimensions:
      - Name: ClusterName
        Value: <known cluster name>
      - Name: ServiceName
        Value: <known prefix><random suffix>

据我所知,在这种情况下我不能使用通配符或正则表达式,或者我不知道有什么方法可以实现它。此外,我无法更改第一个模板以导出值并将它们导入第二个模板。 我可以使用什么语法来匹配 ServiceName?有什么想法吗?

由于您无法更改第一个模板,我认为最好的办法是使用自定义资源。您可以通过两种方式解决此问题:

第一,您只需将整个 CloudWatch 警报写入自定义资源中即可。这意味着您必须确保实现所有更新和删除功能。这样您就可以使用 AWS 开发工具包来检索您需要的正确值。

第二种方式是使用自定义资源,但仅用于检索值。然后,您可以将该值作为 return 值传递给您的 CloudFormation 资源,随后使用 !GetAtt 方法检索和使用输出值。在这种情况下,我还会在您的自定义资源中添加一个虚拟参数,您可以随时更改它。当堆栈中发生您无法控制的更改时,您可以使用此虚拟参数强制重新创建自定义资源(以及随后的警报)。

我以前使用过第二种方法,当时我需要访问 Application Load Balancer ARN 进行 Elastic Beanstalk 部署,这也不是现成的。