Для ошибки
Ошибка: ссылка на необъявленный модуль в modules / site_recovery / main.tf
Это означает, что указанный модуль не объявлен в вызывающем модуле. ,
Вызов модуля означает включение содержимого этого модуля в конфигурацию с указанием значений c для его входных переменных. Модули вызываются из других модулей с использованием блоков module
. Вам нужно добавить блок module
в файл конфигурации .tf
, в который вы хотите вызвать этот модуль. См. вызов дочернего модуля .
Кажется, что нет никаких блоков модулей, объявленных в восстановлении вашего подузла и вычисляющих main.tf
, поэтому вы не можете вызывать модули ресурсов, такие как module.resource.azurerm_resource_group.primary.location
, module.resource.azurerm_managed_disk.primary.id
и т. Д.
В качестве структуры каталогов вы также можете использовать входную переменную для вызова модуля из другого выхода модуля. Правильное выражение module.<MODULE NAME>.<OUTPUT NAME>
.
Для вывода идентификатора виртуальной машины и идентификатора управляемых дисков из вычислительного модуля, например:
output "azurerm_vm_id" {
value = azurerm_virtual_machine.primary.id
}
output "primary_os_disk_id" {
value = azurerm_virtual_machine.primary.storage_os_disk[0].managed_disk_id
}
main.tf
в каталоге root
module "vm" {
source = "./modules/vm"
vm_name = "backendvm-primary"
vm_size = "standard_d2s_v3"
vm_storage_od_disk_name = "backend-vm-os-disk-primary"
computer_name = "backendserver"
username = "terraform"
nic_ids = module.network.primary_nic_id
resource_group_name = module.resource.rg_name
location = module.resource.rg_location
#ssh_key_path = "/home/terraform/.ssh/authorized_keys"
#keys_data = "~/.ssh/id_rsa.pub"
}
module "site_recovery" {
source = "./modules/site_recovery"
resource_group_name = module.resource.rg_name
location = module.resource.rg_location
sec_resource_group = "nancy_secondary"
sec_location = "eastus"
recovery_vault_name = "recovery-vault"
primary_fabric = "devops_primary-fabric"
seconday_fabric = "devops_secondary-fabric"
primary_container = "primary-protection-container"
secondary_container = "secondary-protection-container"
policy_name = "policy"
container_mapping = "container-mapping"
replicated_vm = "backendvm-replication"
source_vm_id = module.vm.azurerm_vm_id
primary_os_disk_id = module.vm.primary_os_disk_id
}
Site Recovery main.tf file
#Create Site Recovery Replicated VM
resource "azurerm_site_recovery_replicated_vm" "vm-replication" {
depends_on = [var.vm_depends_on]
name = var.replicated_vm
resource_group_name = azurerm_resource_group.secondary.name
recovery_vault_name = azurerm_recovery_services_vault.vault.name
source_recovery_fabric_name = azurerm_site_recovery_fabric.primary.name
source_vm_id = var.source_vm_id
recovery_replication_policy_id = azurerm_site_recovery_replication_policy.policy.id
source_recovery_protection_container_name = azurerm_site_recovery_protection_container.primary.name
target_resource_group_id = azurerm_resource_group.secondary.id
target_recovery_fabric_id = azurerm_site_recovery_fabric.secondary.id
target_recovery_protection_container_id = azurerm_site_recovery_protection_container.secondary.id
managed_disk {
disk_id = var.primary_os_disk_id
staging_storage_account_id = azurerm_storage_account.primary.id
target_resource_group_id = azurerm_resource_group.secondary.id
target_disk_type = "Premium_LRS"
target_replica_disk_type = "Premium_LRS"
}
}
На самом деле, в блоке azurerm_site_recovery_replicated_vm
существует неявная зависимость source_vm_id
, он отвечает на источник Azure VM. Если вы хотите использовать terraform depends_on
, мета-аргумент принимает список ресурсов с модулем. Вы можете обратиться к этой теме - Terraform depen_on с модулями и этого документа .