1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

wordpressの構築に通じてAlibaba Cloudの基礎を学びましょう

Last updated at Posted at 2022-09-22

ゴール

wordpress環境構築、運用することによって、Alibaba Cloudの基礎を学ぶ。

1. 基礎編のゴール

image.png

  • Alibaba CloudもAWSもbest practiceとしてはセキュリティを高めるために、VMのESCとデータベースのPolarDBは別々のvSwitch(subnet)に配置すべきでありますが、今回の基礎編では一つのvSwitchというシンプルな構成でやってみます。

2. 応用編のゴール

image.png

前提知識

全体の流れ

以下の手順で進めていきます。

  • 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を作っておきます。
    image.png
    • vpcを検索して、VPCのコンソール画面に遷移
      image.png

    • Japan(Tokyo) のregionを選択した上で、「Create VPC」ボタンをクリックして、新しいVPCを作成しましょう。
      image.png

    • VPCの情報

      • VPCの名前: WORDPRESS_VPC
      • VPCのCIDR Block: 192.168.0.0/16
        image.png

VPCのCIDR Blockについて以下をご参考ください。

  • 同時にvSwitchも新規作成
    • VPC作成した後で別途vSwitchを作成することもできますが、手間かかるので、こちらでは同時に作成します。
      image.png
  • 以下の画面が表示されましたら、VPCとvSwitchが正常に作られたことになります。
    image.png
  • 作成した内容を確認してみます
    • VPC一覧画面に戻します
      image.png
    • 新規作成されたVPCの詳細画面に遷移
      • 2つのvSwitch以外も一つのRoute Tableが作られたことがわ分かる。
        image.png

PolarDBインスタンスの作成

PolarDBはAlibaba Cloud社が開発した次世代のクラウドネイティブなリレーショナルデータベースであり、Aibaba cloud版のAuroraだと簡単に思っていただいても構いません。
詳細内容については以下の記事をご確認ください。

  • PolarDBのコンソール画面に移動
    image.png
  • 新しいPolarDB Clusterを作成
    image.png
  • 以下の情報を入力
    • 課金タイプについて

image.png

  • Editionについて
    • Cluster: すくなくても2つのnode(primary node一つ、つまりreadとwrite両方できるnodeと read-only node一つ )から構成されている。可用性の必要な本番環境でお勧めのタイプです。
    • Archive Database: 名前の通りにECサイトの1年前の購入履歴やチャットアプリでの1年前のチャット履歴など過去の履歴データを効率よく保持管理できるアーカイブ用データベース
    • Single Node: 一つのprimary nodeしかありません。テスト環境など本番以外の利用シーンに向いている。 
      今回はとりあえず動けばよいので、低コストのsingle nodeを利用します。
  • Time ZoneをUTC+9:00(つまり日本時間)を選択し、Buy Nowボタンをクリック
    image.png

  • プレビュー画面で内容を確認して、 Terms of Serviceをチェックし、Activate Nowボタンをクリック
    image.png

  • PolarDBの一覧画面で新規作られたpolardbを確認
    image.png

  • console画面から必要なdatabaseを作成
    image.png

    • wp_dbというdatabase nameを入力し、それ以外の内容はデフォルトのままで作成
      image.png
  • databaseへアクセスできるaccount/userを作成
    image.png

  • Account Nameにwp_user、Passwordにwp_password2022を入力
    image.png

ECSインスタンスの作成

  • ECS一覧画面へ遷移
    image.png
  • ECSインスタンスを作成
    image.png

image.png

image.png

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を利用します。

https://www.rem-system.com/centos-wp-install/

image.png

image.png

image.png

image.png

データ転送量について:

  • Pay-By-Traffic(トラフィック課金):データ転送量に基づいた課金方式(クラウドから外部への転送データ量)
  • Pay-By-Bandwitch(帯域幅課金):ネットワーク帯域幅を指定した固定課金方式
  • Security group(firewallの機能)新規作成
    • 特になにもしなくてもDefault Security Groupが作られますが、Security Groupをもっと理解していただくために、あえて手動で新しいSecurity Groupを作成しておきます。
      image.png
      • sg_wordpressというNameを入力
        image.png

image.png

image.png

  • ECSへログインするための認証情報を設定(key Pairもできますが、今回はやりやすいPasswordを利用)
    • パスワード: Ecs_password
      image.png

image.png

  • 最後の画面で内容を確認してから、instanceを作成します。
    image.png

  • ECSのpublic IPでwordpressのサイトへアクセスし、以下のページが表示されていることを確認してください。
    image.png
    使っているOS iamgeはwordpressはすでにインストール済み&設定済み(ローカルのmysqlを利用)なので、ここでもwordpress利用できるようになりましたが、今回はECSローカル上のmysql databaseの代わりにPolarDBというデータベースマネージドサービスを使いたいので、databaseへの接続情報を変更します。

ECSでdatabaseへの接続情報を変更

image.png

  • ECS instanceにログインします
    • instanceの詳細画面のConnectボタンをクリック
      image.png
    • Workbench Connectionでinstanceに接続
      image.png

ECSインスタンスにアクセスする方法:

  1. ローカルPCのSSHクライアント利用:
    • セキュリティグループで22番の解放が必要。最も操作性は良い。​
    • MacOSであれば標準のSSHが利用でき、WindowsOSの場合はTeraTermがおすすめ
  2. ワークベンチ接続​:
    • ブラウザを利用してコンソールにアクセスできる。​
    • 内部はSSH(linuxインスタンスの場合)、RDP(Windowsインスタンスの場合)を利用
    • テキストベースのデータ送受信であるため、VNCに比べると比較的軽い。
  3. VNC接続​:
    • ブラウザを利用してコンソールにアクセスできる。
    • ローカルコンソールの画面データを画像形式で受信するため、操作性は重い。​
    • 別途専用のVNCパスワードとrootパスワードの設定が必要。​
  • ECS instance作成した時に指定されたusernameとpasswordを入力し、ログインする

    • username: root
    • password: Ecs_password
      image.png
    • 以下の画面が表示できたら、正常にECSインスタンスにログインできたということになります。
      image.png
  • wordpressの設定ファイル中のデータベースアクセスの情報を修正

    • vi /jet/app/wordpress/wp-config.phpというコマンドを入力して、Enterkeyを押してください。
      image.png

    • iを入力して、編集モードになってから、以下のように修正してください。
      image.png

    • 修正内容:

      • DB_NAME: wp_db
      • DB_USER: wp_user
      • DB_PASSWORD: wp_password2022
      • DB_HOST: PolarDBのendpoint取得方法は以下をご確認ください。
        image.png
    • 設定ファイルを保存

      • キーボボード上のescのkeyを押してから、:wqを入力し、左下に以下のように:wqが表示されましたら、Enterのkeyを押してください。
        image.png
      • 以下の画面に戻ったら、設定ファイルは正しく変更できたということです。
        image.png

テキストエディタのVimは初心者にとってハードルが高くて、テキストファイルを編集するためだけにこんな複雑なエディタの使い方を覚えなければならないのかと、絶望的な気持ちになった方もいるだろう。
Vimの代わりに、比較的学習コストの低いエディタnanoを使って、ファイルを変更してください。
nano /jet/app/wordpress/wp-config.php
書き換えた内容の保存とエディタを終了するにはnanoの下部に表示されたショートカットキーを押すことで実施することができる。

  • Ctrl-Xを押す(Ctrlキーを押しながらXキーを押す)
  • Ctrl-Xキーを押すと、下記の画面のように、ファイルの編集内容を保存するかどうかをYesまたはNoCancelの形で尋ねられる。
  • Yを押して保存と終了させる
    image.png

PolarDB側のwhitelist設定

image.png

  • デフォルトの状態では同じ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にアクセスできない。

image.png

wordpressの初期設定

  • ECSインスタンスの一覧画面へ移動し、新規作られたECSインスタンスをクリックし、詳細画面に遷移
    image.png

  • ECSのpublic IPをcopyし、ブラウザの新しいtabで該当のpublic IPをペーストしてアクセスします。
    image.png

もし上記の言語選択の画面が表示されない場合は、以下の3箇所は正しく設定したかどうかをご確認ください。

  1. ecs側のsecurity groupで 80 portが開放されているかどうか
  2. ECSでdatabase関連の認証情報は本当にPolarDBで作られたものと一致しているかどうか
    • database name
    • user name
    • password
    • PolarDBのendpoint
  3. database側のwhite listが正しく設定しているかどうか

image.png

  • wordpressの言語を選択
    image.png

  • wordpressサイト自体の認証情報を設定

    • サイトのタイトル: wordpress_test
    • ユーザ名: wp_site_user
    • パスワード: wp_site_password
    • メールアドレス: 自分のメールアドレス
      image.png
  • wordpressのサイトにログイン

    • 以下のログインボタンをクリックする、あるいは ip/wp-login.phpのURL(ipの部分を実際のECSのIPに置き換えてください)へアクセスしてください。
    • ユーザ名:wp_site_user
    • パスワード:wp_site_password
      image.png

    image.png

  • 以下の画面が表示されたら、wordpressの最低限の環境構築ができました。
    image.png

  • 投稿一覧を確認してみます。
    image.png

databaseの中身を確認

  • ECSにログインした上で、mysqlのクライアントをインストール
apt-get update
apt install mysql-client-core-5.7

image.png

  • 以下のコマンドを実行し,PolarDBにログインすします。
    • polardb_endpointの部分を実際のPolarDBのendpointに置き換えてください (-hはhostのみであり、後ろに:3306をつけていはいけない。)
    • passwordはwp_password2022を入力して、Enterkeyを押してください。(セキュリティ向上のため、paswordを入力あるいはコピーできたとしても、画面上には何も表示されません。そのままEnterkeyを押して問題ありません。)
[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の違い:

image.png

image.png

  • 変換されたEIPを確認
    image.png

image.png

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. 片付け

  • 課金されるリソース → リリース(つまり削除)してください。

    • ECS instance
      image.png

    • PolarDB instance
      image.png

    • EIP
      image.png

  • 課金されないリソース →削除しなくても問題ありません。

    • 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を活用):

4. キャッシュサーバーRedisの導入

5. 拡張性向上

アプリケーションサーバーのautoscaling

  • instance台数固定:ECSを2台に固定し、1台のECSが落ちたら(強制的にshutdownさせることでシミュレーション)、自動的に新しいECS instanceが立ち上がることを検証
  • 処理の負荷に応じて自動的に台数追加・削減されることを検証(処理に負荷をかけてみる)

databaseのautoscaling

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?