如何使用Azure Terraform来快速构建Azure SQL Database
更新内容:更新了Terraform的初始化步骤
在Azure Terraform中,资源可以很快创建。
如前所述,利用类似Azure的云环境可以实现快速基础架构的建设,
但通过与Terraform同时使用,可以更加快速且可靠地进行建设。
构建演示:事先准备
这次我们将采用在开发用电脑上执行Azure PowerShell/Azure Terraform的方式进行。如果使用CloudShell的话,则设置的位置会有所不同。
使用AzureCLI进行身份验证是采用的身份验证方法。请参考此链接:https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/azure_cli
建议安装PowerShell 7。
安装 Azure PowerShell。
https://github.com/PowerShell/PowerShell/releases
请参考以下步骤:
https://docs.microsoft.com/zh-cn/powershell/scripting/install/installing-powershell-core-on-windows
安装Azure Cli-登录。
运行以下命令。进行安装和登录。
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli-windows?tabs=azure-powershell
### インストール
Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'; rm .\AzureCLI.msi
# CLI更新
az upgrade
# ログイン
az login
※登录后,请确认 TenantId。
将Azure租户信息添加到环境变量中。
# Azureポータルで確認できる サブスクリプション ID
[System.Environment]::SetEnvironmentVariable("ARM_SUBSCRIPTION_ID", "*****", "User");
# az login または az account show で確認できる TENANT_ID
[System.Environment]::SetEnvironmentVariable("ARM_TENANT_ID", "*****", "User");
准备Terraform
从以下网站上下载Terraform.exe,并将其放置在任意文件夹中(本例中为C:\terraform)
https://www.terraform.io/downloads.html
在放置的文件夹中设置环境变量/路径,以便在任何文件夹中都可以执行terraform命令。
在任何文件夹中执行以下Powershell脚本。
如果无法使用Powershell,则可以手动或使用bat文件设置环境变量。
# TerraFormのパスを通す。実際に配置しているパスを設定すること。
[System.Environment]::SetEnvironmentVariable("Path", "C:\terraform", "User");
选项:如果使用服务负责人进行身份验证的情况下。
在使用带有客户端秘钥的服务主体进行身份验证时,
还需要注册以下内容。
https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/service_principal_client_secret
# Azure環境変数を設定。****は実際の値に置き換えてください。
# 作成したAzure ADのアプリケーション (クライアント) ID(ポータル_証明書とシークレットで確認)
[System.Environment]::SetEnvironmentVariable("ARM_CLIENT_ID", "****-****-****-****-****", "User");
# 作成したAzure ADのシークレット(ポータル_証明書とシークレット>クライアント シークレット)
[System.Environment]::SetEnvironmentVariable("ARM_CLIENT_SECRET", "********************", "User");
azurerm的Terraform提供者的初始化
请将下面的tf文件放置好,并执行terraform init。
https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs
terraform {
# 本体のバージョン指定
required_version = "~> 0.14"
required_providers {
# azurermのバージョン指定
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.43.0"
}
}
}
provider "azurerm" {
# featuresは何も設定しない場合も、記入はしなければならない。
features {}
# 環境変数に埋め込まない場合、ここに記載する
# ARM_SUBSCRIPTION_ID=*******
# ARM_TENANT_ID=*******
}
数据库构建演示
这次将一起构建以下三个点:
– 资源组
– SQL服务器(包括防火墙规则)
– SQL数据库
创建tf文件
首先,需要创建一个定义了在Azure中构建资源信息的tf文件。
# このファイルにインフラ構造を定義。
# 事前に環境変数に仕込んでいない場合はsubscription_id、client_id、client_secret、tenant_idを設定。
resource "azurerm_resource_group" "Examples" {
name = "${local.resource_group_name}"
location = "${local.location}"
tags = {
environment = "${local.tags_environment_common}"
}
}
resource "azurerm_sql_server" "Examples" {
name = "${local.sql_server_name}"
administrator_login = "${local.sql_server_login}"
administrator_login_password = "${local.sql_server_login_password}"
version = "${local.sql_server_version}"
resource_group_name = "${azurerm_resource_group.Examples.name}"
location = "${azurerm_resource_group.Examples.location}"
tags = {
environment = "${local.tags_environment_common}"
}
}
resource "azurerm_sql_firewall_rule" "Examples" {
name = "${local.firewall_rule_name}"
start_ip_address = "${local.start_ip_address}"
end_ip_address = "${local.end_ip_address}"
resource_group_name = "${azurerm_resource_group.Examples.name}"
server_name = "${azurerm_sql_server.Examples.name}"
}
resource "azurerm_sql_database" "Examples" {
name = "${local.sql_database_name}"
edition = "${local.sql_database_edition}"
resource_group_name = "${azurerm_resource_group.Examples.name}"
location = "${azurerm_resource_group.Examples.location}"
server_name = "${azurerm_sql_server.Examples.name}"
tags = {
environment = "${local.tags_environment}"
}
}
locals {
# main.tfで定義した変数群を設定。
# common
resource_group_name = "Example"
location = "Japan East"
tags_environment_common = "common"
# SQLServer_config
sql_server_name = "example-db"
sql_server_login = "Example"
sql_server_login_password = "Example____!"
sql_server_version = "12.0"
# SQLFirewall_config
firewall_rule_name = "Example"
start_ip_address = "192.168.10.10"
end_ip_address = "${local.start_ip_address}"
# SQLDatabase_config
sql_database_name = "Example"
sql_database_edition = "Basic"
tags_environment = "production"
}
创建资源
您可以按照以下3个步骤进行操作。 (Ní gè .)
移动到存放tf文件的位置。
通过terraform plan命令确认创建计划。
通过terraform apply -auto-approve命令创建资源。请注意,已经在计划中确认过,因此在应用时无需再次确认。
#terraformファイル(.tf)の格納フォルダパス
${TFFile_Path} = ''
cd ${TFFile_Path}
#リソースの作成をterraform apply -auto-approve で行う。確認はterraform planで行う。
terraform plan
#terraform apply -auto-approve
资源销毁
您可以按照相同的步骤来创建,确认破坏计划可以通过计划-销毁来实施,然后使用销毁命令完成破坏。
#terraformファイル(.tf)の格納フォルダパス
${TFFile_Path} = ''
cd ${TFFile_Path}
#リソースの破棄をterraform destroy -auto-approve で行う。
#確認はterraform plan -destroyで行う。
terraform plan -destroy
#terraform destroy -auto-approve