From 6bd1ba4c6e8b326cf2ffa7594566f51c8a6acf12 Mon Sep 17 00:00:00 2001 From: Uros Randelovic Date: Wed, 31 Aug 2022 13:47:23 +0200 Subject: [PATCH] - first commit --- quickstart/101-managed-instance/README.md | 53 ++++++++++++ quickstart/101-managed-instance/main.tf | 85 ++++++++++++++++++++ quickstart/101-managed-instance/outputs.tf | 7 ++ quickstart/101-managed-instance/providers.tf | 12 +++ quickstart/101-managed-instance/variables.tf | 64 +++++++++++++++ 5 files changed, 221 insertions(+) create mode 100644 quickstart/101-managed-instance/README.md create mode 100644 quickstart/101-managed-instance/main.tf create mode 100644 quickstart/101-managed-instance/outputs.tf create mode 100644 quickstart/101-managed-instance/providers.tf create mode 100644 quickstart/101-managed-instance/variables.tf diff --git a/quickstart/101-managed-instance/README.md b/quickstart/101-managed-instance/README.md new file mode 100644 index 00000000..63a859da --- /dev/null +++ b/quickstart/101-managed-instance/README.md @@ -0,0 +1,53 @@ +# SQL Managed Instance Deployment - Minimal Example + +## Terraform resource types +- [azurerm_resource_group](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/resource_group) +- [azurerm_network_security_group](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/network_security_group) +- [azurerm_virtual_network](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/virtual_network) +- [azurerm_subnet](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/subnet) +- [azurerm_subnet_network_security_group_association](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/subnet_network_security_group_association) +- [azurerm_route_table](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/route_table) +- [azurerm_subnet_route_table_association](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/subnet_route_table_association) +- [azurerm_mssql_managed_instance](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/mssql_managed_instance) + + +## Variables +All variables and their descriptions can be found in ./variables.tf. To see all available values for each variable +please refer to the links above. E.g. when choosing managed instance's number of cores +you can find all available values [here](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/mssql_managed_instance). + +## Usage + +```bash +>terraform plan + +Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following +symbols: + + create + +Terraform will perform the following actions: + + # azurerm_mssql_managed_instance.example will be created + + resource "azurerm_mssql_managed_instance" "example" { + + administrator_login = "VeryStrongAdministrator" + + administrator_login_password = (sensitive value) + + collation = "SQL_Latin1_General_CP1_CI_AS" + + fqdn = (known after apply) + + id = (known after apply) + + license_type = "BasePrice" + + location = "eastus2euap" + + maintenance_configuration_name = "SQL_Default" + + minimum_tls_version = "1.2" + + name = "sql-mi-terraform" + + proxy_override = "Default" + + public_data_endpoint_enabled = false + + resource_group_name = "terraform-database-resource-group" + + sku_name = "GP_Gen5" + + storage_account_type = "GRS" + + storage_size_in_gb = 32 + + subnet_id = "/subscriptions/e775c3cd-e8af-412b-a951-d74761b2ebdf/resourceGroups/terraform-database-resource-group/providers/Microsoft.Network/virtualNetworks/vnet-mi-terraform/subnets/subnet-mi-terraform" + + timezone_id = "UTC" + + vcores = 8 + } +``` + diff --git a/quickstart/101-managed-instance/main.tf b/quickstart/101-managed-instance/main.tf new file mode 100644 index 00000000..f372d724 --- /dev/null +++ b/quickstart/101-managed-instance/main.tf @@ -0,0 +1,85 @@ +# Create resource group +resource "azurerm_resource_group" "example" { + name = var.azurerm_resource_group_name + location = var.location +} + +# Create security group +resource "azurerm_network_security_group" "example" { + name = var.azurerm_network_security_group_name + location = azurerm_resource_group.example.location + resource_group_name = azurerm_resource_group.example.name +} + +# Create a virtual network +resource "azurerm_virtual_network" "example" { + name = var.azurerm_virtual_network_name + resource_group_name = azurerm_resource_group.example.name + address_space = ["10.0.0.0/16"] + location = azurerm_resource_group.example.location +} + +# Create a subnet +resource "azurerm_subnet" "example" { + name = var.azurerm_subnet_name + resource_group_name = azurerm_resource_group.example.name + virtual_network_name = azurerm_virtual_network.example.name + address_prefixes = ["10.0.0.0/24"] + + delegation { + name = "managedinstancedelegation" + + service_delegation { + name = "Microsoft.Sql/managedInstances" + actions = [ + "Microsoft.Network/virtualNetworks/subnets/join/action", + "Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action", + "Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action" + ] + } + } +} + +# Associate subnet and the security group +resource "azurerm_subnet_network_security_group_association" "example" { + subnet_id = azurerm_subnet.example.id + network_security_group_id = azurerm_network_security_group.example.id +} + +# Create a route table +resource "azurerm_route_table" "example" { + name = "routetable-mi-terraform" + location = azurerm_resource_group.example.location + resource_group_name = azurerm_resource_group.example.name + disable_bgp_route_propagation = false + depends_on = [ + azurerm_subnet.example, + ] +} + +# Associate subnet and the route table +resource "azurerm_subnet_route_table_association" "example" { + subnet_id = azurerm_subnet.example.id + route_table_id = azurerm_route_table.example.id +} + +# Create managed instance +resource "azurerm_mssql_managed_instance" "example" { + name = var.database_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + subnet_id = azurerm_subnet.example.id + # TODO set the options below either in plain text or in variables.tf + # (var.xyz will prompt you to enter the value when creating the plan) + administrator_login = var.administrator_login + administrator_login_password = var.administrator_login_password + license_type = var.license_type + sku_name = var.sku_name + vcores = var.vcores + storage_size_in_gb = var.storage_size_in_gb + + depends_on = [ + azurerm_subnet_network_security_group_association.example, + azurerm_subnet_route_table_association.example, + ] +} diff --git a/quickstart/101-managed-instance/outputs.tf b/quickstart/101-managed-instance/outputs.tf new file mode 100644 index 00000000..eedbf433 --- /dev/null +++ b/quickstart/101-managed-instance/outputs.tf @@ -0,0 +1,7 @@ +# output "cosmosdb_account_id" { +# value = azurerm_cosmosdb_account.example.id +# } + +# output "cosmosdb_sql_database_id" { +# value = azurerm_cosmosdb_sql_database.example.id +# } \ No newline at end of file diff --git a/quickstart/101-managed-instance/providers.tf b/quickstart/101-managed-instance/providers.tf new file mode 100644 index 00000000..47306772 --- /dev/null +++ b/quickstart/101-managed-instance/providers.tf @@ -0,0 +1,12 @@ +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = ">=3.0.0" + } + } +} + +provider "azurerm" { + features {} +} \ No newline at end of file diff --git a/quickstart/101-managed-instance/variables.tf b/quickstart/101-managed-instance/variables.tf new file mode 100644 index 00000000..556c77d8 --- /dev/null +++ b/quickstart/101-managed-instance/variables.tf @@ -0,0 +1,64 @@ +variable "azurerm_resource_group_name" { + type = string + description = "Enter the resource group name" + default = "terraform-database-resource-group" +} +variable "azurerm_network_security_group_name" { + type = string + description = "Enter the security group name" + default = "mi-security-group-terraform" +} +variable "azurerm_virtual_network_name" { + type = string + description = "Enter the virtual network name" + default = "vnet-mi-terraform" +} +variable "azurerm_subnet_name" { + type = string + description = "Enter subnet name" + default = "subnet-mi-terraform" +} +variable "location" { + type = string + description = "Enter the location where you want to deploy the resources" + default = "eastus2euap" +} + +variable "administrator_login" { + type = string + description = "Enter Administrator name for the database" + default = "VeryStrongAdministrator" +} + +variable "administrator_login_password" { + type = string + description = "Enter administrator password for the database" + default = "IamAVeryStrongP@ssw0rd123" +} + +variable "database_name" { + type = string + description = "Enter database name" + default = "sql-mi-terraform" +} + +variable "sku_name" { + type = string + description = "Enter SKU" + default = "GP_Gen5" +} +variable "license_type" { + type = string + description = "Enter license type" + default = "BasePrice" +} +variable "vcores" { + type = string + description = "Enter number of vCores you want to deploy" + default = 8 +} +variable "storage_size_in_gb" { + type = string + description = "Enter database name" + default = 32 +}