我将按照这种main
模块方法来处理不同的环境(每个环境都在自己的文件夹中,并使用根文件夹中的main
模块)(https://dev.to/piotrgwiazda/main-module-approach-for-handling-multiple-environments-in-terraform-1oln),但很难理解这将如何与环境之间的共享组件一起工作?示例是VNET。我在文档中列出了确切的结构,并在第一个环境已经应用后尝试应用第二个环境时遇到问题。共享资源不是第二个环境的TF状态,因此试图重新创建。如何使用这种方法拥有两个独立的环境,但却拥有共享资源?下面是我的环境x1c 0d1x,我将其应用于terraform -chdir="./clients/client1" apply
,下面是main.tf
和client1.tf
模块的一部分,它只是部署所有资源。client1.tf
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "3.32.0"
}
tfe = {
source = "hashicorp/tfe"
version = ">=0.43.0"
}
}
backend "azurerm" {
resource_group_name = "utility-rg"
storage_account_name = "XXXXXX"
container_name = "tfstate"
key = "terraform.client1.tfstate"
}
}
provider "azurerm" {
features {}
}
module "main" {
source = "../../main"
client_name = "client1"
app_subnet_prefix = "10.11.1.0/24"
location = "eastus"
}
main.tf1
resource "azurerm_resource_group" "main" {
name = var.client_name
location = var.location
}
module "application" {
source = "../modules/app-service"
resource_group = azurerm_resource_group.main.name
client_name = var.client_name
location = var.location
service_plan_id = module.shared.app_service_plan_id
database_url = module.database.database_url
database_username = "@Microsoft.KeyVault(SecretUri=${module.key-vault.vault_uri}secrets/database-username)"
database_password = "@Microsoft.KeyVault(SecretUri=${module.key-vault.vault_uri}secrets/database-password)"
azure_application_insights_instrumentation_key = module.application-insights.azure_application_insights_instrumentation_key
vault_id = module.key-vault.vault_id
azure_storage_account_name = module.storage-blob.azurerm_storage_account_name
azure_storage_blob_endpoint = module.storage-blob.azurerm_storage_blob_endpoint
azure_storage_account_key = "@Microsoft.KeyVault(SecretUri=${module.key-vault.vault_uri}secrets/storage-account-key)"
subnet_id = module.network.app_subnet_id
}
module "utilty" {
source = "../modules/utility"
location = var.location
rg_name = "utility-rg"
}
问题是需要在shared
文件夹中的环境之间共享的资源。我假设基于此语句(https://dev.to/piotrgwiazda/main-module-approach-for-handling-multiple-environments-in-terraform-1oln#:~:text=Any%20shared%20remote%20resources%20will%20be%20included%20here.),我可以以某种方式添加一些模块,这些模块将在环境之间共享并且仍然可以工作。
1条答案
按热度按时间waxmsbnn1#
如何使用这种方法拥有两个独立的环境,但却共享资源?
你不能一次完成。你必须分两个阶段完成。
1.使用TF部署所有共享资源,并输出其ID。
1.其次,将这些资源的ID作为输入参数传递给负责这两个环境的两个TF代码库。
您可以在环境代码中使用数据源查询共享资源的详细信息。