Terraformを利用したAzure SQL Databaseの構築
2019-10-18
TerraformでAzure SQL Databaseを構築した際の手順を簡単にメモしておきます。
要件
・Terraformを利用してSQL Server / SQL Databaseを作成する
・東日本リージョンをプライマリ、西日本をセカンダリとする
・東西でgeoレプリケーション、フェールオーバグループを構成する
・Terraformのバージョンはv0.12.11を利用
参考
・azurerm_sql_server
・azurerm_sql_failover_group
・azurerm_sql_firewall_rule
Terraformのソースコード
まずSQL Serverの作成を行います。
resource "azurerm_sql_server" "sql01_je" {
name = "${var.sql_server_name}je"
resource_group_name = "${var.resource_group_name}je"
location = "${var.primary_location}"
version = "12.0"
administrator_login = "${var.admin_username}"
administrator_login_password = "${var.admin_password}"
}
resource "azurerm_sql_server" "sql01_jw" {
name = "${var.sql_server_name}jw"
resource_group_name = "${var.resource_group_name}jw"
location = "${var.secondary_location}"
version = "12.0"
administrator_login = "${var.admin_username}"
administrator_login_password = "${var.admin_password}"
}
次に、プライマリのSQL ServerにシングルDB(S0)を作成します。
geoレプリケーションを構成する場合、セカンダリはプライマリを参考に作成されるため、作成は不要となります。
resource "azurerm_sql_database" "sqldb01_je" {
name = "${var.sql_database_name}"
resource_group_name = "${var.resource_group_name}je"
location = "${var.primary_location}"
server_name = "${azurerm_sql_server.sql01_je.name}"
requested_service_objective_name = "S0"
}
フェールオーバグループの構成を行います。
mode:自動フェールオーバの設定を「Manual」と「Automatic」で選択可能
grace_minutes:自動フェールオーバまでの猶予期間(分)
resource "azurerm_sql_failover_group" "sqlfo01" {
name = "${var.sql_server_name}"
resource_group_name = "${var.resource_group_name}je"
server_name = "${azurerm_sql_server.sql01_je.name}"
databases = ["${azurerm_sql_database.sqldb01_je.id}"]
partner_servers {
id = "${azurerm_sql_server.sql01_jw.id}"
}
read_write_endpoint_failover_policy {
mode = "Automatic"
grace_minutes = 60
}
}
構築後の接続を確認するため、ファイアウォールにクライアントIPを追加します。
resource "azurerm_sql_firewall_rule" "Allow_client_je" {
name = "Allow_client"
resource_group_name = "${var.resource_group_name}je"
server_name = "${azurerm_sql_server.sql01_je.name}"
start_ip_address = "${var.client_ip}"
end_ip_address = "${var.client_ip}"
}
resource "azurerm_sql_firewall_rule" "Allow_client_jw" {
name = "Allow_client"
resource_group_name = "${var.resource_group_name}jw"
server_name = "${azurerm_sql_server.sql01_jw.name}"
start_ip_address = "${var.client_ip}"
end_ip_address = "${var.client_ip}"
}
リソース名などを変数で定義しています。
//サーバ名
variable "sql_server_name"
default = "sqltfdemoserver01"
}
//DB名
variable "sql_database_name" {
default = "sqldemodb"
}
//リソースグループ名(既存のものを参照)
variable "resource_group_name" {
default = "sqldemorg"
}
//リージョン名
variable "primary_location" {
default = "japaneast"
}
variable "secondary_location" {
default = "japanwest"
}
//認証情報
variable "admin_username" {
default = "XXXXXXXXXX"
}
variable "admin_password" {
default = "XXXXXXXXXX"
}
//クライアントIP
variable "client_ip" {
default = "X.X.X.X"
}
実行結果
実行結果のキャプチャを貼り付けておきます。
リソースが作成され、geoレプリケーションとフェールオーバグループが構成されていることが確認できました。
所感
以上です。
インフラ構築もコード化して作業ミスを防止しましょう。