Terraform | 基于Azure上使用模块(三)

1,777 阅读2分钟

这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战

五、使用模块部署和输出

当我们在TerraformDemo目录中运行我们的Terraform init时,我们可以看到模块初始化。

Initializing modules...
- storage_account in modules/storage-account

Initializing the backend...

Initializing provider plugins...
- Checking for available provider plugins...
- Downloading plugin for provider "azurerm" (hashicorp/azurerm) 1.38.0...

当我们运行terraform apply时,它将引用存储帐户模块,并使用模块输入中声明的设置创建我们的存储帐户。此外,我们可以在具有不同参数字符串的配置中多次使用相同的模块。

provider "azurerm" {
  version = "1.38.0"
}

#create resource group
resource "azurerm_resource_group" "rg" {
    name     = "rg-MyFirstTerraform"
    location = "westus"
}

#Create Storage Account
module "storage_account" {
  source    = "./modules/storage-account"

  saname    = "statfdemosa234"
  rgname    = azurerm_resource_group.rg.name
  location  = azurerm_resource_group.rg.location
}

#Create Storage Account
module "storage_account2" {
  source    = "./modules/storage-account"

  saname    = "statfdemosa241"
  rgname    = azurerm_resource_group.rg.name
  location  = azurerm_resource_group.rg.location
}

我们刚刚创建了第一个模块。此模块非常简单,但是,对于使用加密磁盘部署虚拟机的更复杂的场景,模块可以完美地抽象几个输入的所有复杂性。

可变输入不是模块的唯一重要部分。产出同样重要。它们允许我们将信息传输到模块,以便它们可以彼此构建。为模块创建输出与常规Terraform配置相同。

创建一个输出.TF文件并使用输出块声明输出值。下面我们正在为我们的存储帐户创建一个输出块主访问键,所以我们可以在创建它之后将其存储在Azure Key Vault中:

output "primary_key" {
    description = "The primary access key for the storage account"
    value = azurerm_storage_account.sa.primary_access_key
    sensitive   = true
}

另请注意,我们正在使用敏感的参数来指定我们的存储帐户的Primary_Access_Key输出包含敏感数据。Terraform将把这些信息视为机密,并在运行Terraform时将其从控制台显示隐藏。

这不会保护Terraform的状态文件中的值;它仍然是清晰的文本,这就是为什么在真实的生产方案中,我们希望使用远程状态。

要在另一个资源中使用模块的输出值,请通过在模块中引用它来指定值,例子如下:

#<modulename> <outputname>
resource "azurerm_key_vault_secret" "stasecret" {
  name         = "statfdemosa234-secret"
  value        = module.storage_account.primary_key
  key_vault_id = azurerm_key_vault.kv.id

}

少年,没看够?点击石头的主页,随便点点看看,说不定有惊喜呢?欢迎支持点赞/关注/评论,有你们的支持是我更文最大的动力,多谢啦!