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

# ゴール
wordpress環境構築、運用することによって、Alibaba Cloudの基礎を学ぶ。
## 1. 基礎編のゴール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/de2d3730-59d1-45e8-6234-3522e2e05a4d.png)

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

## 2. 応用編のゴール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/ee3cf0e1-0c4c-436e-5615-1b8723c78399.png)

# 前提知識
https://qiita.com/dennis_wang/items/96368cbbd24130b035e8

# 全体の流れ
以下の手順で進めていきます。
- VPCとvSwitchの作成
- PolarDBインスタンスの作成
- ECSインスタンスの作成
  - Security Groupも新規作成
- wordpressの初期設定
- EIPの設定
- ドメインの購入、DNSの設定
- 片付け

# 1. 基礎編：最小構成でとにかくwordpressを動かせる
wordpressのimageでECS 1台 + PolarDB(single node)でとりあえずwordpressを動かせて、そしてuserがログインできて、投稿できる状態にします。

:::note info
とりあえずwordpressを動かすレベルであれば、databaseはECSのローカルで構築、運用する(RDB on ECS)というやり方もありますが、可用性向上やbackup/restoreなどの運用管理は全部自分でやらないとならなくて非常に大変です。今回はマネージドサービスのPolarDBを使います。
:::
以下の記事はAWSでのRDSとRDB on EC2の比較内容ですが、基本的な考え方はAlibaba Cloudも同じです。

https://dev.classmethod.jp/articles/rds-availability-multiaz/


## VPCとvSwitchの作成
VPC, vSwitch,region, zoneの概念については以下を記事をご参考ください。

https://qiita.com/dennis_wang/items/96368cbbd24130b035e8#%E3%83%AA%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3--%E3%82%BE%E3%83%BC%E3%83%B3

- わざわざVPCを事前に作らなくてもPolarDBインスタンスを作るとに、以下のように一つの「Default VPC」が自動的に作られますが、VPCとvSwitchの概念をもっと理解してもらいたいので、手動でVPCとvSwitchを作っておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/cc4761b1-4d38-67e0-70a9-d6c6b691c668.png)
    - `ｖｐｃ`を検索して、VPCのコンソール画面に遷移
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/95429431-6959-554c-fc52-278960f3c5b1.png)
    - `Japan(Tokyo)` のregionを選択した上で、「Create VPC」ボタンをクリックして、新しいVPCを作成しましょう。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/c78ca3bc-5ad8-1892-e97f-834aba8ecdfa.png)

    - VPCの情報
        - VPCの名前:  `WORDPRESS_VPC`
        - VPCのCIDR Block: `192.168.0.0/16`
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/a789c41e-ab04-c4a5-3afe-99a9c0a4bc89.png)

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

https://qiita.com/Nt_CeCZL/items/937ffc3d42c0025353e3#ip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AE%E4%B8%BB%E3%81%AA%E7%A8%AE%E9%A1%9E%E3%81%AF2%E7%A8%AE%E9%A1%9E


- 同時にvSwitchも新規作成
  - VPC作成した後で別途vSwitchを作成することもできますが、手間かかるので、こちらでは同時に作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/c35b6ed9-70e1-fc8c-35f8-9ce471d6066f.png)
- 以下の画面が表示されましたら、VPCとvSwitchが正常に作られたことになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/1d2ed784-b737-bc7c-8456-fa36577dcacc.png)
- 作成した内容を確認してみます
  - VPC一覧画面に戻します
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/9a7bd668-bd86-36e1-2a89-e1201f38c6f9.png)
  - 新規作成されたVPCの詳細画面に遷移
    - ２つのvSwitch以外も一つのRoute Tableが作られたことがわ分かる。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/f77e18bf-77b2-d4cd-8f07-e83923d1f315.png)

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

https://qiita.com/dennis_wang/items/eff3a3993e4b590cfaca
- PolarDBのコンソール画面に移動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/6f429c2b-f561-6889-299d-7892d4c237b2.png)
- 新しいPolarDB Clusterを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/ec81db90-cd20-a1c7-342f-c80f9106546d.png)
- 以下の情報を入力
    - 課金タイプについて

https://qiita.com/dennis_wang/items/96368cbbd24130b035e8#%E8%AA%B2%E9%87%91%E8%AB%8B%E6%B1%82%E9%96%A2%E9%80%A3

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/c47cb4c6-898e-e909-2a60-b5555b00c985.png)

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

- Time Zoneを`UTC+9:00`(つまり日本時間)を選択し、`Buy Now`ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/9dacfded-cc19-e3c0-3f40-820734339552.png)
- プレビュー画面で内容を確認して、 `Terms of Service`をチェックし、`Activate Now`ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/c802324b-85c1-f823-7ced-4cd8b694928b.png)
- PolarDBの一覧画面で新規作られたpolardbを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/edf256ad-f5ff-0337-8867-f2cef5708a4d.png)
- console画面から必要なdatabaseを作成
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/d8a7fb10-7967-af74-e1dd-d10494dc6351.png)
    - `wp_db`というdatabase nameを入力し、それ以外の内容はデフォルトのままで作成
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/16ef8f0e-39c6-14e0-ee21-f133b466b920.png)

- databaseへアクセスできるaccount/userを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/e8897192-4064-20d4-cdd7-dcd046c487e3.png)
- Account Nameに`wp_user`、Passwordに`wp_password2022`を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/4778210b-96c9-d8ca-d1de-b3775129e303.png)

## ECSインスタンスの作成
- ECS一覧画面へ遷移
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/6ec5e556-1013-40e7-7c75-694eb1d1210c.png)
- ECSインスタンスを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/3af84474-680d-7cba-0535-1358c1f6aab9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/86273aea-7ab4-db8b-be87-41f90510bf44.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/8cd40a2d-2ed0-8ab2-f669-b40cdfa20bfb.png)

:::note info
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/1b9c00ab-88ca-87d0-9341-0ea0f208160e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/17f2f1e3-79fd-da68-7be6-9bdbf8c1eae3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/569b806b-7b73-fa64-4714-cc0ac0034fdd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/48b618a3-b710-fa86-01c0-77456619e183.png)

:::note info
データ転送量について：
- Pay-By-Traffic(トラフィック課金)：データ転送量に基づいた課金方式（クラウドから外部への転送データ量）
- Pay-By-Bandwitch（帯域幅課金）：ネットワーク帯域幅を指定した固定課金方式
:::

- Security group(firewallの機能)新規作成
  - 特になにもしなくてもDefault Security Groupが作られますが、Security Groupをもっと理解していただくために、あえて手動で新しいSecurity Groupを作成しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/d6dbe5aa-0bb4-6b04-6b51-e20cfeb67284.png)
    - `sg_wordpress`というNameを入力
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/e79020a5-daf5-ff4a-5f14-e04c5e69c324.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/dfdd56ab-c6cd-554c-cc08-60ed87bd75ed.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/50f01f50-ead7-6696-938b-a0fb2866e0da.png)
- ECSへログインするための認証情報を設定(key Pairもできますが、今回はやりやすい`Password`を利用)
    - パスワード: `Ecs_password`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/6a0287e6-a490-6a26-f4ea-89701e5a7164.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/e8d9d329-191f-1603-63a9-813e5ac3e72f.png)

- 最後の画面で内容を確認してから、instanceを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/2d963972-8e20-65c3-30e9-b7995a4474bb.png)

- ECSのpublic IPでwordpressのサイトへアクセスし、以下のページが表示されていることを確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/d99e73e0-f61b-f3c8-68dd-bf673c2fcf31.png)
使っているOS iamgeはwordpressはすでにインストール済み＆設定済み(ローカルのmysqlを利用)なので、ここでもwordpress利用できるようになりましたが、今回はECSローカル上のmysql databaseの代わりにPolarDBというデータベースマネージドサービスを使いたいので、databaseへの接続情報を変更します。


### ECSでdatabaseへの接続情報を変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/b0666b1c-99ee-a168-869a-84188cdf2d6c.png)

- ECS instanceにログインします
    - instanceの詳細画面の`Connect`ボタンをクリック
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/a6bac8d7-4e8b-7440-e84a-bdc3296926ad.png)
    - `Workbench Connection`でinstanceに接続
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/ff6e7e1f-c799-9cb4-352f-aee36398be20.png)

::: note info
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/1aff55fc-9648-5a97-2dbd-c4f72eda176c.png)
    - 以下の画面が表示できたら、正常にECSインスタンスにログインできたということになります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/3901967e-f72d-e055-15c4-b482880a4b5c.png)


- wordpressの設定ファイル中のデータベースアクセスの情報を修正
    -  `vi  /jet/app/wordpress/wp-config.php`というコマンドを入力して、`Enter`keyを押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/100a7a84-1935-d7b2-397f-1e68f4b9f887.png)

    - `i`を入力して、編集モードになってから、以下のように修正してください。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/bc57be77-cc78-6ca1-5eb0-b910daf6830a.png)
  - 修正内容：
    - DB_NAME: `wp_db`
    - DB_USER: `wp_user`
    - DB_PASSWORD: `wp_password2022`
    - DB_HOST: PolarDBのendpoint取得方法は以下をご確認ください。
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/079475dc-3665-f290-ca08-7327b8b191df.png)

  - 設定ファイルを保存
      - キーボボード上の`esc`のkeyを押してから、`:wq`を入力し、左下に以下のように`:wq`が表示されましたら、`Enter`のkeyを押してください。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/a6918856-1ebe-c00a-2324-3f82c8c4331a.png)
    - 以下の画面に戻ったら、設定ファイルは正しく変更できたということです。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/216b83b5-08c4-599b-f207-bd1864702d1f.png)

:::note info
テキストエディタのVimは初心者にとってハードルが高くて、テキストファイルを編集するためだけにこんな複雑なエディタの使い方を覚えなければならないのかと、絶望的な気持ちになった方もいるだろう。
Vimの代わりに、比較的学習コストの低いエディタ[nano](https://news.mynavi.jp/techplus/article/liunx_win-23/)を使って、ファイルを変更してください。
`nano /jet/app/wordpress/wp-config.php`
書き換えた内容の保存とエディタを終了するにはnanoの下部に表示されたショートカットキーを押すことで実施することができる。
- `Ctrl-X`を押す(Ctrlキーを押しながらXキーを押す)
- `Ctrl-X`キーを押すと、下記の画面のように、ファイルの編集内容を保存するかどうかを`Yes`または`No`、`Cancel`の形で尋ねられる。
- `Y`を押して保存と終了させる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/5af24c68-4603-ff7a-7d61-139f418c6d26.png)

:::

### PolarDB側のwhitelist設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/fe7da2b4-19f8-36ef-5c88-d81dcba82f51.png)

:::note info
- デフォルトの状態では同じ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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/fa816514-ae67-1407-7d6f-8222bdecd7fb.png)

## wordpressの初期設定
- ECSインスタンスの一覧画面へ移動し、新規作られたECSインスタンスをクリックし、詳細画面に遷移
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/aa537b64-d62d-b148-3dd8-e660d6ea657a.png)

- ECSのpublic IPをcopyし、ブラウザの新しいtabで該当のpublic IPをペーストしてアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/10ef003f-8e78-b873-4474-3d59ae916d76.png)

:::note info
もし上記の言語選択の画面が表示されない場合は、以下の３箇所は正しく設定したかどうかをご確認ください。
1. ecs側のsecurity groupで 80 portが開放されているかどうか
1. ECSでdatabase関連の認証情報は本当にPolarDBで作られたものと一致しているかどうか
	- database name
	- user name
	- password
	- PolarDBのendpoint
1. database側のwhite listが正しく設定しているかどうか
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/9ee3fdc9-0f8c-1bd8-5333-27c123478638.png)

- wordpressの言語を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/92def627-a195-5458-b1ee-3c5240deb154.png)
- wordpressサイト自体の認証情報を設定
    - サイトのタイトル: `wordpress_test`
    - ユーザ名：  `wp_site_user`
    - パスワード: `wp_site_password`
    - メールアドレス： 自分のメールアドレス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/0d84d1c9-c2a1-52ae-31ed-c78320ac3cb3.png)

- wordpressのサイトにログイン
    - 以下のログインボタンをクリックする、あるいは `ip/wp-login.php`のURL(ipの部分を実際のECSのIPに置き換えてください)へアクセスしてください。
    - ユーザ名：`wp_site_user`
    - パスワード：`wp_site_password`
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/53a37ecf-14a4-5b47-8522-c149e1459033.png)

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/0a2886b2-8fe2-e6b9-cf7a-92221ea23563.png)

- 以下の画面が表示されたら、wordpressの最低限の環境構築ができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/b9a6ffdd-48a8-0c28-bb01-0549eacc0d2f.png)
- 投稿一覧を確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/a4e4115f-6332-6513-92ca-7f0a57ca581a.png)

## databaseの中身を確認
- ECSにログインした上で、`mysql`のクライアントをインストール
```
apt-get update
apt install mysql-client-core-5.7
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/4da16561-b906-07ba-fa61-5b7af5396a51.png)

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

https://www.alibabacloud.com/help/en/elastic-compute-service/latest/ip-addresses-of-ecs-instances-within-vpcs

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/dd9e2d5e-e815-9a2d-ff5b-c0d3d5072ef4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/527d711f-8deb-35b5-7e54-b7c187ab01ba.png)
- 変換されたEIPを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/6c2fc4d1-db66-87dc-8b4e-fae7f6eed382.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/81f9ee22-461e-4906-1a18-17e81b206c84.png)

:::note info
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でサイトのドメインを購入

https://www.alibabacloud.com/help/en/domains/latest/register-a-generic-domain-name
- DNS設定

https://www.alibabacloud.com/help/doc-detail/106535.htm

個人レベルのブログの場合、同時リクエストはよっぽど多くなけれれば、この構成が十分だと思います。


# 2. 片付け
- 課金されるリソース　→　リリース(つまり削除)してください。
    - ECS instance
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/ade65269-1524-8de2-03f2-12fdc8e22b48.png)

    - PolarDB instance
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/73da8bbf-5e90-acb1-0bd1-1dff7baa0e00.png)

    - EIP
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/ab4ec5d9-2a25-278e-7e7a-b2cfd707cd67.png)

- 課金されないリソース　→削除しなくても問題ありません。
    - VPC
    - vSwitch
    - security group(firewall)

:::note info
リリース(削除)せず、停止すると、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に負荷分散してくれることを検証
- ECS１台落ちても(強制的にshutdownさせる)サービスは継続的に提供できることを検証
- SLBにSSL証明書をつけて、httpsからサイトにアクセスできることを検証

https://www.alibabacloud.com/help/zh/virtual-private-cloud/latest/select-a-product-to-gain-access-to-the-internet

## データベースの冗長化
- PolarDBインスタンスが落ちたらサービス利用できなくなることを検証
- PolarDBをsingle node構成からCluster構成(primary node 1台 + Read-only node 1台)に変更し、primary node crashした時にDBのfailover仕組みを検証し、DBの可用性向上の仕組みを検証

## 2. staticコンテンツのキャッシュ
- CDNによるコンテンツキャシュの効果を検証

https://developer.aliyun.com/article/792375

## 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が立ち上がることを検証
- 処理の負荷に応じて自動的に台数追加・削減されることを検証(処理に負荷をかけてみる)

## databaseのautoscaling