Terraformのplanの対象を絞る(-targetオプション)
-targetオプションの使い方
Terraformのコードが大規模になってくると修正時にterraform plan
コマンドを実行すると時間がかかるようになってくる。
Terraformのterraform plan
コマンドで-target
オプションを指定すると、指定したリソースの変更のみを確認できる。
一部の変更のみを確認するので高速に実行できる。
-target
オプションにはリソース名を指定して以下のように実行する。
$ terraform plan -target=リソース名
リソース名はterraform state list
コマンドで確認できる。
参考: terraform show, terraform state show, terraform state listでリソースの情報を確認する
-targetオプションの指定例
例えば以下のリソースの場合。
resource "aws_vpc" "vpc" {
cidr_block = "10.0.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
}
リソース名はaws_vpc.vpc
なので、以下のように-target
オプションを指定してterraform plan
を実行する。
$ terraform plan -target=aws_vpc.vpc
依存するリソースがあればそのリソースも一緒に確認される。
-target
オプション指定時はメッセージの最後に以下のような警告が表示される。
╷
│ Warning: Resource targeting is in effect
│
│ You are creating a plan with the -target option, which means that the result of this plan may not represent all of the changes
│ requested by the current configuration.
│
│ The -target option is not for routine use, and is provided only for exceptional situations such as recovering from errors or
│ mistakes, or when Terraform specifically suggests to use it as part of an error message.
╵
あくまでも一部しか変更を確認できないので、本番環境への適用時の確認では使わないようにする。
複数リソースの指定
-target
オプションで複数のリソースを指定するには以下のように複数の-target
オプションを指定する。
$ terraform plan -target=リソース名 -target=リソース名 ...
moduleの指定
-target
オプションでmoduleを指定すると、そのmodule以下のリソースが対象となる。
$ terraform plan -target=module.モジュール名
例えばmodules/sample
ディレクトリに以下のようなモジュールがある場合。
resource "aws_s3_bucket" "test_bucket" {
bucket = "test-bucket-000000000000"
}
resource "aws_s3_bucket_server_side_encryption_configuration" "test_bucket" {
bucket = aws_s3_bucket.test_bucket.bucket
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
resource "aws_s3_bucket_public_access_block" "test_bucket" {
bucket = aws_s3_bucket.test_bucket.bucket
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
大元のmain.tf
で上記モジュールを読み込む。
module "sample" {
source = "./modules/sample"
}
このとき-target
オプションでmodule.sample
を指定すると、modules/sample
ディレクトリ以下のリソースが対象となる。
$ terraform plan -target=module.sample
module.sample
リソースの中でもws_s3_bucket_public_access_block.test_bucket
のみを確認したい場合は以下のように指定する。
$ terraform plan -target=module.sample.aws_s3_bucket_public_access_block.test_bucket