Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Ansible 2.7 (o versione successiva) è necessario per eseguire i playbook di esempio in questo articolo.
Database di Azure per MySQL è un servizio di database relazionale basato su MySQL Community Edition. Database di Azure per MySQL consente di gestire i database MySQL nelle app Web.
In questo articolo vengono illustrate le operazioni seguenti:
- Creare un server MySql
- Creare un database MySQL
- Configurare una regola del firewall in modo che un'app esterna possa connettersi al server
- Connettersi al server MySql da Azure Cloud Shell
- Interroga i server MySQL disponibili
- Elencare tutti i database nei server connessi
Prerequisiti
- Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Installare Ansible: eseguire una delle opzioni seguenti:
- Installare e configurare Ansible in una macchina virtuale Linux
- Configurare Azure Cloud Shell e, se non si ha accesso a una macchina virtuale Linux, creare una macchina virtuale con Ansible.
Creare un gruppo di risorse
Il codice del playbook in questa sezione crea un gruppo di risorse di Azure. Un gruppo di risorse è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite.
Salva il playbook seguente come rg.yml:
- hosts: localhost
vars:
resource_group: myResourceGroup
location: eastus
tasks:
- name: Create a resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
Prima di eseguire il playbook, vedere le note seguenti:
- Viene creato un gruppo di risorse denominato
myResourceGroup. - Il gruppo di risorse viene creato nella località
eastus.
Eseguire il playbook usando ansible-playbook
ansible-playbook rg.yml
Creare un server e un database MySQL
Il codice del playbook in questa sezione crea un server MySQL e un'istanza di Database di Azure per MySQL. Il nuovo server MySQL è un server per utilizzo di base di generazione 5 con un vCore ed è denominato mysqlserveransible. L'istanza del database è denominata mysqldbansible.
Per altre informazioni sui piani tariffari, vedere Piani tariffari di Database di Azure per MySQL.
Salva il playbook seguente come mysql_create.yml:
- hosts: localhost
vars:
resource_group: myResourceGroup
location: eastus
mysqlserver_name: mysqlserveransible
mysqldb_name: mysqldbansible
admin_username: mysqladmin
admin_password: <server_admin_password>
tasks:
- name: Create MySQL Server
azure_rm_mysqlserver:
resource_group: "{{ resource_group }}"
name: "{{ mysqlserver_name }}"
sku:
name: B_Gen5_1
tier: Basic
location: "{{ location }}"
version: 5.6
enforce_ssl: True
admin_username: "{{ admin_username }}"
admin_password: "{{ admin_password }}"
storage_mb: 51200
- name: Create instance of MySQL Database
azure_rm_mysqldatabase:
resource_group: "{{ resource_group }}"
server_name: "{{ mysqlserver_name }}"
name: "{{ mysqldb_name }}"
Prima di eseguire il playbook, vedere le note seguenti:
-
varsNella sezione il valore dimysqlserver_namedeve essere univoco. -
varsNella sezione sostituire<server_admin_password>con una password.
Eseguire il playbook usando ansible-playbook
ansible-playbook mysql_create.yml
Configurare una regola del firewall
Una regola del firewall a livello di server consente a un'app esterna di connettersi al server tramite il firewall del servizio MySQL di Azure. Esempi di app esterne sono lo strumento a mysql riga di comando e MySQL Workbench.
Il codice del playbook in questa sezione crea una regola del firewall denominata extenalaccess che consente le connessioni da qualsiasi indirizzo IP esterno.
Salva il playbook seguente come mysql_firewall.yml:
- hosts: localhost
vars:
resource_group: myResourceGroup
mysqlserver_name: mysqlserveransible
tasks:
- name: Open firewall to access MySQL Server from outside
azure_rm_resource:
api_version: '2017-12-01'
resource_group: "{{ resource_group }}"
provider: dbformysql
resource_type: servers
resource_name: "{{ mysqlserver_name }}"
subresource:
- type: firewallrules
name: externalaccess
body:
properties:
startIpAddress: "0.0.0.0"
endIpAddress: "255.255.255.255"
Prima di eseguire il playbook, vedere le note seguenti:
- Nella sezione vars sostituire
startIpAddresseendIpAddress. Usare l'intervallo di indirizzi IP che corrisponde all'intervallo da cui ci si connetterà. - Le connessioni a Database di Azure per MySQL comunicano sulla porta 3306. Se si tenta di connettersi da una rete aziendale, il traffico in uscita sulla porta 3306 potrebbe non essere consentito. In tal caso, non è possibile connettersi al server a meno che il reparto IT non apra la porta 3306.
- Il playbook usa il
azure_rm_resourcemodulo , che consente l'uso diretto dell'API REST.
Eseguire il playbook usando ansible-playbook
ansible-playbook mysql_firewall.yml
Connettersi al server
In questa sezione si usa Azure Cloud Shell per connettersi al server creato in precedenza.
Aprire shell.azure.com selezionando di seguito.
Immetti il codice seguente:
mysql -h mysqlserveransible.mysql.database.azure.com -u mysqladmin@mysqlserveransible -pAl prompt immettere il comando seguente per eseguire una query sullo stato del server:
mysql> statusSe tutto va bene, viene visualizzato un output simile ai risultati seguenti:
demo@Azure:~$ mysql -h mysqlserveransible.mysql.database.azure.com -u mysqladmin@mysqlserveransible -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 65233 Server version: 5.6.39.0 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> status -------------- mysql Ver 14.14 Distrib 5.7.23, for Linux (x86_64) using EditLine wrapper Connection id: 65233 Current database: Current user: mysqladmin@13.76.42.93 SSL: Cipher in use is AES256-SHA Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.6.39.0 MySQL Community Server (GPL) Protocol version: 10 Connection: mysqlserveransible.mysql.database.azure.com via TCP/IP Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 TCP port: 3306 Uptime: 36 min 21 sec Threads: 5 Questions: 559 Slow queries: 0 Opens: 96 Flush tables: 3 Open tables: 10 Queries per second avg: 0.256 --------------
Eseguire query sui server MySQL
Il codice del playbook in questa sezione interroga i server MySQL in myResourceGroup ed elenca i database sui server trovati.
Salva il playbook seguente come mysql_query.yml:
- hosts: localhost
vars:
resource_group: myResourceGroup
mysqlserver_name: mysqlserveransible
tasks:
- name: Query MySQL Servers in current resource group
azure_rm_mysqlserver_facts:
resource_group: "{{ resource_group }}"
register: mysqlserverfacts
- name: Dump MySQL Server facts
debug:
var: mysqlserverfacts
- name: Query MySQL Databases
azure_rm_mysqldatabase_facts:
resource_group: "{{ resource_group }}"
server_name: "{{ mysqlserver_name }}"
register: mysqldatabasefacts
- name: Dump MySQL Database Facts
debug:
var: mysqldatabasefacts
Eseguire il playbook usando ansible-playbook
ansible-playbook mysql_query.yml
Dopo aver eseguito il playbook, viene visualizzato un output simile ai risultati seguenti:
"servers": [
{
"admin_username": "mysqladmin",
"enforce_ssl": false,
"fully_qualified_domain_name": "mysqlserveransible.mysql.database.azure.com",
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/mysqlserveransible",
"location": "eastus",
"name": "mysqlserveransible",
"resource_group": "myResourceGroup",
"sku": {
"capacity": 1,
"family": "Gen5",
"name": "B_Gen5_1",
"tier": "Basic"
},
"storage_mb": 5120,
"user_visible_state": "Ready",
"version": "5.6"
}
]
Viene visualizzato anche l'output seguente per il database MySQL:
"databases": [
{
"charset": "utf8",
"collation": "utf8_general_ci",
"name": "information_schema",
"resource_group": "myResourceGroup",
"server_name": "mysqlserveransible"
},
{
"charset": "latin1",
"collation": "latin1_swedish_ci",
"name": "mysql",
"resource_group": "myResourceGroup",
"server_name": "mysqlserveransibler"
},
{
"charset": "latin1",
"collation": "latin1_swedish_ci",
"name": "mysqldbansible",
"resource_group": "myResourceGroup",
"server_name": "mysqlserveransible"
},
{
"charset": "utf8",
"collation": "utf8_general_ci",
"name": "performance_schema",
"resource_group": "myResourceGroup",
"server_name": "mysqlserveransible"
}
]
Pulire le risorse
Salvare il codice seguente come
delete_rg.yml.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rgEsegui il playbook usando il comando ansible-playbook. Sostituire il segnaposto con il nome del gruppo di risorse da eliminare. Tutte le risorse all'interno del gruppo di risorse verranno eliminate.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"Punti chiave:
- A causa della variabile
registere della sezionedebugdel playbook, i risultati vengono visualizzati al termine del comando.
- A causa della variabile