Terraform 基于Azure上使用模块(二)

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

四、创建模块

在Terraform中创建模块非常容易;我们所需要的只是输入变量和资源的标准配置。在该示例中,我们将为存储帐户创建我们的第一个模块。

我们将首先创建模块文件夹,然后在另一个Terraform配置中引用该模块。我们将首先使用以下内容的文件夹层次结构:

图片.png

复制main.tf和Variables.tf配置的代码并创建每个文件。我们将根据上面的目录结构放置每个文件。

Variables.tf文件包含我们的输入变量。输入变量是我们的模块接受自定义其部署的参数。对于我们的存储帐户模块,我们可以通过接收存储帐户名称,位置和资源组的输入来保持如此简单:

Variables.tf

1
2
3
4
5
6
7
8
9
10
11
12
13
ini复制代码variable "saname" {
type = string
description = "Name of storage account"
}
variable "rgname" {
type = string
description = "Name of resource group"
}
variable "location" {
type = string
description = "Azure location of storage account environment"
default = "westus2"
}

main.tf文件包含用于创建存储帐户的代码。在该示例中,我们只有一小一组用于我们的存储帐户的参数,以保持简单。

但是,在实际生产环境中,我们可能希望实现网络策略以及日志记录选项。然后,我们可以使用我们的模块来定义要配置所有存储帐户的“标准”,以便配置所有存储帐户:

main.tf

1
2
3
4
5
6
7
8
ini复制代码resource "azurerm_storage_account" "sa" {
name = var.saname
resource_group_name = var.rgname
location = var.location
account_tier = "Standard"
account_replication_type = "GRS"

}

接下来,我们将在TerraformDemo文件夹的根目录中创建另一个Main.TF文件,该文件将引用我们新创建的存储帐户模块目录:

图片.png

在根模块上的main.tf文件,我们去调用子模块。在块内部,我们需要通过声明源参数来引用我们使用的模块。在此示例中,我们仅从模块子文件夹中引用模块,因此路径为./modules/storage-Account

我们还需要为您的存储帐户模块提供任何所需的可变输入。这些是我们在存储帐户模块目录中的Variables.tf文件中创建的相同变量:

根模块main.tf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ini复制代码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
}

在我们的main.tf文件中,我们还包括Azurerm提供者块。最好的做法是在根模块文件处指定提供程序;这样,调用的所有模块将继承此提供商。在创建模块时,尽量不尽可能地在模块本身内的提供程序。这可能导致进一步的复杂性并使模块很脆弱。


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

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%