第一次使用Terraform(Azure)
安装
本文不提及安装步骤,请根据官方教程进行安装。以下是教程链接:
https://developer.hashicorp.com/terraform/tutorials/azure-get-started/install-cli
我在WSL环境的Ubuntu上进行了安装,并且按照教程指示成功地完成了安装,没有遇到任何错误。
创建服务主体
在本文中,我们将创建并使用适用于Terraform的服务主体。首先,我们将登录到Azure以创建服务主体。
az login
当您成功登录后,我们将创建一个服务Principal。
$ az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/<subscription-ID>" --display-name="sp-terraform-firsttime"
当创建完成后,将显示服务主体的ID等信息。将这些ID配置到环境变量中。
export ARM_CLIENT_ID="<APPID_VALUE>"
export ARM_CLIENT_SECRET="<PASSWORD_VALUE>"
export ARM_SUBSCRIPTION_ID="<SUBSCRIPTION_ID>"
export ARM_TENANT_ID="<TENANT_VALUE>"
在这里,选择了将其设置为环境变量的方法,但也可以选择将其写入配置文件。
如果选择将其写入配置文件,请将下面的提供程序块替换为以下区域中所述的提供者块。
provider "azurerm" {
features {}
subscription_id = "<azure_subscription_id>"
tenant_id = "<azure_subscription_tenant_id>"
client_id = "<service_principal_appid>"
client_secret = "<service_principal_password>"
}
以上為事前準備已完成。
在接下來的部分中,我們將在Azure上創建資源,同時創建配置文件。
创建资源组
首先,创建一个配置文件(main.tf),用于创建资源组。
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "rg" {
name = "rg-terraform-firsttime"
location = "Japan East"
}
资源组的名称将被设定为rg-terraform-firsttime。
一旦配置文件准备好,我们将首先进行terraform初始化。
$ terraform init
Initializing the backend...
Initializing provider plugins...
- Finding latest version of hashicorp/azurerm...
- Installing hashicorp/azurerm v3.49.0...
- Installed hashicorp/azurerm v3.49.0 (signed by HashiCorp)
当初始化完成后,在创建资源之前,请验证main.tf文件。
有相应的验证命令可供使用,执行该命令即可。
$ terraform validate
Success! The configuration is valid.
如果成功,将创建资源。
$ terraform apply
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
在途中,会被要求确认是否可以执行,输入”是”即可。
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
创建 Azure Functions
因为已经创建了资源组,所以现在要在创建的资源组中创建Azure函数。
我们将修改main.tf如下所示。
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "rg" {
name = "rg-terraform-firsttime"
location = "Japan East"
}
resource "azurerm_storage_account" "st" {
name = "storeterraformfirsttime"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
account_tier = "Standard"
account_replication_type = "LRS"
}
resource "azurerm_service_plan" "sp" {
name = "sp-terraform-firsttime"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
os_type = "Windows"
sku_name = "Y1"
}
resource "azurerm_windows_function_app" "func" {
name = "func-terraform-firsttime"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
storage_account_name = azurerm_storage_account.st.name
storage_account_access_key = azurerm_storage_account.st.primary_access_key
service_plan_id = azurerm_service_plan.sp.id
site_config {}
}
因为main.tf已经修复完成,所以将在Azure上创建资源。
在进行与之前相同的配置文件验证后,将开始创建资源。
$ terraform validate
Success! The configuration is valid.
$ terraform apply
最后我会在代码中添加运行时设置。
运行时设置需要在site_config代码块中进行配置。本次使用的是Nodejs。
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "rg" {
name = "rg-terraform-firsttime"
location = "Japan East"
}
resource "azurerm_storage_account" "st" {
name = "storeterraformfirsttime"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
account_tier = "Standard"
account_replication_type = "LRS"
}
resource "azurerm_service_plan" "sp" {
name = "sp-terraform-firsttime"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
os_type = "Windows"
sku_name = "Y1"
}
resource "azurerm_windows_function_app" "func" {
name = "func-terraform-firsttime"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
storage_account_name = azurerm_storage_account.st.name
storage_account_access_key = azurerm_storage_account.st.primary_access_key
service_plan_id = azurerm_service_plan.sp.id
site_config {
application_stack {
node_version = "~18"
}
}
}
上述即为函数应用程序的创建工作已完成。
删除资源
您可以使用下面的命令删除资源。
$ terraform destroy
不会贴画像,但可以在执行后通过门户确认资源已被删除。
如果希望创建其他资源
在这篇文章中,我们创建了资源组和函数,但如果您想创建其他资源,可以参考下面的文档。
https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs