重要
この記事のサンプル プレイブックを実行するには、Ansible 2.7 (以降) が必要です。
Azure Database for MySQL は、MySQL Community Edition に基づくリレーショナル データベース サービスです。 Azure Database for MySQL では、Web アプリ内の MySQL データベースを管理できます。
この記事では、次のことについて説明します。
- MySql サーバーを作成する
- MySql データベースを作成する
- 外部のアプリがサーバーに接続できるように、ファイアウォール規則を構成する
- Azure Cloud Shell から MySql サーバーに接続する
- 使用可能な MySQL サーバーをクエリする
- 接続されているサーバー内のすべてのデータベースを一覧表示する
前提条件
- Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
Ansible のインストール: 次のいずれかのオプションを実行します。
- Linux 仮想マシンに Ansible をインストールして構成する
- Azure Cloud Shell の構成 - アクセスできる Linux 仮想マシンがない場合は、Ansible で仮想マシンを作成できます。
リソース グループを作成する
このセクションのプレイブック コードでは、Azure リソース グループを作成します。 リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。
次のプレイブックを rg.yml
という名前で保存します。
- hosts: localhost
vars:
resource_group: myResourceGroup
location: eastus
tasks:
- name: Create a resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
プレイブックを実行する前に、次の注意事項を参照してください。
myResourceGroup
という名前のリソース グループが作成されます。- リソース グループが作成される場所は
eastus
です。
ansible-playbook を使用してプレイブックを実行します
ansible-playbook rg.yml
MySQL サーバーとデータベースの作成
このセクションのプレイブック コードでは、MySQL サーバーと Azure Database for MySQL インスタンスを作成します。 新しい MySQL サーバーは、1 つの仮想コアを持ち、mysqlserveransible
という名前の Gen 5 Basic Purpose サーバーです。 データベース インスタンスの名前は mysqldbansible
です。
価格レベルの詳細については、「Azure Database for MySQL の価格レベル」を参照してください。
次のプレイブックを 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 }}"
プレイブックを実行する前に、次の注意事項を参照してください。
vars
セクションのmysqlserver_name
の値は一意である必要があります。vars
セクションの<server_admin_password>
をパスワードで置き換えます。
ansible-playbook を使用してプレイブックを実行します
ansible-playbook mysql_create.yml
ファイアウォール規則を構成する
サーバーレベルのファイアウォール規則により、外部アプリが、Azure MySQL サービスのファイアウォールを経由してサーバーに接続できるようになります。 外部アプリの例として、mysql
コマンド ライン ツールや MySQL Workbench が挙げられます。
このセクションのプレイブック コードでは、外部の IP アドレスからの接続を許可する、extenalaccess
という名前のファイアウォール規則を作成します。
次のプレイブックを 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"
プレイブックを実行する前に、次の注意事項を参照してください。
- vars セクションで、
startIpAddress
とendIpAddress
を置き換えます。 接続元となる範囲に対応する IP アドレスの範囲を使用してください。 - Azure Database for MySQL との接続では、ポート 3306 が通信に使用されます。 企業ネットワーク内から接続を試みる場合、ポート 3306 での送信トラフィックが許可されていない場合があります。 その場合、会社の IT 部門によってポート 3306 が開放されない限り、サーバーに接続することはできません。
- このプレイブックでは、REST API の直接使用を許可する
azure_rm_resource
モジュールを使用します。
ansible-playbook を使用してプレイブックを実行します
ansible-playbook mysql_firewall.yml
サーバーへの接続
このセクションでは、以前に作成したサーバーへ接続するために Azure Cloud Shell を使用します。
下のボタンを選択して shell.azure.com を開きます。
次のコードを入力します。
mysql -h mysqlserveransible.mysql.database.azure.com -u mysqladmin@mysqlserveransible -p
プロンプトで、次のコマンドを入力してサーバーの状態をクエリします。
mysql> status
すべて正常に実行されると、次の結果のような出力が表示されます。
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 サーバーをクエリする
このセクションのプレイブック コードでは、myResourceGroup
内の MySQL サーバーをクエリし、検出されたサーバー上のデータベースを一覧表示します。
次のプレイブックを 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
ansible-playbook を使用してプレイブックを実行します
ansible-playbook mysql_query.yml
プレイブックを実行すると、次の結果のような出力が表示されます。
"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 データベースに関して次の出力も表示されます。
"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"
}
]
リソースをクリーンアップする
delete_rg.yml
として次のコードを保存します。--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
ansible-playbook コマンドを使用してプレイブックを実行します。 プレースホルダーは、削除するリソース グループの名前に置き換えます。 リソース グループ内のすべてのリソースが削除されます。
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
重要なポイント:
- プレイブックの
register
変数とdebug
セクションにより、コマンドの完了時に結果が表示されます。
- プレイブックの