중요합니다
이 문서의 샘플 플레이북을 실행하려면 Ansible 2.7 이상이 필요합니다.
Azure Database for MySQL 은 MySQL Community Edition을 기반으로 하는 관계형 데이터베이스 서비스입니다. Azure Database for MySQL을 사용하면 웹앱에서 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 서버는 하나의 vCore가 있는 Gen 5 기본 목적 서버이며 이름은 mysqlserveransible입니다. 데이터베이스 인스턴스의 이름이 지정 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 서버 쿼리
이 섹션의 플레이북 코드는 MySQL 서버를 myResourceGroup 쿼리하고 찾은 서버의 데이터베이스를 나열합니다.
다음 플레이북을 다음과 같이 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: rgansible-playbook 명령을 사용하여 플레이북을 실행합니다. 자리 표시자를 삭제할 리소스 그룹의 이름으로 바꿉니다. 리소스 그룹 내의 모든 리소스가 삭제됩니다.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"핵심 사항:
- 플레이북의
register변수와debug섹션 때문에 명령이 완료되면 결과가 표시됩니다.
- 플레이북의