Google Cloud Platform GAEソフトウェア開発入門 Google Cloud Authorized Trainerによる実践解説
Google Cloud Platform GAEソフトウェア開発入門――Google Cloud Authorized Trainerによる実践解説 (Software Design plusシリーズ)
技術評論社
著者:小林明大、北原光星
監修:中井悦司
はじめに
第1章 Google Cloud Platform
1.1 Google Cloud Platformとは
1.1.1 Googleのネットワークインフラストラクチャー
1.1.2 リージョンとゾーン
1.2 GCPの歴史
1.2.1 GCP年表
1.2.2 2008年 GCPの幕開け-Google App Engineの登場
1.2.3 2010年 Google Cloud Storageの登場
1.2.4 2011年 BigQueryの衝撃
1.2.5 2012年 Google Compute Engineの登場
1.2.6 2013年 Google Cloud Platformに統一
1.2.7 2014年 GKEのリリース
1.2.8 2014年の企業買収とその成果
1.2.9 2015年 Cloud Datalabのリリース
1.2.10 2016年 Cloud Machine Learningの登場
1.2.11 2017年~2018年 進化するGCPのAI
1.2.12 2019年 AI Platformの登場
1.2.13 2018年~2019年 マルチクラウドコンテナとサーバーレスコンテナ
1.3 なぜGCPなのか
第2章 Google App Engine
2.1 Google App Engine の種類
2.2 Google App Engine の特徴
2.2.1 2008年、第1世代のGAEの登場
2.2.2 2016年、GAEフレキシブル環境の登場
2.2.2.1 コンテナランタイムが異なる
2.2.2.2 スタンダード環境に比べてスピンアップが遅い
2.2.3 2018年第2世代のGAEの登場
2.2.3.1 GAE 2ndで対応するプログラミング言語とライブラリ
2.2.3.2 ローカルファイルシステムにアクセス
2.2.3.3 外部ネットワークへのアクセス
2.2.3.4 クラウドクライアントライブラリ
2.2.4 閉じていたGAEの環境の変化
2.3 GAEの目指すところ
第3章 開発環境の構築
3.1 GAEアプリケーションの開発環境を準備する
3.1.1 Google App Engineアプリケーションの開発環境
3.2 3GCPプロジェクトとは
3.2.1 Google Cloud Identity & Access Management(IAM)
3.2.2 プロジェクトとアプリケーションは1対1
3.3 GCPプロジェクトを作成する
3.3.1 GuestBookアプリケーション用のGCPプロジェクトを作成する
3.4 Google Cloud Shellとは
3.4.1 クラウドシェルの使い方
3.5 コードエディターとは
3.5.1 コードエディターを使う
3.5.2 Python3の環境を用意する
3.5.2.1 仮想環境を用意する
Column「なぜ仮想環境を使うのか」
3.5.3 2回目以降の初期設定
3.5.3.1 クラウドシェルの注意事項
Column「マイクロサービスの場合」
第4章 GAEアプリケーション作成
4.1 最初のGAEアプリケーションを作成する
4.1.1 アプリの作成練習
4.1.1.1 作業フォルダと仮想環境の確認
4.1.1.2 [手順①]app.yamlの作成
4.1.1.3 [手順②]requirements.txtの作成
4.1.1.4 [手順③]依存関係のインストール
4.1.1.5 [手順④]main.pyの作成
4.1.2 アプリケーションを実行する
4.1.3 動作確認
4.2 アプリケーションのデプロイ
4.2.1 デプロイの方法
4.2.1.1 [手順①]デプロイ先のGCPプロジェクトの確認
4.2.1.2 [手順②]デプロイする
4.2.2 動作確認
4.3 デプロイバージョンを管理する
4.3.1 新しいバージョンをデプロイする
4.3.2 トラフィック量を調整する
4.4 [実習]アプリケーションの作成
4.4.1 アプリケーション作成の手順
4.4.1.1 作業フォルダと仮想環境の確認
4.4.1.2 [手順①]app.yamlの作成
4.4.1.3 [手順②]requirements.txtの作成
4.4.1.4 [手順③]依存関係のインストール
4.4.1.5 [手順④]main.pyの作成
4.4.2 動作確認
4.4.3 解答
4.5 アプリ作成のまとめ
4.6 課金上限を設定する
4.6.1 設定方法
第5章 Web アプリケーション概要
5.1 モダンなWebアプリケーション
Column「サーバーサイドレンダリングとクライアントサイドレンダリング」
5.2 Web APIとは
5.2.1 RESTfulとは
5.3 本書で作成するWebアプリについて
5.3.1 本書で作成するWeb API
第6章 FlaskによるHTTPリクエストの処理
6.1 Flask フレームワーク
6.1.1 WSGI規格
6.2 テンプレートの利用
6.2.1 Jinja2を使う練習
6.2.1.1 開発環境の確認
6.2.1.2 [手順①]インポートモジュールの確認
6.2.1.3 [手順②]テンプレートファイルの作成
6.2.1.4 [手順③]レンダリング
6.2.2 動作確認
6.3 [実習]Jinja2を使う
6.3.1 実習の手順
6.3.1.1 開発環境の確認
6.3.1.2 [手順①]インポートモジュールの確認
6.3.1.3 [手順②]テンプレートファイルの作成
6.3.1.4 [手順③]レンダリング
6.3.2 動作確認
6.4 エラーページのカスタマイズ
6.4.1 エラーハンドリングの練習
6.4.1.1 開発環境の確認
6.4.1.2 [手順①]エラーハンドリング用のビュー関数を作成する
6.4.1.3 [手順②]WSGIアプリケーションにエラー用ビュー関数を登録する
6.4.1.4 main.py
6.4.2.動作確認
6.5 [実習]エラーハンドリング
6.5.1 実習の手順
6.5.1.1 開発環境の確認
6.5.1.2 [手順①]インポートモジュールの確認
6.5.1.2 [手順②]エラーハンドリングをするためのビュー関数を作成する
6.5.1.3 [手順③]WSGIアプリケーションにエラー処理用の関数を登録する
6.5.1.4 main.py
6.5.2.動作確認
6.6 フォーム処理
6.6.1 WTFormsの練習
6.6.1.1 開発環境の確認
6.6.1.2 [準備]ライブラリをインストールする
6.6.1.3 [手順①]インポートモジュールの確認
6.6.1.4 [手順②]フォームを定義
6.6.1.5 [手順③]フォームのレンダリング
6.6.1.6 [手順④]POSTメソッドの許可
6.6.1.7 [手順⑤]フォームデータのバリデート
6.6.1.8 [手順⑥]バリデートに成功したデータの利用
6.6.1.9 [手順⑦]バリデートに失敗した際のエラーのレンダリング
6.6.2 動作確認
6.6.3 Exampleプロジェクトのクリーンアップ
6.7 Web APIの追加
6.8 GETメソッド[練習①]
6.8.1 list APIの作成手順
6.8.1.1 開発環境の確認
6.8.1.2 [手順①]インポートモジュールの確認
6.8.1.3 [手順②]リクエストの処理の追加
6.8.2 動作確認
6.9 [実習]GETメソッド①
6.9.1 実習の手順
6.9.1.1 開発環境の確認
6.9.1.2 [手順①]インポートモジュールの確認
6.9.1.3 [手順②]リクエストの処理の追加
6.9.1.4 [手順③]index.htmlの作成
6.9.2 動作確認
6.9.2.1 クラウドシェルで確認
6.10 POSTメソッドの練習
6.10.1 insert APIの作成手順
6.10.1.1 開発環境の確認
6.10.1.2 [手順①]インポートモジュールの確認
6.10.1.3 [手順②]リクエストの処理の追加
6.10.1.4 [手順③]index.htmlの作成
6.10.2 動作確認
6.11 [実習]POSTメソッド
6.11.1 実習の手順
6.11.1.1 開発環境の確認
6.11.1.2 [手順①]リクエストの処理の追加
6.11.2 動作確認
6.11.2.1 クラウドシェルで確認
6.12 GETメソッド[練習②]
6.12.1 get APIの作成手順
6.12.1.1 開発環境の確認
6.12.1.2 [手順①]リクエストの処理の追加
6.12.2 動作確認
6.13 [実習]GETメソッド②
6.13.1 実習の手順
6.13.1.1 開発環境の確認
6.13.1.2 [手順①]インポートモジュールの確認
6.13.1.3 [手順②]リクエストの処理の追加
6.13.2 動作確認
6.13.2.1 クラウドシェルで確認
第7章 ログ
7.1 アプリケーションログ
7.1.1 ログを出力する3つの方法
7.2 Python loggingモジュールを使ったログ出力
7.2.1 Python loggingモジュールを使ったログ出力の練習
7.2.1.1 開発環境の確認
7.2.1.2 [手順①]インポートモジュールの確認
7.2.1.3 [手順②]ログの出力
7.2.2 ローカル環境での確認
7.2.2.1 ログ出力の練習(続き)出力レベルの変更
7.2.2.2 Exceptionのログ出力
7.2.2.3 main.pyの修正箇所
7.2.3 デプロイして確認
7.3 [実習]ログ出力
7.3.1 実習の手順
7.3.1.1 開発環境の確認
7.3.1.2 [手順①]インポートモジュールの確認
7.3.1.3 [手順②]ログの出力
7.3.2 動作確認
7.3.3 解答
7.4 Logging Client Librariesを使ったログ出力
7.4.1 Logging Client Librariesを使ったログ出力の方法の練習
7.4.1.1 開発環境の確認
7.4.2 [準備]Logging Client Librariesのインストール
7.4.2.1 [手順①]インポートモジュールの確認
7.4.2.2 [手順②]ログの出力
7.4.2.3 [手順③]404エラーハンドラの修正
7.4.2.4 main.py
7.4.3 動作確認
7.5 Cloud Logging Handlerを使ったログの出力
7.5.1 Cloud Logging Handlerを使ったログ出力の方法の練習
7.5.1.1 [手順①]インポートモジュールの確認
7.5.1.2 [手順②]ロギングハンドエラーの設定
7.5.1.3 [手順③]ログの出力
7.5.1.4 main.py
7.5.2 動作確認
7.5.3 Exampleプロジェクトのクリーンアップ
第8章 Cloud Datastoreを使う
8.1 Cloud DatastoreとCloud Firestore
8.1.1 Cloud Firestoreとは
8.1.2 Realtime Databaseとネイティブモード
8.1.3 Cloud DatastoreとDatastoreモード
8.1.4 Datastoreの特徴
8.1.4.1 NoSQL
8.1.4.2 スキーマレス
8.1.4.3 フルマネージドサービス
8.1.5 DatastoreとRDBの比較
8.1.5.1 クエリの違い
8.1.5.2 スケーラビリティの違い
8.1.6 Datastoreの構成
8.1.6.1 エンティティの構成要素
8.2 Datastore にデータを保存する
8.2.1 Google Cloud Client Libraryのインストール
8.2.2 データの保存方法
8.2.3 データの保存の練習
8.2.3.1 開発環境の確認
8.2.3.2 [準備]ライブラリのインストール
8.2.3.3 [手順①]インポートモジュールの確認
8.2.3.4 [手順②]Datastoreに保存する
8.2.3.5 [手順③]レスポンスデータを返す
8.2.4 動作確認
8.2.5 [補足1]Entityオブジェクトのプロパティ設定方法
8.2.6 [補足2]キーを指定してデータを保存する
8.3 [実習]データの保存
8.3.1 insert APIの作成
8.3.2 実習の手順
8.3.2.1 開発環境の確認
8.3.2.2 [準備]ライブラリのインストール
8.3.2.3 [手順①]インポートモジュールの確認
8.3.2.4 [手順②]ds.pyファイルを作成する
8.3.2.5 [手順③]Datastoreに保存する
8.3.2.6 [手順④]レスポンスデータを返す
8.3.3 動作確認
8.3.3.1 クラウドシェルで確認
8.4 Datastore からデータを取得する
8.4.1 クエリ
8.4.2 データの取得方法
8.4.3 データ取得の練習
8.4.3.1 開発環境の確認
8.4.3.2 [手順①]インポートモジュールの確認
8.4.3.3 [手順②]Datastoreからデータを取得する
8.4.3.4 [手順③]レスポンスデータを返す
8.4.4 動作確認
8.4.5 [補足]検索条件を指定する
8.4.5.1 プロパティを使って検索
8.5 [実習]データの取得
8.5.1 list APIの作成
8.5.2 実習の手順
8.5.2.1 開発環境の確認
8.5.2.2 [手順①]インポートモジュールの確認
8.5.2.3 [手順②]Datastoreからデータを取得する
8.5.2.4 [手順③]レスポンスデータを返す
8.5.3 動作確認
8.5.3.1 クラウドシェルで確認
8.6 データを1件取得する
8.6.1 Keyを使ったデータ取得方法
8.6.2 Keyを使ったデータ取得の練習
8.6.2.1 開発環境の確認
8.6.2.2 [手順①]インポートモジュールの確認
8.6.2.3 [手順②]キーを使ってDatastoreからデータを取得する
8.6.2.4 [手順③]レスポンスデータを返す
8.6.3 動作確認
8.7 [実習]Key を使ったデータ取得
8.7.1 get APIの作成
8.7.2 実習の手順
8.7.2.1 開発環境の確認
8.7.2.2 [手順①]インポートモジュールの確認
8.7.2.3 [手順②]キーを使ってDatastoreからデータを取得する
8.7.2.4 [手順③]レスポンスデータを返す
8.7.3 動作確認
8.7.3.1 クラウドシェルで確認
8.8 Datastore からデータを更新する
8.8.1 データの更新方法
8.8.2 データ更新の練習
8.8.2.1 開発環境の確認
8.8.2.2 [手順①]インポートモジュールの確認
8.8.2.3 [手順②]データを更新する
8.8.2.4 [手順③]レスポンスを返す
8.8.3 動作確認
8.9 [実習]データの更新
8.9.1 update APIの作成
8.9.2 実習の手順
8.9.2.1 開発環境の確認
8.9.2.2 [手順①]インポートモジュールの確認
8.9.2.3 [手順②]Datastoreを更新する
8.9.2.4 [手順③]レスポンスデータを返す
8.9.3 動作確認
8.9.3.1 クラウドシェルで確認
8.10 Datastore からデータを削除する
8.10.1 データの削除方法
8.10.2 データ削除の練習
8.10.2.1 開発環境の確認
8.10.2.2 [手順①]インポートモジュールの確認
8.10.2.3 [手順②]データを削除する
8.10.2.4 [手順③]レスポンスを返す
8.10.3 動作確認
8.11 [実習]データの削除
8.11.1 delete APIの作成
8.11.2 実習の手順
8.11.2.1 開発環境の確認
8.11.2.2 [手順①]インポートモジュールの確認
8.11.2.3 [手順②]データを削除する
8.11.2.4 [手順③]レスポンスデータを返す
8.11.3 動作確認
8.11.3.1 クラウドシェルで確認
8.12 実習をローカル環境で動かす
サービスアカウント
なぜローカル環境では動作しないのか
ローカル環境で動かすには
Column「デフォルトサービスア君との権限は強過ぎる」
Column「データストアエミュレーター」
第9章 エンティティグループ
9.1 エンティティグループとは
9.1.1 アンセスターパス
9.2 エンティティグループを作成する
9.2.1 エンティティグループの作成方法
9.2.2 エンティティグループの作成練習
9.2.2.1 開発環境の確認
9.2.2.2 [手順①]インポートモジュールの確認
9.2.2.3 [手順③]エンティティグループを作成する
9.2.2.4 [手順③]レスポンスを返す
9.2.2.5 動作確認
9.3 [実習]エンティティグループの作成
9.3.1 comment APIの作成
9.3.2 実習の手順
9.3.2.1 開発環境の確認
9.3.2.2 [手順①]インポートモジュールの確認
9.3.2.3 [手順③]エンティティグループを作成する
9.3.2.4 [手順③]レスポンスデータを返す
9.3.3 動作確認
9.3.3.1 クラウドシェルで確認
9.4 エンティティグループを取得する
9.4.1 エンティティグループの取得方法
9.4.2 エンティティグループの取得練習
9.4.2.1 開発環境の確認
9.4.2.2 [手順①]インポートモジュールの確認
9.4.2.3 [手順③]エンティティグループを取得する
9.4.2.4 [手順③]レスポンスを返す
9.4.3 動作確認
9.5 [実習]エンティティグループを取得する
9.5.1 listCommentAPIの作成
9.5.2 実習の手順
9.5.2.1 開発環境の確認
9.5.2.2 [手順①]インポートモジュールの確認
9.5.2.3 [手順③]エンティティグループを作成する
9.5.2.4 [手順③]レスポンスデータを返す
9.5.3 動作確認
9.5.3.1 クラウドシェルで確認
第10章 Google Cloud Storageを使う
10.1 Google Cloud Storageとは
10.1.1 GCSのコンポーネント
10.1.1.1 バケット
10.1.1.2 オブジェクト
10.1.2 ストレージクラス
10.1.3 アクセス制御
10.1.3.1 GCSのIAMの役割
10.1.4 アクセス制御リスト
10.2 実践GCS
10.2.1 GCSの練習
10.2.1.1 [手順①]バケットを作成する
10.2.1.2 [手順②]ファイルをアップロードする
10.2.1.3 [手順③]バケット内のファイルを一般公開する
10.2.2 動作確認
10.3 GAEからGCSを操作する
10.3.1 GCSを操作するための準備
10.3.1.1 [準備]Google Cloudクライアントライブラリのインストール
10.4 GCSにファイルをアップロードする
10.4.1 アップロードの方法
10.4.2 GCSにファイルをアップロードする練習
10.4.2.1 開発環境の確認
10.4.2.2 [手順①]インポートモジュールの確認
10.4.2.3 [手順②]アップロード画面の作成
10.4.2.4 [手順③]GCSにアップロードする
10.4.2.5 main.py
10.4.3 動作確認
10.5 [実習]GCSにファイルをアップロードする
10.5.1 [実習]の手順
10.5.1.1 開発環境の確認
10.5.1.2 [準備①]バケットを作成する
10.5.1.3 [準備②]ライブラリをインストールする
10.5.1.4 [手順①]インポートモジュールの確認
10.5.1.5 [手順②]アップロード画面の作成
10.5.1.6 [手順③]GCSにアップロードする
10.5.2 動作確認
10.6 GCSからファイルを取得する
10.6.1 オブジェクト取得の方法
10.6.2 GCSからファイルを取得する練習
10.6.2.1 開発環境の確認
10.6.2.2 [手順①]インポートモジュールの確認
10.6.2.3 [手順②]画像一覧画面の作成
10.6.2.4 [手順③]GCSからファイルを取得する
10.6.2.5 main.py
10.6.3 動作確認
10.7 [実習]GCSからファイルを取得する
10.7.1 実習の手順
10.7.1.1 開発環境の確認
10.7.1.2 [手順①]インポートモジュールの確認
10.7.1.3 [手順②]画像一覧画面の確認
10.7.1.4 [手順③]GCSから画像を取得する
10.7.2 動作確認
第11章 そのほかのサービス
11.1 GCPの機能をもっと使うには
11.2 Cloud Identity-Aware Proxy(Cloud IAP)とは
11.2.1 [練習]Cloud IAPの使い方
11.2.2 ユーザーを制限する
11.2.3 ユーザーを承認する
11.3 Cloud Tasks
11.3.1 Cloud Tasksの仕組み
11.3.1.1 Cloud Tasksにタスクキューを作成する
11.3.1.2 タスクを作成したキューに追加する
11.3.1.3 Cloud Tasksがワーカーを起動して処理する
11.3.1.4 結果を返す
11.3.2 [練習]Cloud Tasksの使い方
11.3.2.1 [準備]Google Cloudクライアントライブラリのインストール
11.3.2.2 キューを作成する
11.3.3 Cloud Tasksと連携する練習
11.3.3.1 [手順①]インポートモジュールの確認
11.3.3.2 [手順②]キューにタスクを追加する
11.3.3.3 [手順③]タスクハンドラーを作成する
11.3.3.4 main.py
11.3.4動作確認
Column「タスクが正しく処理されずに再試行を繰り返している場合」
11.4 Cloud Scheduler
11.4.1 [練習]Cloud Schedulerの使い方
11.4.1.1 ジョブの作成
11.4.1.2 App Engine HTTPターゲットを作成する
11.4.1.3 main.py
11.4.2 動作確認
索引