ゴール
wordpress環境構築、運用することによって、Alibaba Cloudの基礎を学ぶ。
1. 基礎編のゴール
- Alibaba CloudもAWSもbest practiceとしてはセキュリティを高めるために、VMのESCとデータベースのPolarDBは別々のvSwitch(subnet)に配置すべきでありますが、今回の基礎編では一つのvSwitchというシンプルな構成でやってみます。
2. 応用編のゴール
前提知識
全体の流れ
以下の手順で進めていきます。
- VPCとvSwitchの作成
- PolarDBインスタンスの作成
- ECSインスタンスの作成
- Security Groupも新規作成
- wordpressの初期設定
- EIPの設定
- ドメインの購入、DNSの設定
- 片付け
1. 基礎編:最小構成でとにかくwordpressを動かせる
wordpressのimageでECS 1台 + PolarDB(single node)でとりあえずwordpressを動かせて、そしてuserがログインできて、投稿できる状態にします。
とりあえずwordpressを動かすレベルであれば、databaseはECSのローカルで構築、運用する(RDB on ECS)というやり方もありますが、可用性向上やbackup/restoreなどの運用管理は全部自分でやらないとならなくて非常に大変です。今回はマネージドサービスのPolarDBを使います。
以下の記事はAWSでのRDSとRDB on EC2の比較内容ですが、基本的な考え方はAlibaba Cloudも同じです。
VPCとvSwitchの作成
VPC, vSwitch,region, zoneの概念については以下を記事をご参考ください。
- わざわざVPCを事前に作らなくてもPolarDBインスタンスを作るとに、以下のように一つの「Default VPC」が自動的に作られますが、VPCとvSwitchの概念をもっと理解してもらいたいので、手動でVPCとvSwitchを作っておきます。
VPCのCIDR Blockについて以下をご参考ください。
PolarDBインスタンスの作成
PolarDBはAlibaba Cloud社が開発した次世代のクラウドネイティブなリレーショナルデータベースであり、Aibaba cloud版のAuroraだと簡単に思っていただいても構いません。
詳細内容については以下の記事をご確認ください。
- Editionについて
- Cluster: すくなくても2つのnode(primary node一つ、つまりreadとwrite両方できるnodeと read-only node一つ )から構成されている。可用性の必要な本番環境でお勧めのタイプです。
- Archive Database: 名前の通りにECサイトの1年前の購入履歴やチャットアプリでの1年前のチャット履歴など過去の履歴データを効率よく保持管理できるアーカイブ用データベース
- Single Node: 一つのprimary nodeしかありません。テスト環境など本番以外の利用シーンに向いている。
今回はとりあえず動けばよいので、低コストのsingle nodeを利用します。
ECSインスタンスの作成
imageはOS imageで、インスタンスを起動するのに必要なOSやボリュームの情報などのテンプレートのことです。AWSではAWS AMI
と言います。
- public Image: Alibaba Cloud正式に管理、公開しているOS image(ベースしかなくて、wordpressなどのアプリケーションは入っていない)
- Maketplace Image: 第三者提供しているOS image(すでに何かすぐ利用できるアプリケーションが含まれている場合が多い)
- Custom Image: public ImageあるいはMarketplace提供しているOS imageをベースとして必要なlibraryをインストールすることによって作られた自分専用のOS image
public Imageをベースにして、以下のように手動でコマンドでwordpressのpackageをインストールするというやり方もありますが、手間かかるので今回はコマンド実行しなくてもすぐ使えるMarketplace Image上第三者提供されている無料
のOS imageを利用します。
データ転送量について:
- Pay-By-Traffic(トラフィック課金):データ転送量に基づいた課金方式(クラウドから外部への転送データ量)
- Pay-By-Bandwitch(帯域幅課金):ネットワーク帯域幅を指定した固定課金方式
- Security group(firewallの機能)新規作成
-
ECSのpublic IPでwordpressのサイトへアクセスし、以下のページが表示されていることを確認してください。
使っているOS iamgeはwordpressはすでにインストール済み&設定済み(ローカルのmysqlを利用)なので、ここでもwordpress利用できるようになりましたが、今回はECSローカル上のmysql databaseの代わりにPolarDBというデータベースマネージドサービスを使いたいので、databaseへの接続情報を変更します。
ECSでdatabaseへの接続情報を変更
ECSインスタンスにアクセスする方法:
- ローカルPCのSSHクライアント利用:
- セキュリティグループで22番の解放が必要。最も操作性は良い。
- MacOSであれば標準のSSHが利用でき、WindowsOSの場合はTeraTermがおすすめ
- ワークベンチ接続:
- ブラウザを利用してコンソールにアクセスできる。
- 内部はSSH(linuxインスタンスの場合)、RDP(Windowsインスタンスの場合)を利用
- テキストベースのデータ送受信であるため、VNCに比べると比較的軽い。
- VNC接続:
- ブラウザを利用してコンソールにアクセスできる。
- ローカルコンソールの画面データを画像形式で受信するため、操作性は重い。
- 別途専用のVNCパスワードとrootパスワードの設定が必要。
-
ECS instance作成した時に指定されたusernameとpasswordを入力し、ログインする
-
wordpressの設定ファイル中のデータベースアクセスの情報を修正
テキストエディタのVimは初心者にとってハードルが高くて、テキストファイルを編集するためだけにこんな複雑なエディタの使い方を覚えなければならないのかと、絶望的な気持ちになった方もいるだろう。
Vimの代わりに、比較的学習コストの低いエディタnanoを使って、ファイルを変更してください。
nano /jet/app/wordpress/wp-config.php
書き換えた内容の保存とエディタを終了するにはnanoの下部に表示されたショートカットキーを押すことで実施することができる。
PolarDB側のwhitelist設定
- デフォルトの状態では同じVPC、同じZone中のECS instanceからも新規作られたPolarDBインスタンス(RDSも同様)にアクセスできません。
- ECSからPolarDBにアクセスさせるにはPolarDB側のwhitelistにECSのsecurity groupを許可する必要があります。
- デフォルトの状態では、IP Listに
127.0.0.1
のIP(つまりPolarDB instanceの自分のIP)しかないので、つまり自分のインスタンスからしかdatabaseにアクセスできません。が、外からPolarDBもRDSもOSにそもそも直接ログインできないため、外からはdatabaseにアクセスできない。
wordpressの初期設定
もし上記の言語選択の画面が表示されない場合は、以下の3箇所は正しく設定したかどうかをご確認ください。
- ecs側のsecurity groupで 80 portが開放されているかどうか
- ECSでdatabase関連の認証情報は本当にPolarDBで作られたものと一致しているかどうか
- database name
- user name
- password
- PolarDBのendpoint
- database側のwhite listが正しく設定しているかどうか
-
wordpressサイト自体の認証情報を設定
-
wordpressのサイトにログイン
databaseの中身を確認
- ECSにログインした上で、
mysql
のクライアントをインストール
apt-get update
apt install mysql-client-core-5.7
- 以下のコマンドを実行し,PolarDBにログインすします。
- polardb_endpointの部分を実際のPolarDBのendpointに置き換えてください (
-h
はhostのみであり、後ろに:3306
をつけていはいけない。) - passwordは
wp_password2022
を入力して、Enter
keyを押してください。(セキュリティ向上のため、paswordを入力あるいはコピーできたとしても、画面上には何も表示されません。そのままEnter
keyを押して問題ありません。)
- polardb_endpointの部分を実際のPolarDBのendpointに置き換えてください (
[root@iZ6we5ut1houhchtjt7o1jZ ~]# mysql -h polardb_endpoint -uwp_user -p
Enter password:
...
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| wp_db |
+--------------------+
2 rows in set (0.00 sec)
mysql> use wp_db;
Database changed
mysql> show tables;
+-----------------------+
| Tables_in_wordpress |
+-----------------------+
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
+-----------------------+
12 rows in set (0.00 sec)
# 初期の状態でデフォルトで入っている1件目の投稿内容を確認
mysql> select * from wp_posts limit 1;
+----+-------------+---------------------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+--------------+-------------+----------------+-------------+---------------+-------------+---------+--------+---------------------+---------------------+-----------------------+-------------+---------------------------+------------+-----------+----------------+---------------+
| ID | post_author | post_date | post_date_gmt | post_content | post_title | post_excerpt | post_status | comment_status | ping_status | post_password | post_name | to_ping | pinged | post_modified | post_modified_gmt | post_content_filtered | post_parent | guid | menu_order | post_type | post_mime_type | comment_count |
+----+-------------+---------------------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+--------------+-------------+----------------+-------------+---------------+-------------+---------+--------+---------------------+---------------------+-----------------------+-------------+---------------------------+------------+-----------+----------------+---------------+
| 1 | 1 | 2022-09-20 01:50:18 | 2022-09-19 16:50:18 | <!-- wp:paragraph -->
<p>WordPress へようこそ。こちらは最初の投稿です。編集または削除し、コンテンツ作成を始めてください。</p>
<!-- /wp:paragraph --> | Hello world! | | publish | open | open | | hello-world | | | 2022-09-20 01:50:18 | 2022-09-19 16:50:18 | | 0 | http://47.245.52.171/?p=1 | 0 | post | | 1 |
+----+-------------+---------------------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+--------------+-------------+----------------+-------------+---------------+-------------+---------+--------+---------------------+---------------------+-----------------------+-------------+---------------------------+------------+-----------+----------------+---------------+
1 row in set (0.00 sec)
EIPによるサーバーIPの固定:
- 普通のpublic IPとEIPの違い:
AWSにも同じEIPという仕組みがありますが、以下の違いがあります。
- Alibaba CloudのEIP: 自動的に作られたpublic IPをIPアドレス変わらずにそのままEIPに変更できます。
- AWSのEIP:自動的に作られたpublic IPはEIPに変更できなくて、別途新しいEIPを作成してから、EC2にattachするという手順で作業する必要があり、ちょっと手間がかかってしまいます。
ドメインの購入、DNS設定
blogを運営する場合は、サーバーのIPではなく、専用のドメインを使ってuserにアクエスしてもらいたいだろう。
Alibaba Cloudでもドメインの購入、そしてDNS関連の設定できるサービスがあります。
ドメインは申請してから許可されるまでは数日かかるので、今回は実際にドメインを購入しないのですが、興味がありましたら、以下の手順を参考しながらやっていただければOKです。
- Alibaba Domainsでサイトのドメインを購入
- DNS設定
個人レベルのブログの場合、同時リクエストはよっぽど多くなけれれば、この構成が十分だと思います。
2. 片付け
-
課金されるリソース → リリース(つまり削除)してください。
-
課金されないリソース →削除しなくても問題ありません。
- VPC
- vSwitch
- security group(firewall)
リリース(削除)せず、停止すると、instaceのrunning costがかからなくなりますが、instanceのストレージはまだ料金がかかってしまいますので、停止ではなく、完全的にリリース(削除)したほうがよいです。
3. 応用編について
今回のhandsonではVMのECS、cloud nativeなデータベースのPolarDBでwordpressサイトを構築することによって、Alibaba Cloudの基礎を学んできました。
可用性の向上やキャッシュサーバーの導入や拡張性の向上など更に高度な内容に興味がありましたら、ぜひAlibaba Cloudのbootcampに来てください。
1. 可用性の向上
ECSの冗長化+ load balancer:
- 2台のECS + SLB: ユーザーからのリクエストを自動的に2台のECSに負荷分散してくれることを検証
- ECS1台落ちても(強制的にshutdownさせる)サービスは継続的に提供できることを検証
- SLBにSSL証明書をつけて、httpsからサイトにアクセスできることを検証
データベースの冗長化
- PolarDBインスタンスが落ちたらサービス利用できなくなることを検証
- PolarDBをsingle node構成からCluster構成(primary node 1台 + Read-only node 1台)に変更し、primary node crashした時にDBのfailover仕組みを検証し、DBの可用性向上の仕組みを検証
2. staticコンテンツのキャッシュ
- CDNによるコンテンツキャシュの効果を検証
3. ECSローカルストレージ容量不足を解決する方法(OSSを活用):
- wordpressからファイルをOSSにuploadできるようにする
https://www.wpcom.cn/tutorial/174.html
4. キャッシュサーバーRedisの導入
5. 拡張性向上
アプリケーションサーバーのautoscaling
- instance台数固定:ECSを2台に固定し、1台のECSが落ちたら(強制的にshutdownさせることでシミュレーション)、自動的に新しいECS instanceが立ち上がることを検証
- 処理の負荷に応じて自動的に台数追加・削減されることを検証(処理に負荷をかけてみる)