概要
弊社ではシステムのインフラにGoogle Cloudを使用し、Terraformで管理しています。
ですが私はTerraformはおろかGoogle Cloudについも全然知らないしよくわかってないので、とりあえずコンソールを触ってお勉強するところから始めようと思います。
本記事はお勉強のです。
目的はGoogle Cloudのコンソールを触ることと、機能や概要についてなんとなく知ることになります。
参考書
Amazon Web Services 基礎からのネットワーク&サーバー構築を使用しました。
本書はAWSでの簡易的なシステムインフラの構築をハンズオンで学べる形式となっている書籍です。
本書で紹介されているシステムインフラの例を、Google Cloud上で構築してみました。
やること
- パブリックサブネット作成
- サーバーを構築
- サーバーにWebサーバーソフトインストール
- WordPressインストール
- プライベートサブネット作成
- サーバー構築
- NAT構築
- DBソフトインストール
- ブラウザから構築したブログにアクセス
準備
まずは利用登録をしていきます。
Google Cloudのコンソールページにアクセスします。
https://console.cloud.google.com/welcome/
90日間300$分の無料トライアルに加え、無料でアクセス可能なサービスもあります。
https://cloud.google.com/free/docs/free-cloud-features?hl=ja
登録に必要な情報を入力して無料トライアルに登録します。
プロジェクトについて
プロジェクトはGoogle Cloudのリソースがまとまった単位のこと。
https://cloud.google.com/storage/docs/projects?hl=ja#what_is_a_project
デフォルトで[My First Project]が作成されているので、これをそのまま使用します。
AWSとの比較
参考にする書籍がAWSのものなので、Google Cloudのサービスに読み替えてハンズオンを進めていきます。
ありがたいことにGoogle側がサービスの対応表を用意してくれているので、これも参考にしていきます。
https://cloud.google.com/free/docs/aws-azure-gcp-service-comparison?hl=ja
パブリックサブネット作成
コンソール画面上部にある検索窓で「VPC」と入力して、VPCネットワーク
のサービスのページを開きます。
「データを読み込めませんでした」というアラートが出るので、「続行」をして対応します。
Compute Engine API
を有効にしてくださいとのこと。
そもそもGoogle CloudはGoogle Cloud APIs
というAPI郡によって成り立っていて、各APIを有効にすることでそのAPIに属するサービスを利用できるということでした。
https://cloud.google.com/apis/docs/overview?hl=ja
APIを有効にすることでVPCネットワーク
を利用できます。
利用開始時点でdefaultと名がついたVPCが用意されています。
新しくネットワークを作成し、そこにサブネットを追加していきます。
とりあえず名前は「vpc-area」にしました。
サブネットの項目でサブネット作成モードのカスタムをチェックし、新しいサブネットを作成します。
- 名前: public-subnet
- リージョン: asia-northeast1(作成時のスクショはにasia-east1だが台湾であることを知らずに設定したため。なんとなく東京にしておきたかったのであとで編集しました)
- IPスタックタイプ: IPv4
- IPv4範囲: 10.0.1.0/24
- 限定公開のGoogleアクセス: オフ
- フローログ: オフ
ファイアウォールの設定はいったんデフォルトで用意されているプロトコル/ポートがallのものを設定しました(あとで修正しました)
これでパブリックサブネットの作成自体は完了です。
インターネットゲートウェイ
左側のメニューのルートから確認できます。
デフォルトのものが用意されるのでこれをそのまま使いました。
サーバー構築(その1)
コンソール画面上部にある検索窓で「サーバー」とか「Compute」とか入力して、Compute Engine
のサービスのページを開きます(検索窓をクリックすると人気キーワードのサジェストでも出てきます)
インスタンスを作成していきます。
とりあえず触ることが目的なのでマシンのスペックとかは気にしません。
ブートディスクもデフォルトのままです。
ここでもファイアウォールの設定ができるので、HTTP トラフィックを許可する
, HTTPS トラフィックを許可する
にそれぞれチェックを入れておきます。
詳細オプションを開き、ネットワークの設定をします。
ネットワークインターフェースがデフォルトのものになっているので、先程作成したサブネットを追加するようにします。
- ネットワーク: vpc-area
- サブネットワーク: public-subnet
- プライマリ内部 IPv4 アドレス: エフェメラル(カスタム)
- カスタムのエフェメラル: 10.0.1.10
- ネットワークサービスティア: スタンダード
ファイアウォール設定見直し
サブネットを作成する際にプロトコル/ポートがallのファイアウォールを設定していたので、これを修正します。
インスタンス作成時のhttp, httpsとsshのみを許可するように設定を変更します。
VPCネットワークの詳細画面 -> ファイアウォール -> ファイアウォール ルールを追加でsshのルールを追加します
- 名前: vpc-area-allow-ssh(初回作成時にスクショ撮り忘れたので名前重複エラー)
- ログ: オフ
- ネットワーク: vpc-area
- 優先度: 1000
- トラフィックの方向: 上り
- 一致したときのアクション: 許可
- ターゲット: 指定されたターゲットタグ
- ターゲットタグ: ssh
インスタンス作成でhttp, httpsを許可するファイアウォールを設定すると, ネットワークタグのところにhttp-server
, https-server
というタグが追加されます。
タグで紐づけするのねということでssh
という名前のタグでファイアウォールを先程作成したインスタンスに同様に紐づけします。
https://cloud.google.com/firewall/docs/tags-firewalls-overview?hl=ja
Compute Engine
のサービスのページのサービスに戻り、インスタンスの編集でネットワークタグを追加します。
これでファイアウォールの修正は完了です。
SSH接続
インスタンス一覧にあるSSH
をクリックすることでブラウザからSSHができます。便利!
https://cloud.google.com/compute/docs/ssh-in-browser?hl=ja
Webサーバーソフトインストール
ブートディスクをデフォルトで作成したらDebian GNU/Linux 11 (bullseye)だったので、参考書とは異なりaptでインストールします。
sudo apt install apache2
Apaccheを起動させます。
sudo systemctl start apache2
プライベートサブネット作成
VPC ネットワークの詳細 -> サブネット -> サブネットを追加 からサブネットを作成します。
サーバー構築(その2)
サーバー構築(その1)でやった手順とほぼ一緒の設定です。
名前はdb-serverにしました。
インターネットからのアクセスを制限させるため、ファイアウォールの設定にあるHTTP トラフィックを許可する
, HTTPS トラフィックを許可する
にはチェックを入れません。
ネットワークインターフェースは先程作成したプライベートサブネットを指定します。
カスタムのエフェメラルIPv4アドレスは10.0.2.10です。
また外部IPv4アドレスは、なしを指定します。
これで作成完了です。
DBサーバーに接続
ファイアウォールのルール追加
先程作成したインスタンスにアクセスするために、WebサーバーからのSSHだけ許可するようなファイアウォールのルールを追加します。
internal-ssh
という名前のターゲットタグを作成したので、これをDBサーバーに設定します。
踏み台インスタンスからSSH
Webサーバーを踏み台インスタンスとしてDBサーバーにSSH接続します。
gcloudのコマンドを使用しました。
https://cloud.google.com/compute/docs/connect/ssh-using-bastion-host?hl=ja#console
gcloud compute ssh db-server --internal-ip
NAT作成
DBソフトをインストールしたいので、プライベートサブネット -> インターネットの通信を行うためのNATを作成します。
上部検索窓に「NAT」と入力しCloud NAT
のサービスを選択します。
https://cloud.google.com/nat/docs/overview?hl=ja
Cloud Router に NAT ゲートウェイを構成します。
Cloud NAT
の説明にある通り、Cloud Routerも作成します。
NAT作成ページ、Cloud Router -> 新しいルーターを作成から作成可能です。
名前だけ設定して作成し、作成したCloud Routerを設定します。
プライベートサブネットのみに適用させます。
上記内容で作成。
DBサーバー -> インターネット
DBサーバーに接続し、適当にgoogleに疎通確認してみます。
curl www.google.com
DBソフトインストール
参考書と同様にMariaDBを使用します。
sudo apt install mariadb-server
MariaDBの初期設定もします。以下参考↓
https://www.digitalocean.com/community/tutorials/how-to-install-mariadb-on-ubuntu-20-04-ja#2-mariadb
参考書の通り、rootでDBにログインします。
mysql -u root -p
WordPress用のデータベース、ユーザーを作成します。
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
grant all on wordpress.* to wordpress@"%" identified by 'wordpresspasswd';
flush privileges;
WordPressインストール
PHPインストール
WebサーバーにWordPressをインストールします。
WordPressがPHPで動くためPHPとその他必要なモジュールをインストールします。
sudo apt install -y php
sudo apt install php-mbstring
sudo apt install php-mysql
Webサーバー -> DBサーバー上のMariaDBへの疎通確認
参考書と同様にDBサーバー上のMariaDBへの疎通確認を行うため、WebサーバーにもMariaDBをインストールします。
sudo apt install mariadb-server
ファイアウォールのルーツを追加して、ターゲットタグをDBサーバーに追加します。
疎通確認をしていきます。
mysql -h 10.0.2.10 -u wordpress -p
WordPressインストール
参考書通りにWordPressをインストールしていきます。
cd ~
wget https://ja.wordpress.org/latest-ja.tar.gz
tar xzvf latest-ja.tar.gz
cd wordpress/
sudo cp -r * /var/www/html/
sudo chown www-data:www-data /var/www/html/ -R
この状態でブラウザからhttp://自動で設定された外部IP
を開いても、まだApacheのデフォルトページのままです。
Apacheのデフォルトページが残っているので、これを移動なり削除なりしておきます。
sudo mv /var/www/html/index.html ~
これでWordPressの初期設定画面が表示されるようになりました。
WordPress初期設定
http://自動で設定された外部IP
を開き、初期設定を進めていきます。
データベース情報を入力、インストール実行、サイトタイトルや管理者情報を入力していき初期設定が完了します。
おしまい
当初の目的通り、Google Cloudのコンソールを触り機能や概要についてなんとなく知って、親しみを覚えることができたのではないかと思います。
まだまだ知らない・わからない機能も多いですし、業務で使えるスキルには結びついてないので、引き続きお勉強していきます
無料で使えるクレジットも200円分ぐらいしか使ってなくて43000円分ぐらい残っているので、この機会に触っておきたいですね。