初めてでも簡単!本番環境でも安心!GCPでアプリケーションを開発してみよう!

初めてでも簡単!本番環境でも安心!GCPでアプリケーションを開発してみよう!

GCP

投稿日:2020/08/26 | 最終更新日:2020/09/10

Googleが提供しているGoogle Cloud Platformでは、簡単にアプリケーションを作成するためのサービスを数多く提供されています。この記事では、まだGCPを利用したことがない方向けに、アプリケーションを作成する手順をご紹介します。

GCP概要をご紹介

GCP概要
Google Cloud Platform(GCP)は、Googleが提供しているクラウドサービスの総称です。YoutubeやGmailなど、Googleの各種サービスでも同じ基盤を利用しており、サービスレベルの高い環境を利用することができます。

作成するアプリケーションについての説明

今回作成するアプリケーションについて簡単に説明します。

GoogleのドキュメントにはスタートガイドというGCPをこれから使い始める方に向けた情報を集約したページがあります。今回はその中のサンプルプロジェクトとして掲載されているBookshelfアプリケーションの作成を通して、アプリケーション開発の手順をご紹介します。

アプリケーションの構成

アプリケーションの構成
アプリケーションはGoogle App Engine上にデプロイします。また、Google App Engineはインスタンスにデータを保存することはできません。アプリケーションのデータを永続的に保存するため、Firestoreを利用します。また、アップロードされた画像ファイルの保存にはオブジェクトの保存に適したCloud Storageを活用します。

今回のアプリケーション開発に利用するサービス

従来型のアプリケーション開発では、例えば3層アーキテクチャに代表されるように、各機能ごとにサーバーをデプロイし、そのサーバー上にアプリケーションを構成して連携するといった構成が一般的でした。

クラウド環境においてはサービスとして提供されている部分に関してはサーバーを自分で構成せずに機能だけを利用することも可能です。運用をできるだけクラウド事業者側にアウトソースすることで、開発時の工数や負荷を軽減することができます。今回のアプリケーション開発ではGCPで提供されている下記のサービスを組み合わせて実現します。

Google App Engine

Google App Engine(GAE)は、フルマネージド型のサーバーレスアプリケーションプラットフォームです。GAEではインフラ部分をGoogleが管理するため、運用の負荷を軽減し、開発に注力することができます。GAEではJavaやPython、PHP、Go、Node.js、Ruby、C#といった多数の開発言語をサポートしています。今回はPythonを利用してアプリケーションを実装します。

Firestore

FirestoreはNoSQLのドキュメントデータベースです。GAEではインスタンスの再起動によりデータは都度削除され、インスタンスに情報を保存することはできません。そのため、永続的なデータの保存をFirestoreで実装します。

【Firestoreについて詳しく知りたい方にオススメの記事】
【トップゲート主催】ゲーム業界様向けGCP活用のポイント〜Firebase / Firestore編〜

Cloud Storage

Cloud Storageは大容量データの長期保存に適したオブジェクトストレージです。地理的に冗長化されており、高い可用性やセキュリティが担保されています。今回は、アプリケーションで利用する画像データの配置先として利用します。

Cloud Logging

Cloud Loggingは、様々なソースから取得したログデータを保存し、リアルタイムで分析することのできるスケーラブルなログソリューションです。今回はログをモニタリングし、イベントを確認します。

Error Reporting

Error Reportingは、アプリケーションで発生したエラーを監視し、分析と集計を行います。サービスをリアルタイムで常時監視することで、エラーの発生時には迅速にアラートを受信することが可能です。

アプリケーションの作成

ではここからは実際にアプリケーションを作成する手順と、簡単なポイントを解説していきます。

1. Googleアカウントの作成

Googleアカウントの作成
GCPを利用するには、Googleアカウントを作成する必要があります。もし利用できるアカウントをお持ちでない場合にはこちらから作成してください。

2. GCPコンソールへのログイン

GCPコンソールへのログイン
先程作成したアカウントでGCPのコンソールへログインします。GCPを初めて利用する場合、無料トライアルを利用することができます。是非登録して無料枠を活用しましょう。

3. プロジェクトの作成

アプリケーションをデプロイする前に、まずはプロジェクトを作成します。プロジェクトとはGCP内でリソースやユーザーの管理に使用する単位のことで、全てのサービスはプロジェクトと紐付けられます。

コンソールの画面上部からプロジェクト選択画面を開きます。
プロジェクトの作成_1

「新しいプロジェクト」から任意の名前を入力し、プロジェクトを作成します。この時プロジェクトIDを設定することができますが、グローバルで一意である必要があります。今回はBookshelfというプロジェクト名を設定しました。
プロジェクトの作成_2

4. Firestoreを作成する

事前に周辺環境を整備するため、データベースであるFirestoreを作成しておきます。

コンソールのナビゲーションメニューから「Firestore」->「データ」を選択します。
Firestore作成_1

Cloud Firestore モードの選択画面で、「ネイティブモードを選択」をクリックします。
Firestore作成_2

データベースのロケーションを選択します。ここで選択したロケーションはプロジェクトのデフォルトのロケーションとしても利用され、プロジェクト内のApp EngineやCloud Storageでも同じロケーションが適用されます。ここではasia-northeast1(Tokyo)を選択し、「データベースを作成」をクリックします。
Firestore作成_3

5. 各サービスのAPIを有効化する

各サービスをAPI経由で実行するため、それぞれのAPIを有効化します。APIの有効化は、ナビゲーションメニューの「APIとサービス」->「ライブラリ」から行うことができます。
API有効化_1

検索窓から有効化したいサービスを検索します。
API有効化_2

今回は下記の4つのサービスを有効化する必要があります。

  • App Engine Admin API
  • Cloud Storage API
  • Cloud Logging API
  • Stackdriver Error Reporting API

有効化されていない場合には「有効化」をクリックして利用できるようにしておきます。
API有効化_3

5. Cloud Shellを起動する

Cloud Shellを起動し、アプリケーションのソースコードを開きます。Cloud ShellはGCPで提供されているクラウドベースのインタラクティブシェル環境です。ブラウザで実行することができ、アプリケーションのWeb IDEとして利用することができます。

Cloud Shellを起動するには、コンソール右上のボタンをクリックします。
Cloud_Shell_起動_1

Cloud Shellのターミナルで下記コマンドを入力し、GitHubからアプリケーションのソースコードを開きます。
cloudshell_open --repo_url "https://github.com/GoogleCloudPlatform/getting-started-python" --dir "bookshelf" --page "editor" --git_branch "master"

また、gcloudコマンドを利用し、先程作成したプロジェクトを使用します。
gcloud config set project [プロジェクトID]

6. アプリケーションを実行する

Cloud Shellからアプリケーションを実行します。まずはpipで依存関係をインストールします。
pip3 install -r requirements.txt --user

次に、Gunicorn HTTP Serverをインストールします。
pip3 install gunicorn --user

インストールが完了したらGunicorn HTTP Serverを起動します。下記コマンドを実行します。
~/.local/bin/gunicorn -b :8080 main:app

ブラウザ内のCloud Shell画面から「Webでプレビュー」をクリックし、「ポート8080でプレビュー」を選択します。
アプリケーションを実行する_1

下記のようにアプリケーションが正常に実行されていることを確認します。
アプリケーションを実行する_2

正常な稼働が確認できたら、アプリケーションの実行はCtrl+Cを入力し、一旦停止しておきましょう。

7. アプリをApp Engineにデプロイする

作成したアプリケーションをApp Engine上にデプロイします。アプリケーションデプロイ時の構成については「app.yaml」ファイルに記述されています。Cloud Shellのエディタで確認しましょう。
デプロイする_4

下記のコマンドを入力します。
gcloud app deploy

デプロイするアプリケーション先を確認し、Yを入力します。
デプロイする_1

しばらく待つとアプリケーションがデプロイされます。
デプロイする_2

アプリケーションのURLにアクセスし、実行されていることを確認します。URLは先程の画面に表示されている通り、「https://[プロジェクトID].[リージョンID].r.appspot.com」として設定されています。
デプロイする_3

また、下記コマンドを入力することでもWebブラウザからアプリケーションを確認することができます。
gcloud app browse

8. Firestoreでデータを永続化する

前述したとおりApp Engineではデータをインスタンスに保存することができないため、各インスタンスからFirestoreにデータベースとして読み書きを行うことでデータを永続化しています。

Firestoreに対する処理は、「Firestore.py」に記述されています。Cloud Shellのエディタで確認することが可能です。
データ永続化_6

Webブラウザでアプリケーションの画面から「Add Book」をクリックします。
データ永続化_1

書籍の情報を入力し、「Save」を選択します。
データ永続化_2

書籍のデータが保存されます。
データ永続化_3

データがFirestoreに保存されていることを確認します。コンソールのナビゲーションメニューから「Firestore」->「データ」を開きます。
データ永続化_4

先程入力した書籍のデータがFirestoreに保存されています。
データ永続化_5

9. 書籍の表紙データをCloud Storageに保存する

書籍のデータを登録することができました。次に、表紙の画像データを登録することを考えます。Firestoreはドキュメントデータベースのため、画像の保存には適していません。そのため、Cloud Storageと連携し、イメージのアップロードを実施します。まずは保存先であるバケットを作成します。バケットは画像を格納する単位となる箱のようなものです。

コンソールのナビゲーションメニューから「Storage」->「ブラウザ」を選択します。
Cloud_Storage_1

「バケットを作成」をクリックします。
Cloud_Storage_2

ここではバケット名を「[プロジェクトID]_bucket」として作成します。
Cloud_Storage_3

データのロケーションを設定します。Cloud Storageではデータの分散方式をRegion、Dual-region、Multi-regionの3種類の中から選択することができます。ここではRegionのasia-northeast1(東京)を選択します。
Cloud_Storage_4

データのストレージクラスとして「Standard」を、アクセス制御として「きめ細かい管理」を選択し、最後に「作成」をクリックします。
Cloud_Storage_5

アプリケーションから画像を参照できるように権限設定を行います。作成したバケットの詳細画面で、「権限」タブを選択します。
Cloud_Storage_9

新しいメンバーとして「allUsers 」を追加します。ロールは「Cloud Storageオブジェクト閲覧者」等に設定します。
Cloud_Storage_10
この設定によりこのバケットに保存されているデータは一般公開され、URLにアクセスすれば読み込むことができるようになります。実際の運用ではもう少し権限を細かく絞った方が良いでしょう。

バケットが作成できたらアプリケーションの画面に戻り、書籍の詳細画面で「Edit Book」を選択します。
Cloud_Storage_6

「Cover Image」から任意の画像を選択し、「Save」をクリックして保存します。
Cloud_Storage_7

画像イメージを保存することができました。
Cloud_Storage_11

10. Cloud Loggingによるログ監視

アプリケーションのログを確認してみます。

ナビゲーションメニューの「ロギング」->「ログビューア」を選択します。
ログ監視_1

アプリケーションから出力されたログを確認することができます。プルダウンを展開することで、各種ログの詳細を確認することも可能です。細かい条件による検索やログのエクスポート、簡単な分析を実施することができます。
ログ監視_2

11. Error Reportingによるエラー管理

また、Error Reportingの機能を利用することで、エラーや例外を確認することができます。ナビゲーションメニューから「Error Reporting」を選択します。
エラー管理_1

アプリケーションで発生したエラーを確認することができます。また、エラーの発生時に通知を行う設定をすることも可能です。もしアプリケーションで問題が発生した場合、上記のCloud LoggingとError Reportingを利用し、問題解決を実施します。
エラー管理_2

まとめ

この記事ではアプリケーションの開発方法とその管理方法について簡単にご紹介しました。クラウド環境においては、各サービスをデプロイし、API経由でそのデータをやり取りすることによって1つのアプリケーションを実装します。

また、ログ監視やエラーの処理といった運用に関してもサービス利用して実施することで、アプリケーション実装における負荷を軽減することが可能です。従来の方法と比較してかなり簡単にアプリケーションを構築することが可能ですので、ぜひご利用を検討してみてはいかがでしょうか?



弊社トップゲートでは、 GCP 、または G Suite 導入をご検討をされているお客様へ「Google Meet で無料個別相談会」を実施いたします。導入前に懸念点を解決したい方、そもそも導入した方がいいのかをお聞きしたい方はお気軽にお申し込みください!

お申込みはこちら

弊社トップゲートでは、 「TOPGATE Broadcaster」と称してウェビナーを定期開催しております。短時間でわかりやすく教えてくれるとご好評いただいております。ぜひ、ご興味のあるウェビナーに参加お申し込みください!

ウェビナー一覧を見る

メール登録者数3万件!TOPGATE MAGAZINE大好評配信中!
GCP、G Suite、TOPGATEの最新情報満載!

メルマガ登録はこちら

記事を探す

GCP のメリットを最大限に活用しよう!

GCP・G Suite のご相談・
お見積り依頼はお気軽に
TEL.03-5840-8815
お問合せフォーム TEL.03-5840-8815