Skip to content

Commit 742b875

Browse files
authored
Merge pull request microsoft#80 from neil-yechenwei/examplemysqlfsdb
Add example for MySQL Flexible Server Database
2 parents 18b79a7 + 5cf7ca9 commit 742b875

File tree

7 files changed

+177
-0
lines changed

7 files changed

+177
-0
lines changed

quickstart/201-mysql-fs-db/main.tf

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// Generate random value for the Resource Group name
2+
resource "random_pet" "rg-name" {
3+
prefix = var.name_prefix
4+
}
5+
6+
// Generate random value for the name
7+
resource "random_string" "name" {
8+
length = 8
9+
upper = false
10+
lower = true
11+
special = false
12+
}
13+
14+
// Generate random value for the login password
15+
resource "random_password" "password" {
16+
length = 8
17+
upper = true
18+
lower = true
19+
special = true
20+
override_special = "_"
21+
}
22+
23+
// Manages the Resource Group where the resource exists
24+
resource "azurerm_resource_group" "default" {
25+
name = "mysqlfsRG-${random_pet.rg-name.id}"
26+
location = var.location
27+
}
28+
29+
// Manages the Virtual Network
30+
resource "azurerm_virtual_network" "default" {
31+
name = "vnet-${random_string.name.result}"
32+
location = azurerm_resource_group.default.location
33+
resource_group_name = azurerm_resource_group.default.name
34+
address_space = ["10.0.0.0/16"]
35+
}
36+
37+
// Manages the Subnet
38+
resource "azurerm_subnet" "default" {
39+
name = "subnet-${random_string.name.result}"
40+
resource_group_name = azurerm_resource_group.default.name
41+
virtual_network_name = azurerm_virtual_network.default.name
42+
address_prefixes = ["10.0.2.0/24"]
43+
service_endpoints = ["Microsoft.Storage"]
44+
45+
delegation {
46+
name = "fs"
47+
48+
service_delegation {
49+
name = "Microsoft.DBforMySQL/flexibleServers"
50+
51+
actions = [
52+
"Microsoft.Network/virtualNetworks/subnets/join/action",
53+
]
54+
}
55+
}
56+
}
57+
58+
// Enables you to manage Private DNS zones within Azure DNS
59+
resource "azurerm_private_dns_zone" "default" {
60+
name = "${random_string.name.result}.mysql.database.azure.com"
61+
resource_group_name = azurerm_resource_group.default.name
62+
}
63+
64+
// Enables you to manage Private DNS zone Virtual Network Links
65+
resource "azurerm_private_dns_zone_virtual_network_link" "default" {
66+
name = "mysqlfsVnetZone${random_string.name.result}.com"
67+
private_dns_zone_name = azurerm_private_dns_zone.default.name
68+
virtual_network_id = azurerm_virtual_network.default.id
69+
resource_group_name = azurerm_resource_group.default.name
70+
}
71+
72+
// Manages the MySQL Flexible Server
73+
resource "azurerm_mysql_flexible_server" "default" {
74+
name = "mysqlfs-${random_string.name.result}"
75+
resource_group_name = azurerm_resource_group.default.name
76+
location = azurerm_resource_group.default.location
77+
administrator_login = random_string.name.result
78+
administrator_password = random_password.password.result
79+
zone = "1"
80+
version = "8.0.21"
81+
backup_retention_days = 7
82+
geo_redundant_backup_enabled = false
83+
84+
storage {
85+
size_gb = 20
86+
iops = 360
87+
}
88+
89+
delegated_subnet_id = azurerm_subnet.default.id
90+
private_dns_zone_id = azurerm_private_dns_zone.default.id
91+
sku_name = "GP_Standard_D2ds_v4"
92+
93+
high_availability {
94+
mode = "ZoneRedundant"
95+
standby_availability_zone = "2"
96+
}
97+
98+
maintenance_window {
99+
day_of_week = 0
100+
start_hour = 8
101+
start_minute = 0
102+
}
103+
104+
depends_on = [azurerm_private_dns_zone_virtual_network_link.default]
105+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// Manages the MySQL Flexible Server Database
2+
resource "azurerm_mysql_flexible_database" "default" {
3+
name = "mysqlfsdb_${random_string.name.result}"
4+
resource_group_name = azurerm_resource_group.default.name
5+
server_name = azurerm_mysql_flexible_server.default.name
6+
charset = "utf8"
7+
collation = "utf8_unicode_ci"
8+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
output "resource_group_name" {
2+
value = azurerm_resource_group.default.name
3+
}
4+
5+
output "azurerm_mysql_flexible_server" {
6+
value = azurerm_mysql_flexible_server.default.name
7+
}
8+
9+
output "mysql_flexible_server_database_name" {
10+
value = azurerm_mysql_flexible_database.default.name
11+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
terraform {
2+
required_version = ">=1.0"
3+
4+
required_providers {
5+
azurerm = {
6+
source = "hashicorp/azurerm"
7+
version = "~>3.0"
8+
}
9+
}
10+
}
11+
12+
provider "azurerm" {
13+
features {}
14+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Azure MySQL Flexible Server Database
2+
3+
This template deploys an [Azure MySQL Flexible Server Database](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/mysql_flexible_database).
4+
5+
## Terraform resource types
6+
7+
- [random_pet](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/pet)
8+
- [random_string](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string)
9+
- [random_password](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password)
10+
- [azurerm_resource_group](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/resource_group)
11+
- [azurerm_virtual_network](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/virtual_network)
12+
- [azurerm_subnet](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/subnet)
13+
- [azurerm_private_dns_zone](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/private_dns_zone)
14+
- [azurerm_private_dns_zone_virtual_network_link](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/private_dns_zone_virtual_network_link)
15+
- [azurerm_mysql_flexible_server](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/mysql_flexible_server)
16+
- [azurerm_mysql_flexible_database](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/mysql_flexible_database)
17+
18+
## Variables
19+
20+
| Name | Description |
21+
|-|-|
22+
| `name_prefix` | (Optional) Prefix of the resource name. Value defaults to: tftest|
23+
| `location` | (Optional) Azure Region in which to deploy these resources. Value defaults to: eastus |
24+
25+
## Example
26+
27+
To see how to run this example, see [Create an Azure MySQL Flexible Server Database using Terraform](https://docs.microsoft.com/azure/developer/terraform/deploy-mysql-flexible-server-database).
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
variable "name_prefix" {
2+
type = string
3+
default = "tftest"
4+
description = "Prefix of the resource name."
5+
}
6+
7+
variable "location" {
8+
type = string
9+
default = "eastus"
10+
description = "Location of the resource."
11+
}

quickstart/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ This project has adopted the [Microsoft Open Source Code of Conduct](https://ope
3232
- [Azure virtual machine scale set with jumpbox](./201-vmss-jumpbox)
3333
- [Azure virtual machine scale set with jumpbox from Packer custom image](./201-vmss-packer-jumpbox)
3434
- [Azure PostgreSQL Flexible Server Database](./201-postgresql-fs-db)
35+
- [Azure MySQL Flexible Server Database](./201-mysql-fs-db)
3536

3637
#### Advanced
3738
- [Azure Service Fabric](./301-service-fabric/)

0 commit comments

Comments
 (0)