CloudFormation、便利ですよね。もちろんコード化できるのも良い点なのですが、リソースの消し忘れが防げる点もコスト面においてはありがたいです。
今回は、AWS Backupを使用したバックアップを構成する際にAWS::Backup::BackupSelectionのドキュメントを読みながら「あー、こんな感じでやればいいのね」とたかをくくってやってみたらものの見事にハマった、という短編物語です。
あらすじ
やりたかったこと
文章で書くと長くなりそうなので箇条書きでまとめてみました。
- AWS BackupをCloudFormationで構成する
- 下記の要件を満たすように割り当てリソースの絞り込みを行う
- リソースタイプによる絞り込みは行わない
- タグによる絞り込みを行う
- 絞り込みに使うタグは複数利用し、AND条件で評価させる
どうするべきだったのか
こちらも同じように箇条書きでまとめます。
お急ぎの方はここまでお読みいただければだいじょうぶです。
- リソースの選択は
AWS::Backup::BackupSelectionで作成する - 割り当てリソースの絞り込みにあたり、複数のタグをAND条件で評価しつつリソースタイプの絞り込みを行わない場合は、下記のように構成する
$.BackupSelection.Conditions[]:絞り込みに使うタグを複数記述する$.BackupSelection.Resources[]:唯一の要素として"*"を指定する
本編
ここからは実際にハマった流れをまとめていきます。
1stトライ:Conditionsのみでトライ
ドキュメントを読んだところ、$.BackupSelection.Conditionsというエレメントがありました。これを使ってみます。
この時はまだ、Resourcesを使う、という思考はありませんでした。
|
1 2 3 4 5 6 7 8 9 |
"BackupSelection": { "Conditions": { "StringEquals": [ { "ConditionKey": "AWSBackup", "ConditionValue": "TRUE" }, { "ConditionKey": "Environment", "ConditionValue": { "Ref": "Environment" } }, { "ConditionKey": "BackupCycle", "ConditionValue": "Daily" } ] }, } |
該当部分を上記の構成で組んで流してみたところ、こんなエラーが返ってきました。
|
1 |
Invalid backup selection. Either 'ListOfTags' or 'Resources' section must be non-empty. |
エラーメッセージ曰く「ListOfTagsもしくはResourcesを設定しなさい」とのことです。
でも、リソースタイプは指定したくないし、ListOfTagsは複数のタグを指定した際にOR条件で評価されるために使えない…。いったん、Resourcesを併用する形で組んでみます。
2ndトライ:ConditionsとResourcesを併用、ただしEC2インスタンスで絞り込み
当初の目標からはいったん遠ざかりますが、Resourcesを併用してみます。対象リソースとして、すべてのEC2インスタンスを含むARNを指定します。
こちらは過去に実績がありましたので、問題なく構成できるだろう、という見込みはありました。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
"BackupSelection": { "Conditions": { "StringEquals": [ { "ConditionKey": "AWSBackup", "ConditionValue": "TRUE" }, { "ConditionKey": "Environment", "ConditionValue": { "Ref": "Environment" } }, { "ConditionKey": "BackupCycle", "ConditionValue": "Daily" } ] }, "Resources": [ { "Fn::Sub": "arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:instance/*" } ] } |
これは通りました。ということは、ConditionsとResourcesを併用するのはあってそうです。
あとは、Resourcesを指定しつつ絞り込まないことができればいいんですが…。
3rdトライ:ConditionsとResourcesを併用しつつ、リソースタイプの絞り込みを行わない
いろいろ調べていたら、こんなドキュメントをみつけました。
例: マイアカウント内のすべてのリソースを選択する
そうそうこれですよ、自分が欲しかったのは(笑)
早速適用してみます。
|
1 2 3 4 5 6 7 8 9 10 |
"BackupSelection": { "Conditions": { "StringEquals": [ { "ConditionKey": "AWSBackup", "ConditionValue": "TRUE" }, { "ConditionKey": "Environment", "ConditionValue": { "Ref": "Environment" } }, { "ConditionKey": "BackupCycle", "ConditionValue": "Daily" } ] }, "Resources": [ "*" ] } |
やっと期待通りの構成ができました。
コンソールから見ても、ちゃんと指定した構成になっていますね。
遠回りだったことに気づく
よくよく考えたら、いったんコンソールから手動設定してその結果を見てみればいいんじゃないかということに気がついたので、さっそく実践してみます。
設定中のコンソールはこのような設定状態としました。
できた結果は...こちら!
「すべてのリソースタイプを含める」を選択すると、作成後の確認画面ではちゃんと「*」って出てましたね。
最初からやってればよかったです…。
さいごに
設定方法が一回わかってしまえば単純な話ですし、AWSはドキュメントも充実しているのでどこかには書いてあるだろうと思っていましたが、その情報にたどり着くのに思ったよりも時間がかかった、というお話でした。
コンソールは非常に便利ですが、不要なリソースの消し忘れだけはお忘れなく!
投稿者プロフィール
- 根っこはインフラ屋な古いおじさん。
最新の投稿
AWS2025年12月4日CloudFormationのドリフト認識変更セットを使ってみた(続編)
AWS2025年11月27日CloudFormationのドリフト認識変更セットを使ってみた
AWS2025年11月21日【短篇】AWSバックアップのタグによるリソース割り当てで軽くはまった
AWS2025年11月17日ALBでトラストストアを使ってみた



