Terraform
Meta-arguments
Meta-arguments are a class of arguments built into the Terraform configuration language that control how Terraform creates and manages your infrastructure. You can use meta-arguments in any type of resource. You can also use most meta-arguments in module blocks.
The provider developer determines resource-specific arguments, but all resources support meta-arguments that let you manage resources' infrastructure lifecycle, including destruction behavior, preventing destruction, and establishing dependencies between resources. Terraform provides the following meta-arguments.
depends_on
The depends_on meta-argument instructs Terraform to complete all actions on the dependency object, including read operations, before performing actions on the object declaring the dependency. Use the depends_on argument to explicitly set the order in which Terraform creates resources. Refer to the depends_on reference for details.
Hands-on: Complete the Create resource dependencies tutorial to learn how to declare dependencies.
count
By default, Terraform configures one infrastructure object for each resource, module, and ephemeral block. Terraform also creates single instances of a module per module block. You can add the count argument to resource, module, and ephemeral blocks to create and manage multiple instances of each without writing a separate block for each instance. Refer to the count reference for details.
Hands-on: Complete the Manage similar resources with count tutorial to learn how to create multiple instances of a resource.
for_each
By default, Terraform configures one infrastructure object for each resource, module, and ephemeral block. You can add the for_each block to your resource, data, module, and ephemeral blocks to create and manage several similar objects, such as a fixed pool of compute instances, without writing a separate block for each instance. Refer to the for_each reference for details.
Hands-on: Complete the Manage similar resources with for each tutorial to learn how to create multiple instances of a resource.
lifecycle
The lifecycle block accepts a rule that customizes how Terraform performs the lifecycle stages for each resource. Support for each lifecycle rule varies across Terraform configuration blocks. Refer to the lifecycle reference for details. 
Hands-on: Complete the Manage resource lifecycle tutorial to learn how to manage the lifecycle of your infrastructure resources.
provider
By default, Terraform determines the local name of the provider from the first word in the resource type and uses that provider's default configuration to create the resource. You can add multiple provider blocks to your configuration and use the provider argument to a resource definition to specify which provider it should use. Refer to the provider reference for details.
providers
By default, child modules inherit the default provider configurations of their parent module. You can specify an alternate provider configuration in the module block using the providers argument. The providers argument instructs Terraform to use the reference provider configuration to create the module resources. Refer to the providers reference for details.