Google App Engineで初めてのPaaSを触る!PHPでHello World!

Published: 2017年2月10日 by tomsato

概要

前回の投稿でGoogle Cloud Platformの紹介からGoogle Compute Engineを使ってみるまでをまとめていた

Google Cloud Platform入門の入門

今回はGoogle App Engineを使ってみてPaaSとはどんなものなのかを学ぶ

実際にGoogle App Engineを触ってみるがGoogle Cloud SDKをCentOS6系に入れてCentOS上で開発することとする
また今回はPHP の言語を対象とするが他にもJava、Python、PHP、Goに対応している

PaaSとは

PaaS(Platform as a Service)

アプリケーションを稼働させるためのプラットフォーム一式をインターネット上のサービスとして利用する形態のこと

Google App Engineとは

Googleが提供するPaaS

App Engineは受信したトラフィック量に応じて自動的にアプリケーションをスケーリングすることができる
サーバーのプロビジョニングやメンテナンスを行う必要はなく、コードをアップロードするだけでGoogleがアプリの可用性を管理する

また自動でセキュリティスキャンを行って脆弱性を検出できたり、JenkinsやGit、Eclipseなど定番の開発ツールに対応しているとのこと

Google App EngineでHello World

初めに

PHP App Engine スタンダード環境のクイックスタート
の内容を辿っていく

環境についてはCentOS 6.8でやっていくことにする

$ cat /etc/redhat-release
CentOS release 6.8 (Final)

準備

Google App EngineはPHP5系しか使えないのでPHP5系を入れる

// すでにphpがある場合は一旦消す
$ sudo yum remove php*

$ sudo yum -y install epel-release
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ sudo yum -y install --enablerepo=remi --enablerepo=remi-php55 php php-devel php-mbstring php-cgi php-bcmath

更にpython2.7系以上が入っている必要があるので対応する

$ python -V
Python 2.6.6

// Software Collectionsを使ってpython2.7系を準備する
$ sudo yum -y install centos-release-scl
$ sudo yum -y install python27 python27-python-tools

// インストールしただけではpython27は出来なくて以下のコマンドを叩く必要がある
$ scl enable python27 bash
$ python -V
Python 2.7.8

// しかしログインする度にenableさせる必要があるので.bashrcに記述してログインする度に勝手にコマンドが叩かれるようにしておく
$ echo "source /opt/rh/python27/enable" >> ~/.bashrc

Google Cloud SDKをインストールする

// 対話式で色々聞かれるがとりあえずエンターを押していった
$ curl https://sdk.cloud.google.com | bash

// .bashrcを読み直す
$ exec -l $SHELL
// ここまでするとgcloudコマンドが使えるようになる
$ gcloud --version

initを実行して開始する

$ gcloud init
...
// とりあえずエンター
You must log in to continue. Would you like to log in (Y/n)?

Go to the following link in your browser:

    https://accounts.google.com/o/XXXXX.....
// ↑表示されるURLをブラウザでアクセスすると画面にコードが表示される

// ↓表示されたコードを貼り付けると認証が完了
Enter verification code: XXXX

// Googlo Compute Engineの設定をするか
// Yを押すとregionの選択を迫られるので東京(asia-northeast1-X)を選択した
Do you want to configure Google Compute Engine
(https://cloud.google.com/compute) settings (Y/n)?  Y

サンプルアプリケーションを動かす

Hello Worldアプリをダウンロード

$ git clone -b phase0-helloworld https://github.com/GoogleCloudPlatform/appengine-php-guestbook.git helloworld
$ cd helloworld

SDKに含まれるローカルの開発サーバー(dev_appserver.py)を使用して、アプリケーションをテストする

// そのまま実行するとエラーが出た
$ dev_appserver.py .
...
ERROR    2017-02-06 14:45:23,898 php_runtime.py:348] The PHP runtime is not available

Google App Engineのプラグインが入っている前提なので、ローカルのPHPを使うならそれを指定しなければいけない

またローカルMacでLinuxにSSHして見ている場合–hostで0.0.0.0を指定して、任意のインターフェイスからアクセスを許可させる必要がある

$ dev_appserver.py --php_executable_path=/usr/bin/php-cgi --host=0.0.0.0 .

エラーが出ていない状態で 「http://(サーバー名):8080」にアクセスする
「Hello, World!」が表示されるはず

アプリケーションをデプロイする

ここまででやっていたことは、開発環境で開発をする際のことを想定していた
次に、開発したアプリケーションを実際にGoogle App EngineにデプロイしてGoogle App Engine上で画面表示が出来るまでを体験する

// アプリケーションのデプロイ
$ gcloud app deploy

// アプリケーションの表示
$ gcloud app browse
Opening [https://tmhr-157111.appspot.com] in a new tab in your default browser

出力された「https://XXX.appspot.com」にアクセスすると「Hello, World!」が表示できる

UIを見てどんなことができるか確認する

サービス

Microservices Architecture on Google App Engine
公式ドキュメントを見てみるとアーキテクチャはこのようになっている

Projectの中でServiceを複数作成できて、その中でVersionがある

Service名はapp.yamlで指定するが、Hello Worldでは指定されていないのでGoogle App Engineの「サービス」タブを見てみると「default」となっているのがわかる

デプロイをするたびに「バージョン」が更新されていく

バージョン

「バージョン」タブではトラフィックの割り当てができるので徐々に新バージョンにルーティングさせて、問題があればロールバックさせることができる

インスタンス

Google App Engineではリクエストが増えた場合にオートスケールすることができる
「インスタンス」タブではインスタンスの稼働状態がわかる

設定

検証が終わってアプリケーションを削除・停止する場合は2つの方法がある

  • Projectを削除する
  • アプリケーションを無効にする

不意な課金を防ぐためにProject毎削除することが望ましいが、引き続き別の検証はしたいからProjectは削除したくないという場合にはアプリケーションを無効にすることができる

「設定」タブから「アプリケーションを無効にする」をクリックする

終わりに

アプリケーションをアップロードするだけで画面表示まで行えるので、開発者はサーバを保守運用する手間がかからないことがわかった

その代わり正式にGoogle App Engineを使っていくことを決めた際に、Google App Engine独自の学習コストがかかることは否めず、ドキュメントも少ないのが悩ましいところである

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧