先週の望月さんの「PrivateLinkをTerraformで構築したら理解が深まった話 #Azureリレー」に 引き続き、毎週水曜日に Azure 関連の記事を掲載する Azure リレー第16回を担当します。名古屋事業所の関です。
はじめに
Azureポータル画面やaz cliでリソースを削除する時に、間違ったリソースを消してしまわないかドキドキしたことはありませんか?
Terraformでapplyする時に、意図しないリソースが削除されてしまって悲しい思いをしてしまったことはありませんか?
ありますよね?
僕は偶によくあります。
今回は、そんなちょっぴり悲しい目に遭わないためにやっておいた方が良い設定を2つご紹介します。
リソースのロック
まず1つめは、Azureリソースのロックです。
Azureのリソースには予期しないリソースの削除を防ぐ仕組みとしてリソースのロック機能が用意されています。
CanNotDeleteロックをリソースあるいはリソースグループに適用することで、そのリソースまたはリソースグループを削除不可とすることができます。これにより意図せずリソースが削除されることを防ぐことができます。
コンピューティングリソースやデータストアなど削除された場合にサービスの継続性に影響が出るリソースには必ず設定しておくことをお勧めします。
参考)
変更されないようにリソースをロックする | Microsoft Docs
Azure Resource Manager: azurerm_management_lock - Terraform by HashiCorp
prevent_destroy
2つめは、Terraform lifecycleのprevent_destroy設定です。
Terraformでapplyする際、リソースの変更内容によってはリソースの再作成が必要となる場合がありますよね?
planの出力結果を見れば、どのリソースが追加・変更・削除されるのかを確認できるので、ちゃんと出力結果を見ていれば誤ってリソースを削除してしまうことはありません。
しかし、ふと少し気を抜いた瞬間にソースの再作成が実行されてしまい悲しみに包まれる、そんな経験をしたことはありませんか?
Terraformには予期しないリソースの削除を防ぐ仕組みとして、prevent_destroy設定が用意されています。
prevent_destroy設定を有効化することで、そのリソースに対するdestroy処理を不可とすることができます。これにより意図せずリソースが削除されることを防ぐことができます。
サービスの継続性に影響が出るリソースや再作成に時間を要するリソースに設定しておくことをお勧めします。
参考)
Resources - Configuration Language - Terraform by HashiCorp
おわりに
リソースを間違って削除しないように注意を払って作業をしていても、意図しないタイミングで削除してしまうことがあるかもしれません。
そんな時には、削除を防ぐこの2つの設定達を思い出してあげてください。