Terraformで特定のリソースを除外して適用する方法について、標準的な terraform apply コマンドには直接的にリソースを除外するオプションが存在しません。ただし、いくつかの間接的な方法でそれを実現することが可能です。
方法1: terraform stateコマンドを使用する
一時的にリソースをTerraformの状態から除外する方法です。実際には、状態からリソースを一時的に削除し、後で再度インポートするという手段になります。
# 対象リソースを一時的に状態から削除する
terraform state rm <resource_address>
# 残りのリソースを適用
terraform apply
# 削除したリソースを再度インポート
terraform import <resource_address> <resource_ID>
上記の方法は、一時的にリソースを管理下から外す方法であり、意図しない副作用を引き起こす可能性があるため注意が必要です。
方法2: リソース定義をコメントアウトする
一時的に特定のリソースを管理対象外にするために、設定ファイルの該当部分をコメントアウトする方法です。
- Terraform設定ファイル(例:
main.tf)から特定のリソース定義をコメントアウトする。 terraform applyコマンドを実行して、コメントアウトされたリソース以外を適用する。- コメントアウトを元に戻した後、再度
terraform applyを実行する。
# コメントアウト例:
# resource "aws_instance" "example" {
# ami = "ami-123456"
# instance_type = "t2.micro"
# }
方法3: Terraform Planの手動編集
terraform plan の出力を活用して、手動で変更を適用しないリソースを確認できます。適用の際に不要なリソースの変更部分を除外するように手動でインタラクティブに実施します。
terraform plan -out=plan.out
出力ファイル plan.out を確認し、必要な箇所を編集します(ただし、これは高度な方法であり容易ではない)。
terraform apply plan.out
方法4: 条件分岐を利用してリソースを制御
変数と条件分岐を使用していくつかのリソースをオンまたはオフにすることができます。
variable "create_instance" {
description = "Whether to create the instance"
default = true
}
resource "aws_instance" "example" {
count = var.create_instance ? 1 : 0
ami = "ami-123456"
instance_type = "t2.micro"
}
実行時に変数をオフにする場合:
terraform apply -var="create_instance=false"
特定のリソースを明示的に除外するために上記のような間接的な方法を活用することで、Terraformの柔軟なリソース管理が可能となります。

コメント