I would like to run terraform only for a specific resource

Terraform

Terraform Problem Overview


It takes a long time to run terraform and wait. So I would like to run it to exclude rds that takes the longest time to excute or I would like to run only ec2 resource. Is there a way to do such things in terraform?

Terraform Solutions


Solution 1 - Terraform

You can use -target=resource like this:

terraform plan -target=module.mymodule.aws_instance.myinstance
terraform apply -target=module.mymodule.aws_instance.myinstance

or

terraform plan -target=aws_instance.myinstance
terraform apply -target=aws_instance.myinstance

Disclaimer: Before downvoting the answer, please note that he actually asked to either "exclude" or "run only ec2 resource". And after all this time the exclude feature request is still open in the terraform repo.

Solution 2 - Terraform

Adding to Julio's answer, you could target multiple resources in the following manner:

terraform init
terraform plan -target=resource_type1.resource_name1 -target=resource_type2.resource_name1
terraform apply -target=resource_type1.resource_name1 -target=resource_type2.resource_name1

Solution 3 - Terraform

> I would like to run it to exclude rds that takes the longest time

Terraform currently does not support exclusion of resources (aka. inverse targeting).

Issue #2253: "feature request: inverse targeting / exclude"

(Thanks for the link Julio Daniel Reyes.)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnegabaroView Question on Stackoverflow
Solution 1 - TerraformJulio Daniel ReyesView Answer on Stackoverflow
Solution 2 - TerraformSaurabhView Answer on Stackoverflow
Solution 3 - Terraformuser1338062View Answer on Stackoverflow