

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# CloudFormation スタックレベルのフィルターをフックします
<a name="hooks-stack-level-filtering"></a>

CloudFormation フックにスタックレベルのフィルターを追加して、スタック名とロールに基づいて特定のスタックをターゲットにできます。これは、同じリソースタイプを持つ複数のスタックがある場合に便利ですが、フックは特定のスタックを対象としています。

このセクションでは、これらのフィルターの仕組みと、従うことができる例について説明します。

スタックレベルのフィルタリングを使用しないフック設定の基本構造は次のようになります。

```
{
  "CloudFormationConfiguration": {
    "HookConfiguration": {
      "HookInvocationStatus": "ENABLED",
      "TargetOperations": [
        "STACK",
        "RESOURCE"
      ],
      "FailureMode": "WARN",
      "Properties": {},
      "TargetFilters": {
        "Actions": [
          "CREATE",
          "UPDATE",
          "DELETE"
        ]
      }
    }
  }
}
```

`HookConfiguration` 構文の詳細については、「」を参照してください[フック設定スキーマ構文リファレンス](hook-configuration-schema.md)。

スタックレベルのフィルターを使用するには、 の下に`StackFilters`キーを追加します`HookConfiguration`。

`StackFilters` キーには 1 つの必須メンバーと 2 つのオプションメンバーがあります。
+ `FilteringCriteria` (必須)
+ `StackNames` (オプション)
+ `StackRoles` (オプション)

`StackNames` または `StackRoles`プロパティはオプションです。ただし、これらのプロパティのうち、少なくとも 1 つを指定する必要があります。

[Cloud Control API](https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/what-is-cloudcontrolapi.html) オペレーションをターゲットとするフックを作成すると、すべてのスタックレベルのフィルターは無視されます。

## `FilteringCriteria`
<a name="stack-level-filtering-components-filteringcriteria"></a>

`FilteringCriteria` は、フィルタリング動作を指定する必須パラメータです。`ALL` または のいずれかに設定できます`ANY`。
+ `ALL` すべてのフィルターが一致すると、 はフックを呼び出します。
+ `ANY` いずれかのフィルターが一致すると、 はフックを呼び出します。

## `StackNames`
<a name="stack-level-filtering-components-stacknames"></a>

フック設定でフィルターとして 1 つ以上のスタック名を指定するには、次の JSON 構造を使用します。

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

いずれかを指定する必要があります。
+ `Include`: 含めるスタック名のリスト。このリストで指定されたスタックのみがフックを呼び出します。
  + 型: 文字列の配列
  + 最大項目数: 50
  + 最小項目: 1
+ `Exclude`: 除外するスタック名のリスト。ここにリストされているスタックを除くすべてのスタックはフックを呼び出します。
  + 型: 文字列の配列
  + 最大項目数: 50
  + 最小項目: 1

`Include` および `Exclude`配列の各スタック名は、次のパターンと長さの要件に従う必要があります。
+ パターン: `^[a-zA-Z][-a-zA-Z0-9]*$`
+ 最大長: 128 

`StackNames` は、具体的なスタック名と完全なワイルドカードマッチングをサポートします。ワイルドカードを使用する例については、「」を参照してください[フックターゲット名でのワイルドカードの使用](wildcard-hook-targets.md)。

## `StackRoles`
<a name="stack-level-filtering-components-StackRoles"></a>

Hook 設定でフィルターとして 1 つ以上の [IAM ロール](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-servicerole.html)を指定するには、次の JSON 構造を使用します。

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

いずれかを指定する必要があります。
+ `Include`: これらのロールに関連付けられたターゲットスタックの IAM ロール ARNs のリスト。これらのロールによって開始されたスタックオペレーションのみがフックを呼び出します。
  + 型: 文字列の配列
  + 最大項目数: 50
  + 最小項目: 1
+ `Exclude`: 除外するスタックの IAM ロール ARNs のリスト。フックは、指定されたロールによって開始されたスタックを除くすべてのスタックで呼び出されます。
  + 型: 文字列の配列
  + 最大項目数: 50
  + 最小項目: 1

`Include` および `Exclude`配列の各スタックロールは、次のパターンと長さの要件に従う必要があります。
+ パターン: `arn:.+:iam::[0-9]{12}:role/.+`
+ 最大長: 256

`StackRoles` 次の [ARN 構文](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html#arns-syntax)セクションでワイルドカード文字を許可します。
+ `partition`
+ `account-id`
+ `resource-id`

ARN 構文セクションでワイルドカードを使用する例については、「」を参照してください[フックターゲット名でのワイルドカードの使用](wildcard-hook-targets.md)。

## `Include` および `Exclude`
<a name="stack-level-filtering-components-include-and-exclude"></a>

各フィルター (`StackNames` および `StackRoles`) には`Include`リストと`Exclude`リストがあります。たとえば`StackNames`、 を使用すると、フックは`Include`リストで指定されたスタックでのみ呼び出されます。スタック名が`Exclude`リストでのみ指定されている場合、フックは`Exclude`リストに含まれ*ていない*スタックでのみ呼び出されます。`Include` と の両方が指定され`Exclude`ている場合、フックは`Include`リストにあるものをターゲットにし、`Exclude`リストにあるものをターゲットにしません。

たとえば、A、B、C、D の 4 つのスタックがあるとします。
+ `"Include": ["A","B"]` フックは A と B で呼び出されます。
+ `"Exclude": ["B"]` フックは A、C、D で呼び出されます。
+ `"Include": ["A","B","C"], "Exclude": ["A","D"]` フックは B と C で呼び出されます。
+ `"Include": ["A","B","C"], "Exclude": ["A”,"B","C"]` フックはどのスタックでも呼び出されません。

## スタックレベルフィルターの例
<a name="stack-level-filtering-examples"></a>

このセクションでは、 CloudFormation フックのスタックレベルフィルターを作成するための例を示します。

### 例 1: 特定のスタックを含める
<a name="stack-level-filtering-example-1"></a>

次の例では、 `Include`リストを指定します。フックは、`stack-test-1`、、`stack-test-2`および という名前のスタックでのみ呼び出されます`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"
          ]
        }
      }
    }
  }
}
```

### 例 2: 特定のスタックを除外する
<a name="stack-level-filtering-example-2"></a>

代わりにスタック名が`Exclude`リストに追加されると、フックは `stack-test-1`、、`stack-test-2`または という名前の*スタックで*呼び出されます`stack-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: include と exclude の組み合わせ
<a name="stack-level-filtering-example-3"></a>

`Include` および `Exclude`リストが指定されていない場合、フックは`Exclude`リストに含まれ`Include`ていない のスタックでのみ呼び出されます。次の例では、フックは でのみ呼び出されます`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`条件と組み合わせる
<a name="stack-level-filtering-example-4"></a>

次のフックには、3 つのスタック名と 1 つのスタックロールが含まれています。`FilteringCriteria` は として指定されているため`ALL`、フックは、一致するスタック名*と*一致するスタックロール*の両方*を持つスタックに対してのみ呼び出されます。

```
{
  "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`条件と組み合わせる
<a name="stack-level-filtering-example-5"></a>

次のフックには、3 つのスタック名と 1 つのスタックロールが含まれています。`FilteringCriteria` は として指定されているため`ANY`、フックは、**一致するスタック名*または*一致するスタックロールを持つスタックに対して呼び出されます。

```
{
  "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"]
        }
      }
    }
  }
}
```