【GCP入門編・第6回】これは簡単! Google App Engine での Cloud Datastore の利用方法!
投稿日:2017/06/22 | 最終更新日:2020/09/10
前回の記事では hello-world アプリケーションを GAE 上にデプロイしました。この記事では、前回の記事で作成した hello-world アプリケーションを用いて、 Cloud Datastore を利用してみましょう。
この記事の目的
- 前回の記事で作成した hello-world アプリケーションに手を加え、 Cloud Datastore を使用した簡単なタスク管理アプリケーションを作成しよう。
- Cloud Datastore の利用について理解できるようになろう。
Cloud Datastore とは
Cloud Datastore は、 MongoDB や RethinkDB のような、ドキュメント志向の NoSQL データベースです。アトミックなトランザクションをサポートし、ドキュメント数のスケールや、高可用性を備えているという特徴があります。また、 Cloud Datastore ではデータは暗号化されて保存されるため、運用側のグーグルでも、その内容がわからないというセキュリティに優れた設計となっています。
Cloud Datastore の公式ドキュメントでは、 Cloud Datastore で使われる概念を、リレーショナルデータベースに対応させた説明が提供されています。
詳細は公式ドキュメントを参照していただくとして、ここでは簡単に記事に登場する概念を説明します。
Entity とは
Cloud Datastore に保存されるドキュメントのことを Entity と呼びます。リレーショナルデータベースの行と同じような概念です。
Kind とは
Object に対してつけられるカテゴリーです。リレーショナルデータベースでは Table に相当します。 Object を登録する際に Kind を指定し、その Kind に対応する Object を全て取得する、といった操作に使われます。
Cloud Datastore を使ってみる
それでは、【GCP入門編・第5回】 Google App Engine (GAE) でのアプリケーション起動方法!で作成した hello-world アプリケーションを用いて、 Cloud Datastore を利用してみましょう。 Cloud Datastore はプロジェクト作成時にデフォルトで利用可能になっていますので、特にコンソール上での準備は必要ありません。
まずは hello-world アプリケーションのフォルダに移動し、 main.py を以下の通り書き換えます。
# Copyright 2016 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# [START app]
import logging
from flask import Flask, redirect, request, render_template
from google.appengine.ext import ndb
class Message(ndb.Model):
body = ndb.StringProperty()
created = ndb.DateTimeProperty(auto_now_add=True)
app = Flask(__name__)
@app.route('/')
def hello():
# Get message list
messages = Message.query().fetch()
return render_template('hello.html', messages=messages)
@app.route('/add', methods=['POST'])
def add_message():
message_body = request.form.get('message', '')
message = Message(body=message_body)
message.put()
return redirect('/')
@app.errorhandler(500)
def server_error(e):
# Log the error and stacktrace.
logging.exception('An error occurred during a request.')
return 'An internal error occurred.', 500
# [END app]
次に、メッセージを入力し、表示する為に HTML テンプレートを追加します。
”templates” ディレクトリを追加し、 ”templates/hello.html” に以下の内容を入力します。
<!doctype html>
<head>
<title>Message Board</title>
</head>
<body>
<form action="/add" method="post">
<textarea name="message" id="message_area"></textarea>
<input type="submit"></input>
</form>
<ul>
{% for message in messages %}
<li>{{ message['body'] }} at {{ message['created'] }}</li>
{% endfor %}
</ul>
</body>
このテンプレートには、メッセージの入力を行うための input と、 Cloud Datastore から取得したメッセージを表示するためのコードが含まれています。テンプレートの記法に関してはJinja2 のドキュメントを参照ください。
以下のコードで App Engine 上での動作が確認できるかと思います。
$ gcloud app deploy
$ gcloud app browse
以下の画面が表示されていれば成功です。
テキストエリアに文字を入力し、 [送信] をクリックします。
画面のように表示されているでしょうか?
入力されたデータは、 GCP のコンソール上から閲覧、削除、アップデートを行うことも可能です。コンソール左側のメニューから Datastore を選択すると、以下の画面のように登録したメッセージ一覧が表示されているかと思います。
おわりに
いかがでしたでしょうか。今回の記事では、アップデート、削除といった操作や複雑なクエリを発行する方法に関しては説明しませんでしたが、公式ドキュメントに詳細が書かれています。このように、 Google App Engine と Cloud Datastore を使えば、非常に簡単にデータベースを利用したアプリケーションを開発することができますので、是非お試しください。
弊社トップゲートでは、 GCP 、または G Suite 導入をご検討をされているお客様へ「Google Meet で無料個別相談会」を実施いたします。導入前に懸念点を解決したい方、そもそも導入した方がいいのかをお聞きしたい方はお気軽にお申し込みください!
弊社トップゲートでは、GCPを活用したトレーニングも開催しておりますので、ご興味ございましたらお気軽にお問い合わせください!
メール登録者数3万件!TOPGATE MAGAZINE大好評配信中!
GCP、G Suite、TOPGATEの最新情報満載!
同じシリーズの記事
-
【GCP入門編・第31回】 GCP のネットワークにサブネットを追加する
-
【GCP入門編・第30回】 Cloud CDNで静的ファイルの配布を行う
-
【GCP入門編・第29回】Cloud Load Balancing で Web アプリケーションにロードバランサーを設定する
-
【GCP入門編・第28回】インスタンスグループを使って複数のインスタンスを管理する
-
【GCP入門編・第27回】インスタンステンプレートを使って、よく使うインスタンスを素早く立ち上げよう!
-
【GCP入門編・第26回】 Cloud DNS でドメインの DNS レコードを作成しよう!
-
【GCP入門編・第25回】 Cloud SQL for MySQL で Master-Slave 構成を組もう!
-
【GCP入門編・第24回】 Stackdriver Debugger で本番環境のデバッグを行おう!
-
【GCP入門編・第23回】 Stackdriver Error Reporting でアプリケーションのエラーを収集しよう!
-
【GCP入門編・第22回】 Stackdriver Logging で収集したログに対して、フィルタの実行や警告を設定しよう!
-
【GCP入門編・第21回】 Stackdriver Logging でアプリケーションのログを収集しよう!
-
【GCP入門編・第20回】 手間いらずでログ管理ができる Stackdriver Logging のご紹介!
-
【GCP入門編・第19回】 Stackdriver Monitoring でメールや Slack による通知を設定しよう!
-
【GCP入門編・第18回】 Stackdriver Monitoring で Google App Engine の監視をしよう!
-
【GCP入門編・第17回】 Stackdriver Monitoring で Google Compute Engine を監視しよう!
-
【GCP入門編・第16回】アプリのパフォーマンスを視覚的に確認できる Stackdriver Monitoring を紹介!
-
【GCP入門編・第15回】 GCP から AWS までモニタリングできる Google Stackdriver を紹介!
-
【GCP入門編・第14回】 Cloud Functions を使ってサーバレスアーキテクチャを体験しよう!
-
【GCP入門編・第13回】 Cloud Datalab でデータの可視化を行ってみよう!
-
【GCP入門編・第12回】 BigQuery を使って気軽にビッグデータの解析を行ってみよう!
-
【GCP入門編・第11回】 Google Cloud Dataproc を使ってデータを解析しよう!
-
【GCP入門編・第10回】スケーラブルな NoSQL データベースサービス Cloud Bigtable を使ってみよう!
-
【GCP入門編・第9回】 Cloud Shell で、いつでもどこでも Google Cloud Platform (GCP) が操作可能に!
-
【GCP入門編・第8回】 Container Registry での Docker イメージの使用方法!
-
【GCP入門編・第7回】知らなきゃ損! Google Container Engine (GKE) での Dockerイメージを使ったコンテナの起動方法!
-
【GCP入門編・第6回】これは簡単! Google App Engine での Cloud Datastore の利用方法!
-
【GCP入門編・第5回】 Google App Engine の魅力とは? Google App Engine (GAE) でのアプリケーション起動方法!
-
【GCP入門編・第4回】すぐ出来なくても大丈夫!サンプルアプリで Google Compute Engine (GCE) の動作練習!
-
【GCP入門編・第3回】難しくない! Google Compute Engine (GCE) でのインスタンス起動方法!
-
【GCP入門編・第2回】まずは、ここから! Google Cloud Platform (GCP) の事前準備!
-
【GCP入門編・第1回】エンジニア必読!今さら聞けない、Google Cloud Platform (GCP) とは?