2
votes
efx/
...


    aws_account/
                nonprod/
                          account-variables.tf
                          dev/
                              account-variables.tf
                              common.tf
                              app1.tf
                              app2.tf
                              app3.tf 
                              ...
    modules/
            tf_efxstack_app1
            tf_efxstack_app2
            tf_efxstack_app3
            ...

In a given environment (dev in the example above), we have multiple modules (app1, app2, app3, etc.) which are based on individual applications we are running in the infrastructure.

I am trying to update the state of one module at a time (e.g. app1.tf). I am not sure how I can do this.

Use Case: I would like only one of the module's LC to be updated to use the latest AMI or security group.

I tried the -target command in terrafrom, but this does not seem to work because it does not check the terraform remote state file.

terraform plan -target=app1.tf
terraform apply -target=app1.tf

Therefor, no changes take place. I believe this is a bug with terraform.

Any ideas how I can accomplish this?

1

1 Answers

8
votes

Terraform's -target should be for exceptional use cases only and you should really know what you're doing when you use it. If you genuinely need to regularly target different parts at a time then you should separate your applications into different directory so you can easily apply the whole directory at a time.

This might mean you need to use data sources or rethink the structure of things a bit more but means you also limit the blast radius of any single Terraform action which is always useful.