チュートリアル:Azure Database for MySQL - フレキシブル サーバーを使用して WordPress アプリを AKS にデプロイする
適用対象: Azure Database for MySQL - フレキシブル サーバー
このクイックスタートでは、Azure CLI を使用して、Azure Database for MySQL - フレキシブル サーバーで Azure Kubernetes Service (AKS) クラスターに WordPress アプリケーションをデプロイします。 AKS は、クラスターをすばやくデプロイして管理できるマネージド Kubernetes サービスです。 Azure Database for MySQL フレキシブル サーバー は、データベース管理機能と構成設定のよりきめ細かな制御と柔軟性を提供するように設計されたフル マネージド データベース サービスです。
注意
このクイックスタートは、Kubernetes の概念、WordPress、MySQL.に関する基礎知識があることを前提としています。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。 Azure 無料アカウントがあれば、Azure Database for MySQL - フレキシブル サーバーを 12 か月間無料でお試しいただけます。 詳細な情報については、「フレキシブル サーバーを無料で試す」を参照してください。
前提条件
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
- この記事では、Azure CLI の最新バージョンが必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。
注意
このクイックスタートのコマンドを (Azure Cloud Shell ではなく) ローカルで実行する場合は、必ず管理者としてコマンドを実行してください。
リソース グループを作成する
Azure リソース グループは、Azure リソースが展開され管理される論理グループです。 [az group create][az-group-create] コマンドを実行して、eastus の場所に wordpress-project というリソース グループを作成しましょう。
az group create --name wordpress-project --location eastus
注意
リソース グループの場所は、リソース グループのメタデータが保存される場所です。 また、リソースの作成時に別のリージョンを指定しない場合に、Azure でリソースが実行される場所でもあります。
次の出力例では、正常に作成されたリソース グループが示されています。
{
"id": "/subscriptions/<guid>/resourceGroups/wordpress-project",
"location": "eastus",
"managedBy": null,
"name": "wordpress-project",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
AKS クラスターの作成
AKS クラスターを作成するには、az aks create コマンドを使用します。 次の例では、myAKSCluster という名前のクラスターを 1 つのノードで作成します。 これは完了までに数分かかる場合があります。
az aks create --resource-group wordpress-project --name myAKSCluster --node-count 1 --generate-ssh-keys
数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。
注意
AKS クラスターを作成すると、AKS リソースを保存するための 2 つ目のリソース グループが自動的に作成されます。 「AKS と一緒にリソース グループが 2 つ作成されるのはなぜでしょうか?」を参照してください。
クラスターに接続する
Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使用します。 Azure Cloud Shell を使用している場合、kubectl
は既にインストールされています。 kubectl
をローカルにインストールするには、az aks install-cli コマンドを使用します。
az aks install-cli
Kubernetes クラスターに接続するように kubectl
を構成するには、az aks get-credentials コマンドを使用します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。
az aks get-credentials --resource-group wordpress-project --name myAKSCluster
Note
上記のコマンドは、Kubernetes 構成ファイルの既定の場所 (~/.kube/config
) を使用します。 --file を使用すると、Kubernetes 構成ファイルに対して別の場所を指定できます。
クラスターへの接続を確認するには、クラスター ノードの一覧を返す kubectl get コマンドを使用します。
kubectl get nodes
次の出力例は、前の手順で作成した単一ノードを示しています。 ノードの状態が "準備完了" であることを確認します。
NAME STATUS ROLES AGE VERSION
aks-nodepool1-31718369-0 Ready agent 6m44s v1.12.8
Azure Database for MySQL - フレキシブル サーバーを作成する
az mysql flexible-server create コマンドを使用して、フレキシブル サーバーを作成します。 次のコマンドでは、サービスの既定値と Azure CLI のローカル コンテキストからの値を使用してサーバーを作成します。
az mysql flexible-server create --public-access <YOUR-IP-ADDRESS>
作成されたサーバーには、次の属性があります。
- サーバーが最初にプロビジョニングされたときに、新しい空のデータベース
flexibleserverdb
が作成されます。 このクイックスタートでは、このデータベースを使用します。 - 自動生成されたサーバー名、管理者ユーザー名、管理者パスワード、リソース グループ名 (ローカル コンテキストでまだ指定されていない場合)、およびリソース グループと同じ場所
- 残りのサーバー構成のサービスの既定値: コンピューティング レベル (バースト可能)、コンピューティング サイズ/SKU (B1MS)、バックアップの保持期間 (7 日間)、および MySQL のバージョン (5.7)
- public-access 引数を使用すると、パブリック アクセスがファイアウォール規則で保護されたサーバーを作成できます。 IP アドレスを指定して、クライアント マシンからのアクセスを許可するファイアウォール規則を追加します。
- このコマンドはローカル コンテキストを使用しているため、
eastus
リージョンのwordpress-project
リソース グループにサーバーが作成されます。
コンテナーの定義
次の例では、Nginx Web サーバーと PHP FastCGI プロセッサの 2 つのコンテナーを作成していますが、これは、Docker Hub で公開されている nginx
と wordpress
(FastCGI をサポートする fpm
バージョン) の公式の Docker イメージに基づいています。
または、カスタムの Docker イメージをビルドし、イメージを Docker ハブまたは Azure Container Registry にデプロイすることもできます。
重要
Azure Container Registry (ACR) を使用している場合は、az aks update
コマンドを実行して ACR アカウントを AKS クラスターに接続します。
az aks update -n myAKSCluster -g wordpress-project --attach-acr <your-acr-name>
Kubernetes マニフェスト ファイルを作成する
Kubernetes のマニフェスト ファイルでは、どのコンテナー イメージを実行するかなど、クラスターの望ましい状態を定義します。 mywordpress.yaml
という名前のマニフェスト ファイルを作成し、次の YAML 定義をコピーしましょう。
重要
- MySQL フレキシブル サーバーの
SERVERNAME
、YOUR-DATABASE-USERNAME
、YOUR-DATABASE-PASSWORD
で下記のenv
セクションを更新します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: wp-blog
spec:
replicas: 1
selector:
matchLabels:
app: wp-blog
template:
metadata:
labels:
app: wp-blog
spec:
containers:
- name: wp-blog-nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: config
mountPath: /etc/nginx/conf.d
- name: wp-persistent-storage
mountPath: /var/www/html
- name: wp-blog-php
image: wordpress:fpm
ports:
- containerPort: 9000
volumeMounts:
- name: wp-persistent-storage
mountPath: /var/www/html
env:
- name: WORDPRESS_DB_HOST
value: "<<SERVERNAME.mysql.database.azure.com>>" #Update here
- name: WORDPRESS_DB_USER
value: "<<YOUR-DATABASE-USERNAME>>" #Update here
- name: WORDPRESS_DB_PASSWORD
value: "<<YOUR-DATABASE-PASSWORD>>" #Update here
- name: WORDPRESS_DB_NAME
value: "<<flexibleserverdb>>"
- name: WORDPRESS_CONFIG_EXTRA # enable SSL connection for MySQL
value: |
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
volumes:
- name: config
configMap:
name: wp-nginx-config
items:
- key: config
path: site.conf
- name: wp-persistent-storage
persistentVolumeClaim:
claimName: wp-pv-claim
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- wp-blog
topologyKey: "kubernetes.io/hostname"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
labels:
app: wp-blog
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: v1
kind: Service
metadata:
name: blog-nginx-service
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: wp-blog
---
apiVersion: v1
kind: ConfigMap
metadata:
name: wp-nginx-config
data:
config : |
server {
listen 80;
server_name localhost;
root /var/www/html/;
access_log /var/log/nginx/wp-blog-access.log;
error_log /var/log/nginx/wp-blog-error.log error;
index index.html index.htm index.php;
location ~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
expires max;
index index.php index.html index.htm;
try_files $uri =404;
}
location / {
index index.php index.html index.htm;
if (-f $request_filename) {
expires max;
break;
}
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php?q=$1 last;
}
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass localhost:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
WordPress を AKS クラスターにデプロイする
kubectl apply コマンドを使用してアプリケーションをデプロイし、ご利用の YAML マニフェストの名前を指定します。
kubectl apply -f mywordpress.yaml
次の出力例は、正常に作成されたデプロイおよびサービスを示しています。
deployment "wordpress-blog" created
service "blog-nginx-service" created
アプリケーションをテストする
アプリケーションが実行されると、Kubernetes サービスによってアプリケーション フロント エンドがインターネットに公開されます。 このプロセスが完了するまでに数分かかることがあります。
進行状況を監視するには、kubectl get service コマンドを --watch
引数と一緒に使用します。
kubectl get service blog-nginx-service --watch
最初は、wordpress-blog サービスの EXTERNAL-IP が pending (保留中) として表示されます。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
blog-nginx-service LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
EXTERNAL-IP アドレスが "保留中" から実際のパブリック IP アドレスに変わったら、CTRL-C
を使用して kubectl
ウォッチ プロセスを停止します。 次の出力例は、サービスに割り当てられている有効なパブリック IP アドレスを示しています。
blog-nginx-service LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
WordPress を参照する
Web ブラウザーを開いてサービスの外部 IP アドレスにアクセスすると、WordPress のインストール ページが表示されます。
注意
- 現在、WordPress サイトでは HTTPS は使用されていません。 独自の証明書を使用して TLS を有効にすることをお勧めします。
- クラスターの HTTP ルーティングを有効にすることができます。
リソースのクリーンアップ
Azure の課金を回避するには、不要なリソースをクリーンアップする必要があります。 クラスターが必要なくなったら、az group delete コマンドを使って、リソース グループ、コンテナー サービス、およびすべての関連リソースを削除してください。
az group delete --name wordpress-project --yes --no-wait
注意
クラスターを削除したとき、AKS クラスターで使用される Azure Active Directory サービス プリンシパルは削除されません。 サービス プリンシパルを削除する手順については、AKS のサービス プリンシパルに関する考慮事項と削除に関するページを参照してください。 マネージド ID を使用した場合、ID はプラットフォームによって管理されるので、削除する必要はありません。
次のステップ
- AKS クラスターの Kubernetes Web ダッシュボードにアクセスする方法を学習する
- クラスターをスケーリングする方法を学習する
- MySQL フレキシブル サーバーを管理する方法を学習する
- データベース サーバーのサーバー パラメーターを構成する方法を学習する