Tutorial: Mengonfigurasi database di Azure Database for MySQL menggunakan Ansible

Penting

Ansible 2.7 (atau yang lebih baru) diperlukan agar dapat menjalankan playbook contoh dalam artikel ini.

Azure Database for MySQL adalah layanan database relasional berdasarkan MySQL Community Edition. Azure Database for MySQL memungkinkan Anda mengelola database MySQL di aplikasi web Anda.

Dalam artikel ini, Anda akan mempelajari cara:

  • Membuat server MySql
  • Membuat database MySQL
  • Mengonfigurasi aturan firewall sehingga aplikasi eksternal dapat tersambung ke server Anda
  • Menyambungkan ke server MySql Anda dari Azure Cloud Shell
  • Mengkueri server MySQL yang tersedia
  • Mencantumkan semua database di server yang tersambung

Prasyarat

  • Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.

Membuat grup sumber daya

Kode playbook pada bagian ini membuat grup sumber daya Azure. Grup sumber daya adalah kontainer logis tempat sumber daya Azure disebarkan dan dikelola.

Simpan playbook berikut sebagai rg.yml:

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

Sebelum menjalankan playbook, lihat catatan berikut:

  • Grup sumber daya bernama myResourceGroup dibuat.
  • Grup sumber daya dibuat di eastus lokasi:

Jalankan playbook menggunakan ansible-playbook

ansible-playbook rg.yml

Membuat server dan database MySQL

Kode playbook di bagian ini membuat server MySQL dan Azure Database for MySQL instance. Server MySQL baru adalah server Tujuan Dasar Gen 5 dengan satu vCore dan diberi nama mysqlserveransible. Instans database diberi nama mysqldbansible.

Untuk informasi selengkapnya tentang tingkat harga, lihat Tingkat harga Azure Database for MySQL.

Simpan playbook berikut sebagai 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 }}"

Sebelum menjalankan playbook, lihat catatan berikut:

  • Pada bagian vars, nilai mysqlserver_name harus unik.
  • Di bagian , vars ganti <server_admin_password> dengan kata sandi.

Jalankan playbook menggunakan ansible-playbook

ansible-playbook mysql_create.yml

Mengonfigurasi aturan firewall

Aturan firewall tingkat server memungkinkan aplikasi eksternal untuk terhubung ke server Anda melalui firewall layanan Azure MySQL. Contoh aplikasi eksternal adalah mysql alat baris perintah dan MySQL Workbench.

Kode playbook di bagian ini membuat aturan firewall bernama extenalaccess yang memungkinkan koneksi dari alamat IP eksternal apa pun.

Simpan playbook berikut sebagai 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"

Sebelum menjalankan playbook, lihat catatan berikut:

  • Di bagian vars, ganti startIpAddress dan endIpAddress. Gunakan rentang alamat IP yang sesuai dengan rentang dari mana Anda akan terhubung.
  • Koneksi ke Azure Database for MySQL berkomunikasi melalui port 3306. Jika Anda mencoba terhubung dari dalam jaringan perusahaan, lalu lintas keluar melalui port 3306 mungkin tidak diizinkan. Dalam hal ini, Anda tidak dapat terhubung ke server Anda kecuali departemen TI Anda membuka port 3306.
  • Playbook menggunakan modul azure_rm_resource, yang memungkinkan penggunaan langsung API REST.

Jalankan playbook menggunakan ansible-playbook

ansible-playbook mysql_firewall.yml

Terhubung ke server

Di bagian ini, Anda menggunakan Azure Cloud Shell untuk menyambungkan ke server yang Anda buat sebelumnya.

  1. Buka shell.azure.com dengan memilih di bawah ini.

    Sematkan peluncuran

  2. Masukkan kode berikut:

    mysql -h mysqlserveransible.mysql.database.azure.com -u mysqladmin@mysqlserveransible -p
    
  3. Pada perintah , masukkan perintah berikut untuk mengkueri status server:

    mysql> status
    

    Jika semuanya berjalan dengan baik, Anda akan melihat output yang mirip dengan hasil berikut:

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

Melakukan kueri pada server MySQL

Kode playbook di bagian ini mengirimkan kueri ke server MySQL di myResourceGroup dan mencantumkan database pada server yang ditemukan.

Simpan playbook berikut sebagai 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

Jalankan playbook menggunakan ansible-playbook

ansible-playbook mysql_query.yml

Setelah menjalankan playbook, Anda akan melihat output yang mirip dengan hasil berikut:

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

Anda juga melihat output berikut untuk 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"
    }
]

Membersihkan sumber daya

  1. Simpan kode berikut sebagai delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Jalankan playbook menggunakan perintah ansible-playbook . Ganti placeholder dengan nama grup sumber daya yang akan dihapus. Semua sumber daya dalam grup sumber daya akan dihapus.

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

    Poin utama:

    • register Karena variabel dan debug bagian dari playbook, hasilnya ditampilkan saat perintah selesai.

Langkah selanjutnya