Tutorial: Configurar bancos de dados no Banco de Dados do Azure para MySQL usando o Ansible

Importante

O Ansible 2.7 (ou posterior) é necessário para executar os playbooks de exemplo neste artigo.

O Banco de Dados do Azure para MySQL é um serviço de banco de dados relacional baseado no MySQL Community Edition. O Banco de Dados do Azure para MySQL permite que você gerencie bancos de dados MySQL em seus aplicativos Web.

Neste artigo, você aprenderá a:

  • Criar um servidor MySql
  • Criar um banco de dados MySql
  • Configurar uma regra de firewall para que um aplicativo externo possa se conectar ao seu servidor
  • Conecte-se ao seu servidor MySql a partir do Azure Cloud Shell
  • Consulte seus servidores MySQL disponíveis
  • Listar todos os bancos de dados em seus servidores conectados

Pré-requisitos

  • Assinatura do Azure: se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

Criar um grupo de recursos

O código do playbook nesta seção cria um grupo de recursos do Azure. Um grupo de recursos é um contêiner lógico no qual os recursos do Azure são implantados e gerenciados.

Salve o seguinte playbook como rg.yml:

- hosts: localhost
  vars:
    resource_group: myResourceGroup
    location: eastus 
  tasks:
    - name: Create a resource group
      azure_rm_resourcegroup:
        name: "{{ resource_group }}"
        location: "{{ location }}"

Antes de executar o playbook, consulte as seguintes notas:

  • Um grupo de recursos chamado myResourceGroup é criado.
  • O grupo de recursos é criado no eastus local:

Execute o livro de estratégias usando ansible-playbook

ansible-playbook rg.yml

Criar um servidor MySQL e banco de dados

O código do playbook nesta seção cria um servidor MySQL e uma instância de Banco de Dados do Azure para MySQL. O novo servidor MySQL é um servidor Gen 5 Basic Purpose com um vCore e é chamado mysqlserveransible. A instância do banco de dados é denominada mysqldbansible.

Para obter mais informações sobre camadas de preços, consulte Banco de Dados do Azure para camadas de preços MySQL.

Salve o seguinte playbook como 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 }}"

Antes de executar o playbook, consulte as seguintes notas:

  • Na seção vars, o valor de mysqlserver_name deve ser único.
  • Na secção vars, substitua <server_admin_password> por uma senha.

Execute o livro de estratégias usando ansible-playbook

ansible-playbook mysql_create.yml

Configurar uma regra de firewall

Uma regra de firewall no nível de servidor permite que um aplicativo externo se conecte ao seu servidor por meio do firewall do serviço MySQL do Azure. Exemplos de aplicativos externos são a mysql ferramenta de linha de comando e o MySQL Workbench.

O código do playbook nesta seção cria uma regra de firewall chamada extenalaccess que permite conexões de qualquer endereço IP externo.

Salve o seguinte playbook como 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"

Antes de executar o playbook, consulte as seguintes notas:

  • Na seção vars, substitua startIpAddress e endIpAddress. Use o intervalo de endereços IP que correspondem ao intervalo a partir do qual você estará se conectando.
  • As conexões com o Banco de Dados do Azure para MySQL se comunicam pela porta 3306. Se você tentar se conectar de dentro de uma rede corporativa, o tráfego de saída pela porta 3306 pode não ser permitido. Nesse caso, você não pode se conectar ao servidor, a menos que o departamento de TI abra a porta 3306.
  • O playbook usa o azure_rm_resource módulo, que permite o uso direto da API REST.

Execute o livro de estratégias usando ansible-playbook

ansible-playbook mysql_firewall.yml

Ligar ao servidor

Nesta seção, você usa o Azure Cloud Shell para se conectar ao servidor criado anteriormente.

  1. Abra o shell.azure.com ao selecionar a opção abaixo.

    Iniciar incorporar

  2. Insira o seguinte código:

    mysql -h mysqlserveransible.mysql.database.azure.com -u mysqladmin@mysqlserveransible -p
    
  3. No prompt, digite o seguinte comando para consultar o status do servidor:

    mysql> status
    

    Se tudo correr bem, você verá resultados semelhantes aos seguintes resultados:

    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
    --------------
    

Consultar servidores MySQL

O código do playbook nesta seção consulta os servidores MySQL em myResourceGroup e lista os bancos de dados nos servidores encontrados.

Salve o seguinte playbook como 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

Execute o livro de estratégias usando ansible-playbook

ansible-playbook mysql_query.yml

Depois de executar o playbook, você verá uma saída semelhante aos seguintes resultados:

"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"
    }
]

Você também vê a seguinte saída para o banco de dados 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"
    }
]

Limpeza de recursos

  1. Salve o código a seguir como delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Execute o playbook usando o comando ansible-playbook . Substitua o espaço reservado pelo nome do grupo de recursos a ser excluído. Todos os recursos dentro do grupo de recursos serão excluídos.

    ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
    

    Pontos principais:

    • Devido à variável register e à seção debug do playbook, os resultados aparecem quando o comando é concluído.

Próximos passos