Terraform module to create and manage a set of resources with one of MSSQL flavors:
Depending on the usage, Virtual Network with Subnets delegations and/or VM with SQL support must be provisioned in advance.
Once you have a Corewide Solutions Portal account, this one-time action will use your browser session to retrieve credentials:
shellterraform login solutions.corewide.com
Initialize mandatory providers:
Copy and paste into your Terraform configuration and insert the variables:
hclmodule "tf_azure_mssql" {
source = "solutions.corewide.com/azure/tf-azure-mssql/azurerm"
version = "~> 2.0.0"
# specify module inputs here or try one of the examples below
...
}
Initialize the setup:
shellterraform init
Corewide DevOps team strictly follows Semantic Versioning
Specification
to
provide our clients with products that have predictable upgrades between versions. We
recommend
pinning
patch versions of our modules using pessimistic
constraint operator (~>) to prevent breaking changes during upgrades.
To get new features during the upgrades (without breaking compatibility), use
~> 2.0 and run
terraform init -upgrade
For the safest setup, use strict pinning with version = "2.0.0"
|
Module
25% off
|
€550
|
| TOTAL | €550 |
Terraform module to create and manage a set of resources with one of MSSQL flavors:
Depending on the usage, Virtual Network with Subnets delegations and/or VM with SQL support must be provisioned in advance.
All notable changes to this project are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
BREAKING CHANGE: the new version has several breaking changes that are incompatible with previous versions, see the Upgrade Notes section
resource_group_name and region inputs to define the resource group and location for the managed resources5.01.9 due to using cross-object referencing for input variable validationsresource_group object input in favor of dedicated inputs: resource_group_name and region1.0 and 1.1 for MSSQL Server and Managed Instanceminimum_tls_version input because the Azure provider kept only 1.2 as the only available option(Last version compatible with the Azure Terraform provider version 4.0)
4.574.0(Last version compatible with the Azure Terraform provider version 3.0)
First stable version
v1.x to v2.xModule from v2.0 has changed Azure Terraform provider version, which isn't compatible with older versions. After the module version is upgraded, re-init the module to upgrade the provider version. Upgrade the Azure provider version at the project level:
hcl
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
}
}
Upgrade project dependencies:
bash
terraform init --upgrade
Apply the changes to make sure the state of the resources is up-to-date with the new provider version:
bashterraform apply
v2.x to v3.xModule from v3.0 has several breaking changes that require attention:
```hcl
module "mssql" {
...
# From v2.x format
resource_group = {
name = "foo"
location = "eastus"
}
verilog# To v3.x format
resource_group_name = "foo"
region = "eastus"
}
```
hcl
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 5.0"
}
}
}
Upgrade project dependencies:
bash
terraform init --upgrade
Apply the changes to make sure the state of the resources is up-to-date with the new provider version:
bashterraform apply
Create Azure SQL Managed Instance (PaaS):
hclresource "azurerm_resource_group" "bar" {
name = "bar"
location = "eastus"
}
data "azurerm_subnet" "snet" {
name = "snet-sql"
virtual_network_name = "vnet"
resource_group_name = "bar"
}
module "azure_sql_db" {
source = "solutions.corewide.com/azure/tf-azure-mssql/azurerm"
version = "~> 2.0"
service_type = "mi"
resource_group = azurerm_resource_group.bar
name_suffix = "biz"
managed_instance_parameters = {
subnet_id = data.azurerm_subnet.snet.id
}
tags = {
Application = "Web"
}
}
Create Azure SQL DBaaS Instance:
hclresource "azurerm_resource_group" "bar" {
name = "bar"
location = "eastus"
}
module "azure_sql_db" {
source = "solutions.corewide.com/azure/tf-azure-mssql/azurerm"
version = "~> 2.0"
service_type = "srv"
resource_group = azurerm_resource_group.bar
server_version = "12.0"
name_suffix = "biz"
databases = [
{
name = "db"
max_size_gb = 32
},
]
elastic_pools = [
{
name_suffix = "biz"
max_size_gb = 256
},
]
tags = {
Application = "Web"
}
}
Create an Azure SQL Database in self-managed Azure VM (the VM must be provisioned separately):
hcldata "azurerm_virtual_machine" "foo" {
name = "foo"
resource_group_name = "bar"
}
module "azure_sql_db" {
source = "solutions.corewide.com/azure/tf-azure-mssql/azurerm"
version = "~> 2.0"
service_type = "vm"
vm_parameters = {
vm_id = data.azurerm_virtual_machine.foo.id
}
tags = {
Application = "Web"
}
}
| Variable | Description | Type | Default | Required | Sensitive |
|---|---|---|---|---|---|
service_type |
The type of MSSQL flavor to manage. Possible values are srv for MSSQL Server, mi for MSSQL Managed Instance, and vm for MSSQL Virtual Machine |
string |
yes | no | |
administrator_login |
The Administrator login. Appliable for MSSQL Server or Managed Instance entities | string |
mssqladmin |
no | no |
administrator_password |
Password associated with the administrator_login. Will be generated if not specified. Appliable for MSSQL Server or Managed Instance entities |
string |
no | yes | |
databases |
List of parameters for the MSSQL Databases associated with the managed MSSQL Server | list(object) |
[] |
no | no |
databases[*].license_type |
Specifies the license type applied to this database | string |
BasePrice |
no | no |
databases[*].max_size_gb |
The max size of the database in gigabytes | number |
yes | no | |
databases[*].name |
The database name | string |
yes | no | |
databases[*].zone_redundant |
Defines if the database is zone redundant | bool |
false |
no | no |
elastic_pools |
List of parameters for the MSSQL Azure Elastic Pools associated with the managed MSSQL Server | list(object) |
[] |
no | no |
elastic_pools[*].license_type |
Specifies the license type applied to this database | string |
BasePrice |
no | no |
elastic_pools[*].max_size_gb |
The max data size of the elastic pool in gigabytes | number |
yes | no | |
elastic_pools[*].name_suffix |
The name suffix of the SQL elastic pool to create | string |
yes | no | |
elastic_pools[*].per_db_max_capacity |
The maximum capacity any one database can consume | number |
4 |
no | no |
elastic_pools[*].per_db_min_capacity |
The minimum capacity all databases are guaranteed | number |
1 |
no | no |
elastic_pools[*].sku_capacity |
The scale up/out capacity, representing server's compute units | number |
4 |
no | no |
elastic_pools[*].sku_family |
The family of hardware | string |
Gen5 |
no | no |
elastic_pools[*].sku_name |
Specifies the SKU Name for this elastic pool | string |
GP_Gen5 |
no | no |
elastic_pools[*].sku_tier |
The tier of the particular SKU | string |
GeneralPurpose |
no | no |
managed_instance_parameters |
A set of parameters for the MSSQL Azure Managed Instance | object |
{} |
no | no |
managed_instance_parameters.license_type |
Type of license the Managed Instance will use | string |
BasePrice |
no | no |
managed_instance_parameters.sku_name |
Specifies the SKU Name for the SQL Managed Instance | string |
GP_Gen5 |
no | no |
managed_instance_parameters.storage_size |
Maximum storage space for the SQL Managed instance. This should be a multiple of 32 (GB) | number |
32 |
no | no |
managed_instance_parameters.subnet_id |
The subnet resource ID that the SQL Managed Instance will be associated with | string |
no | no | |
managed_instance_parameters.vcores |
Number of cores that should be assigned to the SQL Managed Instance | number |
8 |
no | no |
minimum_tls_version |
The Minimum TLS Version (valid values include 1.0, 1.1, 1.2). Appliable for MSSQL Server or Managed Instance entities |
string |
1.2 |
no | no |
name_suffix |
Naming suffix for the MSSQL entity managed by the module. Required only for MSSQL Server or Managed Instance entities | string |
no | no | |
public_access_enabled |
Indicates whether public access is allowed. Appliable for MSSQL Server or Managed Instance entities | bool |
false |
no | no |
resource_group |
The object with attributes of Resource Group in which resources should be created. Keys name and location are required. Required only for MSSQL Server or Managed Instance entities |
any |
no | no | |
server_version |
The version of MSSQL server | string |
12.0 |
no | no |
tags |
Tag(s) that must be assigned to resources | map(string) |
{} |
no | no |
vm_parameters |
A set of parameters for the MSSQL Virtual Machine | object |
{} |
no | no |
vm_parameters.connectivity_type |
The connectivity type used for this SQL Server | string |
PRIVATE |
no | no |
vm_parameters.license_type |
The SQL Server license type | string |
PAYG |
no | no |
vm_parameters.port |
The SQL Server port | number |
1433 |
no | no |
vm_parameters.vm_id |
The ID of the Virtual Machine | string |
no | no |
| Output | Description | Type | Sensitive |
|---|---|---|---|
databases |
Contains attributes of MSSQL Databases | resource |
no |
elastic_pools |
Contains attributes of MSSQL Azure Elastic Pools | resource |
no |
managed_instance |
Contains attributes of MSSQL Azure Managed Instance | computed |
yes |
server |
Contains attributes of MSSQL Azure Database Server | computed |
yes |
virtual_machine |
Contains attributes of MSSQL Virtual Machine | computed |
yes |
| Dependency | Version | Kind |
|---|---|---|
terraform |
>= 1.3 |
CLI |
hashicorp/azurerm |
~> 4.0 |
provider |
hashicorp/random |
~> 3.3 |
provider |