【めざせ二刀流】GoogleCloudでAWSハンズオンやってみた①

# はじめに
こんにちは。
AWS認定12冠後、GoogleCloud資格を8個取得しましたが、資格勉強偏重で手が動かない・・・
[※GoogleCloud資格取得の話はこちら参照](https://qiita.com/white_elephant/items/3ef040766718dd56b911)
さすがにカッコがつかないので、ハンズオンを少しずつ始めることにしました。

CoogleCloudのハンズオン教材はSkills Boostなどで提供されてますが、そのままでは面白くない。二刀流エンジニアを目指して、AWSとの違いを理解しながら勉強できないかとAWSハンズオンをGoogleCloudでやってみようと思い立ちました。

今回のチャレンジにあたり、ハンズオン手順、気づいた点など、まとめておこうと思います。

# ハンズオン教材は？
ハンズオン教材はAWS勉強でお世話になった「Hands-on for Beginners」から、EC2、RDSを使ったWebサイト構築ハンズオンを選びました。これならIaaS構築基礎をAWSと比較しながら勉強できそうです。

https://aws.amazon.com/jp/events/aws-event-resource/hands-on/

https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Scalable-2022-reg-event.html?trk=aws_introduction_page

# 構成図を書いてみた
ハンズオンのAWS構成図をGoogleCloudに読み替えて書いてみました。
全体的に類似していますが、大きな違いはネットワークです。

![スクリーンショット 2023-09-01 203759.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/da6bb794-b1ee-ce83-c23a-8b876b3e67a2.png)

- 相違点①　ネットワーク構造
下記のようにネットワーク構造に大きな違いがあります。
リージョンがVPCの配下なので、後々マルチリージョン構成拡張も簡単に設定できそうです。
AWS：**リージョン**＞**VPC**＞AZ＞サブネット
GoogleCloud：**VPC**＞**リージョン**＞ゾーン＞サブネット

- 相違点②　サブネット
AWSがパブリック/プライベートの区別があるのに対して、GoogleCloudではサブネットに区別がありません。さらにゾーンを跨いで定義することができます。調べてみるとGoogleCloudはサブネットでの制御ではなく、インスタンスに外部IP有無、ネットワークファイアーウォールで制御をするとのことです。


- 他にも相違点はあるでしょうが初学者のためこれぐらいでご勘弁ください



# ハンズオン開始
今回は下記シングル構成のWebサイト構築までやってみます。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/0f360245-ed2b-c5df-bbab-a819181398b0.png">

# 下準備（5分）
ハンズオン用にプロジェクトを作成します。ここでは「hands-on」で作成しました。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/4096c206-fb6d-f06e-ea09-78b0f559d1e4.png">


※アカウント未作成の方はGoogleCloudのハンズオンを参照してアカウント作成しましょう。10分かからずアカウントが作成できます。初回特典で300ドル相当のクレジット（有効期間3カ月）がもらえます。

https://inthecloud.withgoogle.com/gcp-online-handson/common-setup.html



# ネットワーク構築（0分）
早速ハンズオンを始めます。まずはネットワークからですが、AWSだとVPC、サブネット、ACLを設定していきます。VPCのウィザードが実装されてから随分楽になりましたがメンドクサイ作業ですよね。

![スクリーンショット 2023-09-01 203201.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/902c6288-0221-73c7-668b-cf4357fb489f.png)

GoogleCloudでは初期状態でdefaultのネットワーク構成が用意されているとのこと。VPC配下に定義済みのリージョン、ゾーン、サブネットが用意されています。
実業務ではアドレス帯、セキュリティなど個別に要件があり、予期せぬ動きをしてしまう可能性があるので使うべきではありませんが、ハンズオンやPOCなどちょっと使ってみたいというときはすごく便利。
今回は手軽に使えるGoogleCloudを体験したいのでdefaultを使うことにします。
なのでネットワークは作業なしです。



# VMインスタンス構築（5分）
WordPressをインストールするVMインスタンスを作成していきます。
ナビゲーションメニューから「Compute Engine」＞「VMインスタンス」に進み、「インスタンスを作成」をクリックします。

今回はシングル構成で、**東京リージョンのasia-northeast1-a** にVMインスタンスを用意します。
ハンズオンなので最小構成のe2-microで、OSはCentOS 7を選択します。
WebサーバなのでファイアウォールでHTTP、HTTPSトラフィックを許可します。

![スクリーンショット 2023-08-27 152512.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/67c4ca41-9c46-d49d-0e43-ce63ece8c175.png)


# CloudSQLインスタンス構築（10分）
WordPressのデータを格納するCloudSQLインスタンスを作成します。
ナビゲーションメニューから「SQL」に進み、「インスタンスを作成」をクリックします。
こちらもシングル構成でVMインスタントと同じゾーンに構築します。
MySQLを選択して最小構成で作成します。パスワードはDBのrootユーザのもので、後作業で使うので控えておきましょう。
![スクリーンショット 2023-08-27 153711.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/446e0556-cc85-6b4b-23fe-89d3413f8e71.png)

続いて接続情報を設定していきます。
DBは外部接続しないよう、プライベートIP**だけ**を指定。(**パブリックIPはチェックを外す！**)ネットワークに「default」を選択します。プライベートサービスアクセスの設定を求められるので、「接続を設定」をクリックすると画面右側に設定画面が出てきます。自動割り当てのIP範囲使用で接続を作成します。

![スクリーンショット 2023-08-27 154844.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/7917cb72-9315-dc6f-81ba-eabf3ff0f589.png)

これで「インスタンスを作成」をクリックしてCloudSQLは構築完了です。


# WordPressインストール（40分）
ここまででハンズオン本題のGoogleCloudの構築作業は完了です。
以降はVMインスタンス、CloudSQLにWordPressをインストールする作業なのですが、手順が多く時間がかかって大変でした。本題の作業ではないので作業詳細は最後にまとめて書いておきます。


# 接続確認
WordPressのインストール完了後、「http://」＋＜VMインスタンスの外部IPアドレス＞でWordPressのトップページが表示ができたら完了です。
これでシングルゾーン構成のWebシステムが完成しました。
![スクリーンショット 2023-08-27 160135.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/152ca9c5-ba1d-499e-fb0f-1cbbd8ff8704.png)

# まとめ
デフォルトのネットワークを使ったことで、GoogleCloud自体の作業は20分程度。AWSよりはるかに短時間で作業が終わってしまいました。AWSはお試しやPOCであってもVPC、サブネット作成が必要になるので、お手軽に使える点でGoogleCloudはとてもポイントが高いですね。またコンソールのデザインがすっきり整理されていて作業が進めやすかったのも印象的でした。AWSとの違いを感じることができて良いチャレンジだったと思います。

ハンズオン入門者のため、いろいろハマりながら作業を進めていました。ハマったところなど、これから勉強する方の参考になるよう細かく書きながら、ハンズオンを進めて記事にしていこうと思います。

次回は**リージョン内での冗長化**にトライします。

[第2回の記事はこちら](https://qiita.com/white_elephant/items/6c245789fc2a8919ba12)


# おまけ　WordPressインストール手順
- Cloud ShellでVMインスタンスへアクセス
VMインスタンス一覧画面で「SSH」を右クリックしてgcloudコマンドを表示⇒CLOUDSHELLで実行をクリック。コンソール下部にSHELL画面が出てくるので、新しいウィンドウで開きます。ClousShellの承認を聞かれるので、承認して作業を始めます。
![スクリーンショット 2023-08-27 162521.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/7f44099e-5e38-bd81-3f69-45fc71a8b82d.png)

- パッケージアップデート（20～25分かかります）
```
> sudo yum update -y 
```
- 外部リポジトリ追加
```
> sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
```
vimでremi-php74.repoを編集します。
```
> sudo vim /etc/yum.repos.d/remi-php74.repo
```
「i」でインサートモードに遷移。[remi-php74]のenabledを0⇒1に書き換えます。
![スクリーンショット 2023-08-27 170253.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/a506a771-3274-f625-6242-f180271cba01.png)
「Esc」でノーマルモードに戻り、「:w!」で保存。「:q」で終了します。


- php7.4インストール
```
> sudo yum install -y php php-gd php-mysql 
```
- Apacheインストール
```
> sudo yum install -y httpd
> sudo systemctl start httpd
> sudo systemctl enable httpd
```
- MySQLインストール
```
> sudo yum install mysql -y
```
- DB設定
```
> mysql -u root -p -h <Cloud SQLの内部IPアドレス>
パスワード入力（CloudSQL作成時のrootユーザパスワード）

DB作成
CREATE DATABASE wordpress;

ユーザ作成
CREATE USER 'wp-user' IDENTIFIED BY '<任意のパスワード>';

権限設定
GRANT ALL ON wordpress.* TO 'wp-user';
```
- WordPressインストール
```
wordpressをダウンロード
> curl -OL https://ja.wordpress.org/latest-ja.tar.gz

圧縮ファイル展開
> tar xzf latest-ja.tar.gz

ドキュメントルート配下へコピー
> sudo cp -r wordpress/* /var/www/html
```

- SELinuxの設定
```
ネットワーク経由のDB接続を許可
sudo setsebool -P httpd_can_network_connect_db 1
```

- WordPress初期設定
PCブラウザからWordPressへアクセス
ブラウザに「http://」＋＜VMインスタンスの外部IPアドレス＞を入力してアクセス
以下の画面が表示されたら「さあ、始めましょう！」をクリック

![スクリーンショット 2023-08-27 172257.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/47ddb184-aae2-1ae1-f8cf-8cf7cd773e89.png)
![スクリーンショット 2023-08-27 172545.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/fcc9ba74-44dc-046e-0784-ad6a9c926aa4.png)

初期パラメータを入力して「送信」をクリックすると、wp-congig.phpへの書き込み指示が表示されます。
CloudShellに戻りwp-congig.phpへ指定された構成ルールを追記します。
```
sudo vim /var/www/html/wp-config.php 
```
「i」でインサートモードに遷移。指定された構成ルールをコピペ。
「Esc」でノーマルモードに戻り、「:w」で保存。「:q」で終了します。

ブラウザに戻り、「インストール実行」をクリック
![スクリーンショット 2023-08-27 173158.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/109d3a86-0f6f-15b8-c2b0-cc683a54f7f8.png)

次画面に遷移
![スクリーンショット 2023-08-27 173551.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/b66500bc-be23-1ea5-671a-c9dc0257f6b2.png)
WordPressサイトタイトル、WordPressの管理者ユーザ、パスワード、メールアドレスを入力。
検索エンジンでインデックスされないようチェック。
「WordPressをインストール」をクリック。

完了画面が出ます。ログインをすると管理者用画面に遷移します。
![スクリーンショット 2023-08-27 174025.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535743/49a621d7-0b5b-aa60-f43b-e8e6cf45dfed.png)


「http://」＋＜VMインスタンスの外部IPアドレス＞にアクセスしてWordPress初期画面が表示されたら成功です。



# 参考
* [AWS Hands-on for Beginners 〜 スケーラブルウェブサイト構築編 〜](https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Scalable-2022-reg-event.html?trk=aws_introduction_page)
* [【GCP】GCE+Cloud SQLでWordPressを立ち上げてみた](https://qiita.com/riku929hr/items/67bae101d1013abc456d)