简体   繁体   中英

Terraform - Cross provider resource config inheritance

I only recently started figuring out how Terraform works, but I have a very specific problem that I need to address and I cannot find an easy way to do it so far. I would like to setup terraform config in such a way, that there is a shared part of configuration between two different providers, in my case AWS and Docker. For example, if I have a Postgres database and a VM with nginx, I would like to have some sort of "base" resource, which I can "inherit" from in more detailed Docker and AWS setups. I imagine I can use variables for that, but that will not work if I have to add some configuration lines to those containers, I will have to add a variable description and extra line in 2 module configurations, for Docker and AWS separately. Is there a way to do it "OOP" style, with some sort of inheritance?

There is a way to do it but not in the programming language type of thinking. By using resource arguments and attributes you can create an implicit dependency between resources, meaning that if one is updated the second should reflect that change as well [1]. An example on how to reference attributes from a resource that is created can be found in [2].

There is also an explicit type of dependency and it is defined with the depends_on meta-argument [3]. With it, you are telling Terraform (and the reader of the code) that something has to happen prior to creating the resource that has the depends_on block defined.

If you want to use modules there is also a way to pass the information between them using output values [4]. Note that output values can be used even without using modules.

Additionally, if you are more inclined to work with infrastructure using programming languages, there is also Terraform CDK [5].


[1] https://www.terraform.io/language/resources/behavior#resource-dependencies

[2] https://www.terraform.io/language/expressions/references#references-to-resource-attributes

[3] https://www.terraform.io/language/meta-arguments/depends_on

[4] https://www.terraform.io/language/values/outputs

[5] https://www.terraform.io/cdktf

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM