AWS Backup用CloudFormationを作成し、リソースに付与されているタグを指定してバックアップを行った際に、指定通りのバックアップが実行されないことを確認しました。
原因は、AWS::Backup::BackupSelection
の ListOfTags
と Conditions
の違いが十分に理解できていなかったことでした。
ListOfTagsとConditionsは複数条件によって挙動が異なるため、その違いについてまとめます。
ConditionsとListOfTagsの違い
- Conditions: 複数の条件を指定する場合、すべての条件に一致するリソースのみを割り当てます (AND ロジックを使用)。
- ListOfTags: 複数の条件を指定する場合は、少なくとも 1 つの条件に一致するすべてのリソースを割り当てます(OR ロジックを使用)。
詳細は AWS公式ドキュメント を参照してください。
Conditionsの例
"Conditions": {
"StringEquals": [
{"ConditionKey": "aws:ResourceTag/Test", "ConditionValue": "true"},
{"ConditionKey": "aws:ResourceTag/Prod", "ConditionValue": "true"},
]
}
- 両方のタグが付与されているリソースのみバックアップされる
- どちらか片方のタグが付与されているリソースはバックアップされない
- 上記の例ではKey: Test、Value: True 及び Key: Prod、Value: true の両方のタグが付与されているリソースのみ対象になります。
1.Key: Test、Value: TrueとKey: Prod、Value: True両方付与されているリソースがバックアップされる
2.Key: Test、Value: Trueのみ付与されているリソースはバックアップされない
3.Key: Prod、Value: Trueのみ付与されているリソースはバックアップされない
ListOfTagsの例
"ListOfTags":[
{
"ConditionType":"StringEquals",
"ConditionKey":"Test",
"ConditionValue":"True"
},
{
"ConditionType":"StringEquals",
"ConditionKey":"Prod",
"ConditionValue":"True"
}
]
- どちらか片方のタグが付与されているリソースがバックアップされる
- 両方のタグが付与されているリソースもバックアップされる
- 上記の例ではKey: Test、Value: True または Key: Prod、Value: True のタグを持つリソースが対象となります。
1.Key: Test、Value: TrueとKey: Prod、Value: True両方付与されているリソースがバックアップされる
2.Key: Test、Value: Trueのみ付与されているリソースがバックアップされる
3.Key: Prod、Value: Trueのみ付与されているリソースがバックアップされる
条件が一つの場合のバックアップ対象リソース
Conditions と ListOfTags のどちらを使用しても、条件が一つの場合は、条件に一致するリソースのみがバックアップ対象となります。
Conditions の例
"Conditions": {
"StringEquals": [
{"ConditionKey": "aws:ResourceTag/Test", "ConditionValue": "true"},
]
}
この例では、Key: Test、Value: True に一致するリソースのみがバックアップ対象となります。
ListOfTags の例
"ListOfTags": [
{
"ConditionType": "StringEquals",
"ConditionKey": "Test",
"ConditionValue": "True"
}
]
この例でも、Key: Test、Value: True に一致するリソースのみがバックアップ対象となります。
まとめ
タグ指定バックアップを行う際は、複数タグを指定する場合は完全一致を求める場合は Conditions
を使用し、一部条件一致の場合は ListOfTags
を使用しましょう。