Partage via


Démarrage rapide : Créer une instance d’Azure Database pour MySQL - Serveur flexible à l’aide d’Azure Resource Manager

S’APPLIQUE À : Azure Database pour MySQL – Serveur flexible

Azure Database pour MySQL – Serveur flexible est un service géré qui vous permet d’exécuter, de gérer et de mettre à l’échelle des bases de données MySQL hautement disponibles dans le cloud. Vous pouvez utiliser un modèle Azure Resource Manager (modèle ARM) pour approvisionner Azure Database pour MySQL – Serveur flexible afin de déployer plusieurs serveurs ou plusieurs bases de données sur un serveur.

Un modèle Azure Resource Manager est un fichier JSON (JavaScript Object Notation) qui définit l’infrastructure et la configuration de votre projet. Le modèle utilise la syntaxe déclarative. Vous décrivez votre déploiement prévu sans écrire la séquence de commandes de programmation pour créer le déploiement.

Prérequis

  • Compte Azure avec un abonnement actif.

Si vous n’en avez pas, créez un compte gratuit Azure avant de commencer. Actuellement, avec un compte gratuit Azure, vous pouvez essayer gratuitement Azure Database pour MySQL – Serveur flexible pendant 12 mois. Pour plus d’informations, consultez Essayer gratuitement Azure Database pour MySQL – Serveur flexible.

Créer un serveur disposant d’un accès public

Pour créer une instance de serveur flexible Azure Database pour MySQL à l’aide de la méthode de connectivité d’accès public et créer une base de données sur le serveur, créez un fichier azuredeploy.json qui contient les exemples de code suivants. Si nécessaire, mettez à jour la valeur par défaut pour firewallRules.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "resourceNamePrefix": {
      "type": "string",
      "metadata": {
        "description": "Provide a prefix for creating resource names."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "administratorLogin": {
      "type": "string"
    },
    "administratorLoginPassword": {
      "type": "securestring"
    },
    "firewallRules": {
      "type": "array",
      "defaultValue": [
        {
          "name": "rule1",
          "startIPAddress": "192.168.0.1",
          "endIPAddress": "192.168.0.255"
        },
        {
          "name": "rule2",
          "startIPAddress": "192.168.1.1",
          "endIPAddress": "192.168.1.255"
        }
      ]
    },
    "serverEdition": {
      "type": "string",
      "defaultValue": "Burstable",
      "allowedValues": [
        "Burstable",
        "GeneralPurpose",
        "MemoryOptimized"
      ],
      "metadata": {
        "description": "The tier of the specific SKU. High availability is available only for GeneralPurpose and MemoryOptimized SKUs."
      }
    },
    "version": {
      "type": "string",
      "defaultValue": "8.0.21",
      "allowedValues": [
        "5.7",
        "8.0.21"
      ],
      "metadata": {
        "description": "Server version"
      }
    },
    "availabilityZone": {
      "type": "string",
      "defaultValue": "1",
      "metadata": {
        "description": "The availability zone information of the server. (If you don't have a preference, leave this setting blank.)"
      }
    },
    "haEnabled": {
      "type": "string",
      "defaultValue": "Disabled",
      "allowedValues": [
        "Disabled",
        "SameZone",
        "ZoneRedundant"
      ],
      "metadata": {
        "description": "High availability mode for a server: Disabled, SameZone, or ZoneRedundant."
      }
    },
    "standbyAvailabilityZone": {
      "type": "string",
      "defaultValue": "2",
      "metadata": {
        "description": "The availability zone of the standby server."
      }
    },
    "storageSizeGB": {
      "type": "int",
      "defaultValue": 20
    },
    "storageIops": {
      "type": "int",
      "defaultValue": 360
    },
    "storageAutogrow": {
      "type": "string",
      "defaultValue": "Enabled",
      "allowedValues": [
        "Enabled",
        "Disabled"
      ]
    },
    "skuName": {
      "type": "string",
      "defaultValue": "Standard_B1ms",
      "metadata": {
        "description": "The name of the SKU. For example, Standard_D32ds_v4."
      }
    },
    "backupRetentionDays": {
      "type": "int",
      "defaultValue": 7
    },
    "geoRedundantBackup": {
      "type": "string",
      "defaultValue": "Disabled",
      "allowedValues": [
        "Disabled",
        "Enabled"
      ]
    },
    "serverName": {
      "type": "string",
      "defaultValue": "[format('{0}mysqlserver', parameters('resourceNamePrefix'))]"
    },
    "databaseName": {
      "type": "string",
      "defaultValue": "[format('{0}mysqldb', parameters('resourceNamePrefix'))]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.DBforMySQL/flexibleServers",
      "apiVersion": "2021-12-01-preview",
      "name": "[parameters('serverName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('skuName')]",
        "tier": "[parameters('serverEdition')]"
      },
      "properties": {
        "version": "[parameters('version')]",
        "administratorLogin": "[parameters('administratorLogin')]",
        "administratorLoginPassword": "[parameters('administratorLoginPassword')]",
        "availabilityZone": "[parameters('availabilityZone')]",
        "highAvailability": {
          "mode": "[parameters('haEnabled')]",
          "standbyAvailabilityZone": "[parameters('standbyAvailabilityZone')]"
        },
        "storage": {
          "storageSizeGB": "[parameters('storageSizeGB')]",
          "iops": "[parameters('storageIops')]",
          "autoGrow": "[parameters('storageAutogrow')]"
        },
        "backup": {
          "backupRetentionDays": "[parameters('backupRetentionDays')]",
          "geoRedundantBackup": "[parameters('geoRedundantBackup')]"
        }
      }
    },
    {
      "type": "Microsoft.DBforMySQL/flexibleServers/databases",
      "apiVersion": "2021-12-01-preview",
      "name": "[format('{0}/{1}', parameters('serverName'), parameters('databaseName'))]",
      "properties": {
        "charset": "utf8",
        "collation": "utf8_general_ci"
      },
      "dependsOn": [
        "[resourceId('Microsoft.DBforMySQL/flexibleServers', parameters('serverName'))]"
      ]
    },
    {
      "copy": {
        "name": "createFirewallRules",
        "count": "[length(range(0, if(greater(length(parameters('firewallRules')), 0), length(parameters('firewallRules')), 1)))]",
        "mode": "serial",
        "batchSize": 1
      },
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-10-01",
      "name": "[format('firewallRules-{0}', range(0, if(greater(length(parameters('firewallRules')), 0), length(parameters('firewallRules')), 1))[copyIndex()])]",
      "properties": {
        "expressionEvaluationOptions": {
          "scope": "inner"
        },
        "mode": "Incremental",
        "parameters": {
          "ip": {
            "value": "[parameters('firewallRules')[range(0, if(greater(length(parameters('firewallRules')), 0), length(parameters('firewallRules')), 1))[copyIndex()]]]"
          },
          "serverName": {
            "value": "[parameters('serverName')]"
          }
        },
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
            "serverName": {
              "type": "string"
            },
            "ip": {
              "type": "object"
            }
          },
          "resources": [
            {
              "type": "Microsoft.DBforMySQL/flexibleServers/firewallRules",
              "apiVersion": "2021-12-01-preview",
              "name": "[format('{0}/{1}', parameters('serverName'), parameters('ip').name)]",
              "properties": {
                "startIpAddress": "[parameters('ip').startIPAddress]",
                "endIpAddress": "[parameters('ip').endIPAddress]"
              }
            }
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.DBforMySQL/flexibleServers', parameters('serverName'))]"
      ]
    }
  ]
}

Créer un serveur disposant d’un accès privé

Modifiez les exemples de code suivants pour créer un serveur flexible Azure Database pour MySQL qui dispose d’une connectivité d’accès privé à l’intérieur d’un réseau virtuel :


{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "serverName": {
            "type": "string",
            "metadata": {
                "description": "Server Name for Azure database for MySQL"
            }
        },
        "dnsZoneName": {
            "type": "string",
            "metadata": {
                "description": "Name for DNS Private Zone"
            }
        },
        "dnsZoneFqdn": {
            "type": "string",
            "defaultValue": "[format('{0}.private.mysql.database.azure.com', parameters('dnsZoneName'))]",
            "metadata": {
                "description": "Fully Qualified DNS Private Zone"
            }
        },
        "administratorLogin": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Database administrator login name"
            }
        },
        "administratorLoginPassword": {
            "type": "securestring",
            "minLength": 8,
            "metadata": {
                "description": "Database administrator password"
            }
        },
        "skuName": {
            "type": "string",
            "defaultValue": "Standard_B2s",
            "metadata": {
                "description": "Azure database for MySQL sku name "
            }
        },
        "availabilityZone": {
            "type": "string",
            "defaultValue": "1",
            "metadata": {
                "description": "The availability zone information of the server. (If you don't have a preference, leave this setting blank.)"
            }
        },
        "haEnabled": {
            "type": "string",
            "defaultValue": "Disabled",
            "allowedValues": [
                "Disabled",
                "SameZone",
                "ZoneRedundant"
            ],
            "metadata": {
                "description": "High availability mode for a server: Disabled, SameZone, or ZoneRedundant."
            }
        },
        "standbyAvailabilityZone": {
            "type": "string",
            "defaultValue": "2",
            "metadata": {
                "description": "The availability zone of the standby server."
            }
        },
        "StorageSizeGB": {
            "type": "int",
            "defaultValue": 20,
            "metadata": {
                "description": "Azure database for MySQL storage Size "
            }
        },
        "StorageIops": {
            "type": "int",
            "defaultValue": 1280,
            "metadata": {
                "description": "Azure database for MySQL storage Iops"
            }
        },
        "SkuTier": {
            "type": "string",
            "defaultValue": "Burstable",
            "allowedValues": [
                "GeneralPurpose",
                "MemoryOptimized",
                "Burstable"
            ],
            "metadata": {
                "description": "Azure database for MySQL pricing tier"
            }
        },
        "mysqlVersion": {
            "type": "string",
            "defaultValue": "8.0.21",
            "allowedValues": [
                "5.7",
                "8.0.21"
            ],
            "metadata": {
                "description": "MySQL version"
            }
        },
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]",
            "metadata": {
                "description": "Location for all resources."
            }
        },
        "backupRetentionDays": {
            "type": "int",
            "defaultValue": 7,
            "metadata": {
                "description": "MySQL Server backup retention days"
            }
        },
        "geoRedundantBackup": {
            "type": "string",
            "defaultValue": "Disabled",
            "allowedValues": [
                "Disabled",
                "Enabled"
            ],
            "metadata": {
                "description": "Geo-Redundant Backup setting"
            }
        },
        "virtualNetworkName": {
            "type": "string",
            "defaultValue": "azure_mysql_vnet",
            "metadata": {
                "description": "Virtual Network Name"
            }
        },
        "subnetName": {
            "type": "string",
            "defaultValue": "azure_mysql_subnet",
            "metadata": {
                "description": "Subnet Name"
            }
        },
        "vnetAddressPrefix": {
            "type": "string",
            "defaultValue": "10.0.0.0/24",
            "metadata": {
                "description": "Virtual Network Address Prefix"
            }
        },
        "mySqlSubnetPrefix": {
            "type": "string",
            "defaultValue": "10.0.0.0/28",
            "metadata": {
                "description": "Subnet Address Prefix"
            }
        }
    },
    "resources": [
        {
            "type": "Microsoft.Network/virtualNetworks/subnets",
            "apiVersion": "2023-09-01",
            "name": "[format('{0}/{1}', parameters('virtualNetworkName'), parameters('subnetName'))]",
            "properties": {
                "addressPrefix": "[parameters('mySqlSubnetPrefix')]",
                "delegations": [
                    {
                        "name": "dlg-Microsoft.DBforMySQL-flexibleServers",
                        "properties": {
                            "serviceName": "Microsoft.DBforMySQL/flexibleServers"
                        }
                    }
                ],
                "privateEndpointNetworkPolicies": "Enabled",
                "privateLinkServiceNetworkPolicies": "Enabled"
            },
            "dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]"
            ]
        },
        {
            "type": "Microsoft.Network/virtualNetworks",
            "apiVersion": "2023-09-01",
            "name": "[parameters('virtualNetworkName')]",
            "location": "[parameters('location')]",
            "properties": {
                "addressSpace": {
                    "addressPrefixes": [
                        "[parameters('vnetAddressPrefix')]"
                    ]
                }
            }
        },
        {
            "type": "Microsoft.Network/privateDnsZones",
            "apiVersion": "2020-06-01",
            "name": "[parameters('dnsZoneFqdn')]",
            "location": "global"
        },
        {
            "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
            "apiVersion": "2020-06-01",
            "name": "[format('{0}/{1}', parameters('dnsZoneFqdn'), parameters('virtualNetworkName'))]",
            "location": "global",
            "properties": {
                "registrationEnabled": false,
                "virtualNetwork": {
                    "id": "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]"
                }
            },
            "dependsOn": [
                "[resourceId('Microsoft.Network/privateDnsZones', parameters('dnsZoneFqdn'))]",
                "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]"
            ]
        },
        {
            "type": "Microsoft.DBforMySQL/flexibleServers",
            "apiVersion": "2023-12-01-preview",
            "name": "[parameters('serverName')]",
            "location": "[parameters('location')]",
            "sku": {
                "name": "[parameters('skuName')]",
                "tier": "[parameters('SkuTier')]"
            },
            "properties": {
                "administratorLogin": "[parameters('administratorLogin')]",
                "administratorLoginPassword": "[parameters('administratorLoginPassword')]",
                "storage": {
                    "autoGrow": "Enabled",
                    "iops": "[parameters('StorageIops')]",
                    "storageSizeGB": "[parameters('StorageSizeGB')]"
                },
                "createMode": "Default",
                "version": "[parameters('mysqlVersion')]",
                "backup": {
                    "backupRetentionDays": "[parameters('backupRetentionDays')]",
                    "geoRedundantBackup": "[parameters('geoRedundantBackup')]"
                },
                "availabilityZone": "[parameters('availabilityZone')]",
                "highAvailability": {
                    "mode": "[parameters('haEnabled')]",
                    "standbyAvailabilityZone": "[parameters('standbyAvailabilityZone')]"
                },
                "network": {
                    "delegatedSubnetResourceId": "[format('{0}/subnets/{1}', reference(resourceId('Microsoft.Network/privateDnsZones/virtualNetworkLinks', parameters('dnsZoneFqdn'), parameters('virtualNetworkName')), '2020-06-01').virtualNetwork.id, parameters('subnetName'))]",
                    "privateDnsZoneResourceId": "[resourceId('Microsoft.Network/privateDnsZones', parameters('dnsZoneFqdn'))]"
                }
            },
            "dependsOn": [
                "[resourceId('Microsoft.Network/privateDnsZones', parameters('dnsZoneFqdn'))]",
                "[resourceId('Microsoft.Network/privateDnsZones/virtualNetworkLinks', parameters('dnsZoneFqdn'), parameters('virtualNetworkName'))]"
            ]
        }
    ],
    "outputs": {
        "location": {
            "type": "string",
            "value": "[parameters('location')]"
        },
        "name": {
            "type": "string",
            "value": "[parameters('serverName')]"
        },
        "resourceGroupName": {
            "type": "string",
            "value": "[resourceGroup().name]"
        },
        "resourceId": {
            "type": "string",
            "value": "[resourceId('Microsoft.DBforMySQL/flexibleServers', parameters('serverName'))]"
        },
        "mysqlHostname": {
            "type": "string",
            "value": "[format('{0}.{1}', parameters('serverName'), parameters('dnsZoneFqdn'))]"
        },
        "mysqlSubnetId": {
            "type": "string",
            "value": "[format('{0}/subnets/{1}', reference(resourceId('Microsoft.Network/privateDnsZones/virtualNetworkLinks', parameters('dnsZoneFqdn'), parameters('virtualNetworkName')), '2020-06-01').virtualNetwork.id, parameters('subnetName'))]"
        },
        "vnetId": {
            "type": "string",
            "value": "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]"
        },
        "privateDnsId": {
            "type": "string",
            "value": "[resourceId('Microsoft.Network/privateDnsZones', parameters('dnsZoneFqdn'))]"
        },
        "privateDnsName": {
            "type": "string",
            "value": "[parameters('dnsZoneFqdn')]"
        }
    }
}

Déployer le modèle

Déployez le fichier JSON à l’aide d’Azure CLI ou d’Azure PowerShell.

az group create --name exampleRG --location eastus
az deployment group create --resource-group exampleRG --template-file azuredeploy.json

Effectuez les étapes pour entrer les valeurs des paramètres. Une fois le déploiement terminé, un message indique un déploiement réussi.

Vérifier les ressources déployées

Pour vérifier que votre serveur flexible Azure Database pour MySQL a été créé dans le groupe de ressources :

az resource list --resource-group exampleRG

Nettoyer les ressources

Pour supprimer le groupe de ressources et toutes les ressources qui se trouvent dans le groupe de ressources :

az group delete --name exampleRG