【クラウド初心者向け】Google Cloud Platform(GCP)でWebサイトを公開してみよう!
- データベース, ネットワーク, 運用管理, 開発ツール Google Cloud DNS, Google Cloud Platform, Google Cloud SQL, Google Compute Engine, Infra, MySQL, php, クラウド, 開発
はじめに
みなさんこんにちは、プロダクト開発本部の亀梨です。
普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う
統合プラットフォームの開発を担当しています。
背景
わたくしは最近プライベートで開発したWebサービスをインターネット上に公開しました。
その際にインフラ環境をどうやって構築しようかなーと思ったのですが、レンタルサーバーだとエンジニアとしてどうかなと思ったのと、AWSは普段の開発で触れているのとネット上に知見が貯まりまくっているのでつまらないなーと思ったので、今回は今まで触ったことのなかったGoogle Cloud Platform(GCP)を使って環境構築にトライすることに決めました。
非常に簡単に環境を構築することができたので、同じようにGCPやクラウド使ってみたいというビギナーの方向けにナレッジを共有できればと思い本記事を書くことにしました。
前提 – Webサイトを公開するために必要な環境
Webサイトを公開するにあたっては、最低限以下の環境が必要になってきます。
- Webサーバー
- 作成したHTML/CSS等ファイルのインターネット上の置き場所
- DB(データベース)サーバー
- サイトに必要なデータの保存場所
- DNS(ドメインネームシステム)
- インターネット上の住所、ドメイン(当サイトでいうhttp://yebisupress.dac.co.jp)とIPアドレス(インターネット上の住所のコンピュータが認識できる形式)を紐付けるシステム
これら必要な環境をすべてGoogle Cloud Platform上の各種サービスでまかないたいと思います。
Google Cloud Platformとは
Google Cloud Platform(GCP) とは、Google がクラウド上で提供するサービス群の総称です。
Google 社内で使われているものと同じテクノロジーやインフラを使用して、お客様のインフラ環境をクラウド化できます。
基本的な構成要素が初めから各種サービスとして用意されているため、それらを使用してすばやく開発を行うことができます。
それではWebサイトを公開するために必要な各種サービスを詳しく見ていきましょう。
Google Compute Engine(GCE)
前提で挙げたWebサーバーにあたるものがこちらで、AWSでいうEC2に相当するものとなります。
特徴は何といっても、 Google が実際に運用環境で使用している強力なインフラの上で動くということでしょう。
GCE のインスタンスは Google の高品質なインフラ上で動作するため、高いネットワーク性能や物理的にセキュアな環境に置かれることといった利点が期待できます。
Google Cloud SQL
前提で挙げたDBサーバーにあたるものがこちらで、AWSでいうRDSに相当するものとなります。
クラウド上の PostgreSQL と MySQL のリレーショナル データベースを簡単に設定、維持、運用、管理できるようにするフルマネージド データベース サービスです。
Google Cloud DNS
前提で挙げたDNSにあたるものがこちらとなります。
ドメイン名・IPアドレスを変換するDNSの基本機能です。Google社が自社サービス用として、世界中にあるDNSサーバーを使用し、あらゆる地域からのDNSルックアップをサポートしているので、高い拡張性・可用性があります。
いざ実践
それでは早速GCPの登録と各種サービスの設定を行ってまいりましょう。
今回は、
- Googleのアカウントを持っていること
- 開発言語はPHP
- DBはMySQL
であることを前提とします。
GCPの登録、新規プロジェクトの作成
こちらからアクセスしてスタートページに進みます。
GCPを初めて利用する場合は12ヶ月間の無料トライアルを利用できるので、まずはこちらを登録していきましょう。
「無料トライアルをお試しください」をクリックすると登録画面に進みます。
必須事項を選択し「同意して続行」ボタンをクリックすると、次の画面でアカウントの氏名、住所、クレジットカード情報を入力したら「無料トライアルを開始」ボタンをクリックします。
無料トライアルのエントリーが完了すると、「Google Cloud Platform コンソール」に切り替わり登録が完了します。
次にホーム画面から新規プロジェクトを作成します。
適当なプロジェクト名を入力して「作成」ボタンをクリックします。完了するまで少し時間がかかる場合があります。
プロジェクトの作成が終わるとそのプロジェクトのダッシュボード画面が表示されます。
これで完了です。
Google Compute Engineインスタンスを作成する
では次にGCEでWebサーバーを構築してみましょう。以下の環境を順番に作っていきます。
- OS:CentOS7
- Webサーバー:Apache
- 開発言語:PHP7
- DB:MySQL(後述のGoogle Cloud SQL接続用)
CentOS7インスタンスの立ち上げ
まずナビゲーションメニューよりGCEの管理画面に遷移します。
画面中央の「作成」をクリックします。
入力画面が表示されたら、名前を好きな名前に、リージョンを「asia-northeast1(東京)」、ブートディスクを「CentOS7」、ファイアウォールを「HTTPトラフィックを許可する」にチェックを付けて最後に「作成」ボタンをクリックします。
作成したインスタンスが、GCEのインスタンス一覧画面に表示されます。
この状態ですでにグローバルIPアドレスが割り当てられており、SSHで接続することができます。
では自分のPCから作成したインスタンスにSSH接続するために公開鍵を登録します。左メニューの「メタデータ」をクリックします。
メタデータの画面で「SSH認証鍵」タブをクリック→「SSH認証鍵を追加」をクリックします。
入力フィールドにSSH公開鍵を入力し保存をクリックします。
保存が完了すると一覧に表示されます。
それでは準備が整ったのでMacのターミナルでGCEインスタンスにSSH接続してみましょう。
はい、無事に接続ができました。
Apache(Webサーバー)のインストール
ではこのCentOS7インスタンス環境に、yum経由でまずはApacheをインストールしていきましょう。
インストールしたら次は自動起動の設定をしておいた上で、実際にApacheを起動してみます。
起動したら、早速ブラウザからIPアドレスでアクセスしてみましょう。
Apacheのテストページが表示されたら成功です。
はい、成功です。
PHP7のインストール
続いてはPHPのインストールです。
CentOS7系の標準リポジトリのPHPバージョンは5.4で、それ以外のバージョンを使用したい場合は、EPELリポジトリとRemiリポジトリの追加が必要になります(EPELはこのCentOS7インスタンスにプリインストール済)。順にインストールしていきます。
はい、無事にインストールができてバージョンも確認ができました。
次にPHPの設定ファイルでタイムゾーンを設定し、その設定を反映させるためApacheを再起動しておきます。
これで準備万端ということで、ドキュメントルートにphpinfoを出力するphpファイルを作成します。
それではブラウザからphpinfo.phpにアクセスしてみましょう。
はい、これでPHPが使えることが確認できましたね。
MySQLのインストール
GCEパートはここで最後です。もう一息。
MySQLは実際は後述のGoogle Cloud SQL上のMySQLを使用しますが、このGCEインスタンスからGoogle Cloud SQLインスタンスに接続するためにMySQLコマンドを使う必要があるため、ここでインストールしておく必要があります。
ターミナルからGCEインスタンスに接続した状態で、yum経由でインストールします。
なおCentOS7にプリインストールされているmariaDBがMySQLと競合を起こすため、まず初めにmariaDBのアンインストール→MySQLインストールという流れが必須です。インストール後の自動起動設定と起動も合わせてやってしまいます。
無事インストールができ、起動することもできました。これでGCEパートは以上となります。
Google Cloud SQLインスタンスを作成する
さて、続いてはDBサーバーとなるGoogle Cloud SQLインスタンスを作成していきます。
まずはダッシュボードの左ナビゲーションメニューより「SQL」をクリックします。
次の画面で「インスタンスを作成」をクリックします。
データベース選択画面で、「MySQL」を選択した状態で「次へ」をクリックします。
MySQLインスタンスタイプ選択画面で、「第2世代を選択」をクリックします。
次の画面で、インスタンスIDに好きなID名を、rootパスワードを入力、ロケーションのリージョンとゾーンはGCEインスタンスと揃える形で設定した上で「作成」ボタンをクリックします。
作成が完了すると、Google Cloud SQLダッシュボードの一覧に表示されます。
ここからインスタンスIDをクリックすると詳細画面に遷移します。
と、ここで大事な設定を行います。
詳細画面では、このGoogle Cloud SQLインスタンスが先に作成したGCEインスタンスからしか接続できないようにしてセキュリティを担保する設定を行います。承認タブよりGCEインスタンスのIPアドレスを追加し「完了」→「保存」ボタンをクリックします。
これでGoogle Cloud SQLの設定はすべて完了です。それでは接続を試してみましょう。
ターミナルからGCEインスタンスに接続→GCEインスタンスからGoogle Cloud SQLインスタンスのMySQLに接続してみます。
はい、無事に接続できました。
PHPコード上からDBに接続する際はホスト名にCloud SQLのIPアドレスを設定すれば接続することができます。
補足としてGUIツールからGCEインスタンス経由でGoogle Cloud SQLに接続する方法も記しておきます。以下キャプチャーはMySQLの「Sequel Pro」というGUIツールですが、このように設定することで接続することができます。
Google Cloud DNSの設定
さてさてようやくラストパート、DNSの設定です。
ここではDNSの設定に必要な、
- DNSゾーンの作成
- Aレコードの追加
- レジストラへの登録
というのを順に行っていきます。DNSに関する詳細な説明は省きますが、ネット上にたくさんの有益な記事がありますので、不明な点はググっていただければと思います。
DNSゾーンの作成
まずはダッシュボードの左ナビゲーションメニューより「ネットワークサービス」>「Cloud DNS」をクリックします。
GCDNS一覧画面で「ゾーンを作成」をクリックします。
ゾーン作成画面で、適当なゾーン名を入力し、DNS名に設定したいドメイン名を入力した上で「作成」をクリックします。
ゾーンが作成されると詳細画面にNSレコードとSOAレコードが作成された状態で表示されます。
Aレコードの追加
次にAレコードを追加するために、ゾーン詳細画面より「レコードセットを追加」をクリックし、入力画面でDNS名にwwwを追記(wwwなしでアクセスさせたい場合は何も入力しない)、リソースレコードのタイプが「A」となっていることを確認、IPv4アドレスにGCEインスタンスのグローバルIPアドレスを入力した上で「作成」ボタンをクリックします。
Aレコードが作成されるとゾーン詳細画面で確認ができます。
これでGoogle Cloud DNS上での設定は完了です。
レジストラへの登録
Cloud DNSで登録したドメインのDNSサーバーを、レジストラ(お名前.com等のドメイン管理機関)のネームサーバーに指定する必要があります。
先程のゾーンに設定された以下のNSレコードにある4つのDNSサーバーを登録します。
これにより、他のDNSサーバーに対して、指定したドメイン情報は上記のDNSサーバーで管理されているという情報が、レジストラのDNSサーバーから伝達されるようになります。ただし、全てのDNSサーバーに情報が伝達されるには、しばらく時間がかかります。
仮にお名前.comでドメインを取得した場合は、お名前.comでのネームサーバーの変更を参照しながら設定をしてみてください。設定後しばらくしたらブラウザから設定したドメイン(URL)にアクセスして正しくページが表示されるか確認してみてください。
以上です。
というわけで、Compute Engine、 Cloud SQL、Coud DNSの設定が完了しWebサイトが公開できる環境が構築できました。
画面キャプチャーが多くなってしまったのでページが長くなってしまいましたが、設定自体はそれほど項目数が多いわけでもなくGCPに慣れていない方でも簡単に設定できるかと思います。個人的にはAWSよりUIが分かりやすくて設定しやすいので今回のトライでGCP大好きになりました。
今回紹介したサービス以外にもできることがたくさんありますので、自分もこれからもっともっとGCPを活用していければと思っています。また知見が貯まりましたら当ブログで紹介していきます。それではまたー。
関連記事
-
-
Google BigQuery / Tableauを使ってみた
TableauからGoogle BigQueryへ接続してみました。 弊社で利用しているTreasureDataからデータ出力してBigQueryへロード、Tableauから接続まで実際に行った手順について記載します。 TreasureDataからAmazonS3へデータ出力 まず、データが蓄積され …
-
-
Burpの使い方!
こんにちは、第二ソリューション開発部の谷口です。 受託開発の部署で開発を担当してます。 APIを扱う機会が多く、今回は通信内容を確認するためのローカルプロキシツール「Burp」について書かせて頂きます。 Burpとは Webアプリケーション開発時の検証において、Webサーバとブラウザ間の通信内容を確 …
-
-
意外と知らないかも? Chrome DevTools の機能10選
みんな使っている Chrome DevTools。 Web開発やトラブルシューティングには必須ですが、便利な機能を知らないで使っている人がいたり、Web で使い方を調べても古い情報だったりすることがあるので、部内で Chrome DevTools についての勉強会を開催しました。 ここでは、その中か …
-
-
巨大データベースのスケールアップと引越作業
はじめに ビッグデータ解析部でオーディエンスデータ解析基盤の開発、運用を担当している Mike です。 弊社ではインターネット広告配信ログをはじめとする「ビッグデータ」と呼ぶにふさわしいデータボリュームを扱うオーディエンスデータ解析基盤を構築しています。今秋、そのうちの1構成要素である、データサイズ …
-
-
ゼロからAngularでSPAを作ってみた(2) デプロイ・公開編
前回のおさらいと今回やること 前回(はじめてのアプリ編)では、Angular で簡単なチャットアプリを作るところまでやりました。ディレクトリ構成については説明できていなかったのですが、次のようになっています。(主なディレクトリとファイルのみ抜粋) + dist (ビルド・コンパイル後のファイルのディ …
-
-
【HTML5】4ツール出力ファイルサイズ比較
こんにちは、近江です。 前回もHTML5のSwiffyについて書かせて頂きましたが、まだまだHTML5について調査しています。 今回はSwiffyを含めた4つのHTML5系ツールで、同じ素材で同じアニメーションを作成した時のファイルサイズを比較したいと思います。 何故ファイルサイズの比較をするかと言 …
-
-
クラウド電話API “Twilio”で起こされてみた
どうも、開発部のクラヴマガです。 弊社サービスも最近はAWSの様なクラウド環境でサービスを構築することが多くなりました。 そこで問題になるのが、障害などによる深夜対応・・・。 データセンターに物理サーバをおいていた頃は、データセンターから障害発生時に 電話連絡をもらっていたのですが、クラウド環境では …
-
-
AWSにRailsアプリをデプロイする(公開編)
次にデプロイするため“aws rails デプロイ”でググってみるとunicorn、nginxというキーワードがでてくるので とりあえずこれを設定していきます。 アプリのsecret_key_baseの設定 [crayon-5da56fc629b22810638 …
-
-
slack×Nagiosでアラートをプッシュ通知
DACではサーバ・NW機器のリソースの監視に「Nagios」を利用してます。 監視ホストも数百台規模で増え続けており、アラート検知が非常に重要な課題となってきています。 メールの通知では、各MLを通知先に設定して、フィルタ分けして…と何かと面倒ですね。 そこで「slackへアラート内容を …
-
-
Amazon Redshiftのパフォーマンスチューニング #1 アーキテクチャ概要
ご挨拶 こんにちは。システム開発部の中村です。 現在新卒入社2年目で、普段は受託開発の要件定義等の業務が主担当だったりします。 このブログの発起人というか、まあ言い出しっぺという事で初稿を上げさせて頂きます。 今回はAmazon Web ServiceのDWHサービス、Redshiftのパフォーマン …