Udostępnij za pośrednictwem


Samouczek: konfigurowanie baz danych w usłudze Azure Database for MySQL przy użyciu rozwiązania Ansible

Ważne

Rozwiązanie Ansible w wersji 2.7 (lub nowszej) jest wymagane do uruchomienia przykładowych podręczników w tym artykule.

Azure Database for MySQL to usługa relacyjnej bazy danych oparta na programie MySQL Community Edition. Usługa Azure Database for MySQL umożliwia zarządzanie bazami danych MySQL w aplikacjach internetowych.

W tym artykule omówiono sposób wykonywania następujących zadań:

  • Tworzenie serwera MySql
  • Tworzenie bazy danych MySql
  • Konfigurowanie reguły zapory tak, aby aplikacja zewnętrzna mogła łączyć się z serwerem
  • Połączenie do serwera MySql z usługi Azure Cloud Shell
  • Wykonywanie zapytań względem dostępnych serwerów MySQL
  • Wyświetlanie listy wszystkich baz danych na połączonych serwerach

Wymagania wstępne

  • Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Tworzenie grupy zasobów

Kod podręcznika w tej sekcji tworzy grupę zasobów platformy Azure. Grupa zasobów to logiczny kontener przeznaczony do wdrażania zasobów platformy Azure i zarządzania nimi.

Zapisz następujący podręcznik jako rg.yml:

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

Przed uruchomieniem podręcznika zapoznaj się z następującymi uwagami:

  • Zostanie utworzona grupa zasobów o nazwie myResourceGroup .
  • Grupa zasobów jest tworzona eastus w lokalizacji:

Uruchamianie podręcznika przy użyciu podręcznika ansible-playbook

ansible-playbook rg.yml

Tworzenie serwera MySQL i bazy danych

Kod podręcznika w tej sekcji tworzy serwer MySQL i wystąpienie usługi Azure Database for MySQL. Nowy serwer MySQL jest serwerem podstawowego przeznaczenia 5. generacji z jednym rdzeniem wirtualnym i nosi nazwę mysqlserveransible. Wystąpienie bazy danych nosi nazwę mysqldbansible.

Aby uzyskać więcej informacji na temat warstw cenowych, zobacz Warstwy cenowe usługi Azure Database for MySQL.

Zapisz następujący podręcznik jako 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 }}"

Przed uruchomieniem podręcznika zapoznaj się z następującymi uwagami:

  • vars W sekcji wartość musi być unikatowamysqlserver_name.
  • vars W sekcji zastąp <server_admin_password> ciąg hasłem.

Uruchamianie podręcznika przy użyciu podręcznika ansible-playbook

ansible-playbook mysql_create.yml

Konfigurowanie reguły zapory

Reguła zapory na poziomie serwera umożliwia aplikacji zewnętrznej łączenie się z serwerem za pośrednictwem zapory usługi Azure MySQL. Przykłady aplikacji zewnętrznych to mysql narzędzie wiersza polecenia i aplikacja MySQL Workbench.

Kod podręcznika w tej sekcji tworzy regułę zapory o nazwie extenalaccess , która zezwala na połączenia z dowolnego zewnętrznego adresu IP.

Zapisz następujący podręcznik jako 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"

Przed uruchomieniem podręcznika zapoznaj się z następującymi uwagami:

  • W sekcji vars zastąp wartości startIpAddress i endIpAddress. Użyj zakresu adresów IP odpowiadających zakresowi, z którego będziesz się łączyć.
  • Połączenia z usługą Azure Database for MySQL korzystają z portu 3306. Jeśli próbujesz nawiązać połączenie z sieci firmowej, ruch wychodzący na porcie 3306 może być zablokowany. W takim przypadku nie będzie można nawiązać połączenia z serwerem, chyba że dział informatyczny otworzy port 3306.
  • Podręcznik używa modułu azure_rm_resource , który umożliwia bezpośrednie korzystanie z interfejsu API REST.

Uruchamianie podręcznika przy użyciu podręcznika ansible-playbook

ansible-playbook mysql_firewall.yml

Nawiązywanie połączenia z serwerem

W tej sekcji użyjesz usługi Azure Cloud Shell do nawiązania połączenia z utworzonym wcześniej serwerem.

  1. Otwórz shell.azure.com, wybierając poniżej.

    Embed launch

  2. Wprowadź następujące kod:

    mysql -h mysqlserveransible.mysql.database.azure.com -u mysqladmin@mysqlserveransible -p
    
  3. W wierszu polecenia wprowadź następujące polecenie, aby wysłać zapytanie dotyczące stanu serwera:

    mysql> status
    

    Jeśli wszystko pójdzie dobrze, zobaczysz dane wyjściowe podobne do następujących wyników:

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

Wykonywanie zapytań względem serwerów MySQL

Kod podręcznika w tej sekcji wykonuje zapytania dotyczące serwerów MySQL w programie myResourceGroup i wyświetla listę baz danych na znalezionych serwerach.

Zapisz następujący podręcznik jako 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

Uruchamianie podręcznika przy użyciu podręcznika ansible-playbook

ansible-playbook mysql_query.yml

Po uruchomieniu podręcznika zobaczysz dane wyjściowe podobne do następujących wyników:

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

Zobaczysz również następujące dane wyjściowe dla bazy danych 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"
    }
]

Czyszczenie zasobów

  1. Zapisz następujący kod jako delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Uruchom podręcznik przy użyciu polecenia ansible-playbook . Zastąp symbol zastępczy nazwą grupy zasobów, która ma zostać usunięta. Wszystkie zasoby w grupie zasobów zostaną usunięte.

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

    Kluczowe punkty:

    • Ze względu na zmienną register i debug sekcję podręcznika wyniki są wyświetlane po zakończeniu polecenia.

Następne kroki