AWS CloudFormation Hooks 堆栈级别过滤器 - AWS CloudFormation

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS CloudFormation Hooks 堆栈级别过滤器

你可以在 CloudFormation Hook 中添加堆栈级别过滤器,根据堆栈名称和角色定位特定的堆栈。如果您有多个资源类型相同的堆栈,但是 Hook 适用于特定的堆栈,则此功能很有用。

本节说明了这些过滤器的工作原理,并提供了您可以遵循的示例。

没有堆栈级别筛选的 Hook 配置的基本结构如下所示:

{ "CloudFormationConfiguration": { "HookConfiguration": { "HookInvocationStatus": "ENABLED", "TargetOperations": [ "STACK", "RESOURCE" ], "FailureMode": "WARN", "Properties": {} } } }

有关HookConfiguration语法的更多信息,请参阅挂钩配置架构语法参考

要使用堆栈级别筛选器,请在下方添加一个StackFilters密钥HookConfiguration

StackFilters密钥有一个必填成员和两个可选成员。

  • FilteringCriteria(必需)

  • StackNames(可选)

  • StackRoles(可选)

StackNamesStackRoles属性是可选的。但是,您必须指定其中至少一个属性。

如果您创建了以 Cloud Control API 操作为目标的 Hook,则所有堆栈级别的过滤器都将被忽略。

FilteringCriteria

FilteringCriteria是指定筛选行为的必填参数。可以将其设置为ALLANY

  • ALL如果所有过滤器都匹配,则调用 Hook。

  • ANY如果匹配任何一个过滤器,则调用 Hook。

StackNames

要在 Hooks 配置中将一个或多个堆栈名称指定为过滤器,请使用以下JSON结构:

"StackNames": { "Include": [ "string" ], "Exclude": [ "string" ] }

您必须指定以下各项之一:

  • Include:要包含的堆栈名称列表。只有此列表中指定的堆栈才会调用 Hook。

    • 类型:字符串数组

    • 最大物品数量:50

    • 最少物品:1

  • Exclude:要排除的堆栈名称列表。除此处列出的堆栈外,所有堆栈都将调用 Hook。

    • 类型:字符串数组

    • 最大物品数量:50

    • 最少物品:1

IncludeExclude数组中的每个堆栈名称都必须符合以下模式和长度要求:

  • 模式:^[a-zA-Z][-a-zA-Z0-9]*$

  • 最大长度:128

StackRoles

要在 Hook 配置中将一个或多个IAM角色指定为筛选器,请使用以下JSON结构:

"StackRoles": { "Include": [ "string" ], "Exclude": [ "string" ] }

您必须指定以下各项之一:

  • Include: 与这些IAM角色关联ARNs的目标堆栈的角色列表。只有由这些角色启动的堆栈操作才会调用 Hook。

    • 类型:字符串数组

    • 最大物品数量:50

    • 最少物品:1

  • Exclude: 要排除的堆栈ARNs的IAM角色列表。Hook 将在除指定角色启动的堆栈之外的所有堆栈上调用。

    • 类型:字符串数组

    • 最大物品数量:50

    • 最少物品:1

IncludeExclude数组中的每个堆栈角色都必须遵守以下模式和长度要求:

  • 模式:arn:.+:iam::[0-9]{12}:role/.+

  • 最大长度:256

IncludeExclude

每个筛选器(StackNamesStackRoles)都有一个Include列表和Exclude列表。StackNames举个例子,Hook 只能在Include列表中指定的堆栈上调用。如果仅在Exclude列表中指定堆栈名称,则仅在Exclude列表中的堆栈上调用该挂钩。如果同时指定了IncludeExclude,则 Hook 会瞄准Include列表中的内容,而不是Exclude列表中的内容。

例如,假设你有四个堆栈:A、B、C 和 D。

  • "Include": ["A","B"]在 A 和 B 上调用 Hook

  • "Exclude": ["B"]在 A、C 和 D 上调用 Hook

  • "Include": ["A","B","C"], "Exclude": ["A","D"]在 B 和 C 上调用 Hook

  • "Include": ["A","B","C"], "Exclude": ["A”,"B","C"]不会在任何堆栈上调用 Hook。

堆栈级过滤器示例

本节提供了一些示例,您可以按照这些示例为 AWS CloudFormation Hook 创建堆栈级过滤器。

示例 1:包括特定的堆栈

以下示例指定了一个Include列表。Hook 只能在名为stack-test-1stack-test-2stack-test-3的堆栈上调用。

{ "CloudFormationConfiguration": { "HookConfiguration": { "HookInvocationStatus": "ENABLED", "TargetOperations": [ "STACK", "RESOURCE" ], "FailureMode": "WARN", "Properties": {}, "StackFilters": { "FilteringCriteria": "ALL", "StackNames": { "Include": [ "stack-test-1", "stack-test-2", "stack-test-3" ] } } } } }

示例 2:排除特定堆栈

如果改为将堆栈名称添加到Exclude列表中,则会在任何命名的堆栈上调用 Hookstack-test-1stack-test-2stack-test-3

{ "CloudFormationConfiguration": { "HookConfiguration": { "HookInvocationStatus": "ENABLED", "TargetOperations": [ "STACK", "RESOURCE" ], "FailureMode": "WARN", "Properties": {}, "StackFilters": { "FilteringCriteria": "ALL", "StackNames": { "Exclude": [ "stack-test-1", "stack-test-2", "stack-test-3" ] } } } } }

示例 3:合并包含和排除

如果未指定IncludeExclude列表,则仅在Exclude列表中未Include包含的堆栈上调用 Hook。在以下示例中,Hook 仅在上调用stack-test-3

{ "CloudFormationConfiguration": { "HookConfiguration": { "HookInvocationStatus": "ENABLED", "TargetOperations": [ "STACK", "RESOURCE" ], "FailureMode": "WARN", "Properties": {}, "StackFilters": { "FilteringCriteria": "ALL", "StackNames": { "Include": [ "stack-test-1", "stack-test-2", "stack-test-3" ], "Exclude": [ "stack-test-1", "stack-test-2" ] } } } } }

示例 4:将堆栈名称和角色与ALL标准相结合

以下 Hook 包括三个堆栈名称和一个堆栈角色。由于指定FilteringCriteriaALL,因此只有同时具有匹配堆栈名称匹配堆栈角色的堆栈才会调用 Hook。

{ "CloudFormationConfiguration": { "HookConfiguration": { "HookInvocationStatus": "ENABLED", "TargetOperations": [ "STACK", "RESOURCE" ], "FailureMode": "WARN", "Properties": {}, "StackFilters": { "FilteringCriteria": "ALL", "StackNames": { "Include": [ "stack-test-1", "stack-test-2", "stack-test-3" ] }, "StackRoles": { "Include": ["arn:aws:iam::123456789012:role/hook-role"] } } } } }

示例 5:将堆栈名称和角色与ANY标准相结合

以下 Hook 包括三个堆栈名称和一个堆栈角色。由于指定FilteringCriteriaANY,因此会为具有匹配堆栈名称匹配堆栈角色的堆栈调用 Hook。

{ "CloudFormationConfiguration": { "HookConfiguration": { "HookInvocationStatus": "ENABLED", "TargetOperations": [ "STACK", "RESOURCE" ], "FailureMode": "WARN", "Properties": {}, "StackFilters": { "FilteringCriteria": "ANY", "StackNames": { "Include": [ "stack-test-1", "stack-test-2", "stack-test-3" ] }, "StackRoles": { "Include": ["arn:aws:iam::123456789012:role/hook-role"] } } } } }