すでに数十の AWS インスタンスが本番環境で実行されており、Terraform を使用して次のインスタンスの作成を自動化したいと考えています。Terraform は不変パターンの実践に役立つと読みました。ただし、すでに実行中のインスタンスを破壊するリスクは避けたいです。Terraform はこれを回避するための保護機能を提供していますか?
答え1
はい、使用してくださいterraform plan
操作の前に、実際に実行することなく、変更内容の完全なリストを出力します。実行中いずれかをご検討ください。
答え2
Terraform にはこれに対する明示的な保護手段はありませんが、その一般的な設計により、既存のリソースに触れることがすでに防止されています。
通常、すべての Terraform リソースには何らかのプライマリ識別子があります (例: EC2 の場合はインスタンス ID、S3 の場合はバケット名)。また、すべての Terraform 実行では、a) 新しいリソースの作成、または b) Terraform 制御下にある既存のリソースの更新/削除のみを行う必要があります。
a) の場合、ID がすでに存在するとエラーが発生し、Terraform は何も作成できません (EC2 では発生しませんが、S3 バケットでは発生する可能性があります)。これは、Terraform コードを修正する機会です。
b) の場合、Terraform は「独自の」リソースのみで動作し、アカウントの既存のコンテンツはそのまま残ります。
リソースを置き換えたり名前を変更したりすることで、Terraform に意図的に (または誤って) 干渉して、物事を壊してしまう可能性がありますが、「通常の」使用では、このような問題は発生していません。
答え3
リソースにライフサイクル設定ブロックを追加することができます(Terraform リソース構成を参照); 具体的には以下を使用します。
lifecycle {
prevent_destroy = true
}
プランにリソースの破棄アクションが含まれている場合、エラー メッセージが返されます。