Öğretici: Ansible kullanarak MySQL için Azure Veritabanı'nda veritabanlarını yapılandırma

Önemli

Bu makaledeki örnek playbook'ları çalıştırmak için Ansible 2.7 (veya üzeri) gereklidir.

MySQL için Azure Veritabanı, MySQL Community Edition'ı temel alan bir ilişkisel veritabanı hizmetidir. MySQL için Azure Veritabanı, web uygulamalarınızdaki MySQL veritabanlarını yönetmenizi sağlar.

Bu makalede şunları öğreneceksiniz:

  • MySql sunucusu oluşturma
  • MySql veritabanı oluşturma
  • Dış uygulamanın sunucunuza bağlanabilmesi için güvenlik duvarı kuralı yapılandırma
  • Azure Cloud Shell'den MySql sunucunuza bağlanma
  • Kullanılabilir MySQL sunucularınızı sorgulama
  • Bağlı sunucularınızdaki tüm veritabanlarını listeleme

Önkoşullar

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Bir kaynak grubu oluşturun

Bu bölümdeki playbook kodu bir Azure kaynak grubu oluşturur. Kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği mantıksal bir kapsayıcıdır.

Aşağıdaki playbook'u rg.yml olarak kaydedin.

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

Playbook'u çalıştırmadan önce aşağıdaki notlara bakın:

  • adlı myResourceGroup bir kaynak grubu oluşturulur.
  • Kaynak grubu şu konumda eastus oluşturulur:

Ansible-playbook kullanarak playbook'u çalıştırın

ansible-playbook rg.yml

MySQL sunucusu ve veritabanı oluşturma

Bu bölümdeki playbook kodu bir MySQL sunucusu ve MySQL için Azure Veritabanı örneği oluşturur. Yeni MySQL sunucusu, bir sanal çekirdek içeren 5. Nesil Temel Amaçlı bir sunucudur ve olarak adlandırılır mysqlserveransible. Veritabanı örneği olarak adlandırılır mysqldbansible.

Fiyatlandırma katmanları hakkında daha fazla bilgi için bkz. MySQL için Azure Veritabanı fiyatlandırma katmanları.

Aşağıdaki playbook'u mysql_create.yml olarak kaydedin.

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

Playbook'u çalıştırmadan önce aşağıdaki notlara bakın:

  • vars bölümünde mysqlserver_name değerinin benzersiz olması gerekir.
  • vars bölümünde <server_admin_password> yerine bir parola yazın.

Ansible-playbook kullanarak playbook'u çalıştırın

ansible-playbook mysql_create.yml

Güvenlik duvarı kuralı yapılandırma

Sunucu düzeyinde güvenlik duvarı kuralı, dış uygulamanın Azure MySQL hizmeti güvenlik duvarı üzerinden sunucunuza bağlanmasına olanak tanır. Dış uygulamalara örnek olarak mysql komut satırı aracı ve MySQL Workbench verilebilir.

Bu bölümdeki playbook kodu, herhangi bir dış IP adresinden bağlantılara izin veren adlı extenalaccess bir güvenlik duvarı kuralı oluşturur.

Aşağıdaki playbook'u mysql_firewall.yml olarak kaydedin.

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

Playbook'u çalıştırmadan önce aşağıdaki notlara bakın:

  • vars bölümünde startIpAddress ve endIpAddress öğelerini değiştirin. Bağlandığınız aralığa karşılık gelen IP adresleri aralığını kullanın.
  • MySQL için Azure Veritabanı bağlantıları 3306 numaralı bağlantı noktası üzerinden iletişim kurar. Şirket ağı içinden bağlanmaya çalışırsanız 3306 numaralı bağlantı noktası üzerinden giden trafiğe izin verilmiyor olabilir. Bu durumda, BT departmanınız 3306 numaralı bağlantı noktasını açmadığı sürece sunucunuza bağlanamazsınız.
  • Playbook, REST API'nin azure_rm_resource doğrudan kullanımına izin veren modülünü kullanır.

Ansible-playbook kullanarak playbook'u çalıştırın

ansible-playbook mysql_firewall.yml

Sunucuya bağlanma

Bu bölümde, daha önce oluşturduğunuz sunucuya bağlanmak için Azure Cloud Shell'i kullanacaksınız.

  1. Aşağıdan seçim yaparak shell.azure.com açın.

    Ekleme başlatma

  2. Aşağıdaki kodu girin:

    mysql -h mysqlserveransible.mysql.database.azure.com -u mysqladmin@mysqlserveransible -p
    
  3. İstemde, sunucu durumunu sorgulamak için aşağıdaki komutu girin:

    mysql> status
    

    Her şey yolunda giderse aşağıdaki sonuçlara benzer bir çıkış görürsünüz:

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

MySQL sunucularını sorgulama

Bu bölümdeki playbook kodu içindeki myResourceGroup MySQL sunucularını sorgular ve bulunan sunuculardaki veritabanlarını listeler.

Aşağıdaki playbook'u mysql_query.yml olarak kaydedin.

- 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

Ansible-playbook kullanarak playbook'u çalıştırın

ansible-playbook mysql_query.yml

Playbook'u çalıştırdıktan sonra aşağıdaki sonuçlara benzer bir çıktı görürsünüz:

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

MySQL veritabanı için aşağıdaki çıkışı da görürsünüz:

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

Kaynakları temizle

  1. Aşağıdaki kodu olarak delete_rg.ymlkaydedin.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. ansible-playbook komutunu kullanarak playbook'u çalıştırın. Yer tutucuyu silinecek kaynak grubunun adıyla değiştirin. Kaynak grubundaki tüm kaynaklar silinir.

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

    Önemli noktalar:

    • Playbook'un register değişkeni ve debug bölümü nedeniyle, komut tamamlandığında sonuçlar görüntülenir.

Sonraki Adımlar