人生コツコツと

人生コツコツと

システム構築時に役立つ技術情報/参考情報や運営サイトの更新記録を公開しています。

Amebaでブログを始めよう!

PHP+Smartyで作成サイトをGAE(Google App Engine)に移行したので感想と手順を記述します。

 

#移行作業概要

・GCP上に新規プロジェクト作成

・GCPのMySQL作成、DBデータ移行

・app.yaml作成

・メール送信関数を変更

・SmartyのファイルキャッシュをGCS出力に変更(*1)

・アプリログ出力をsyslog()出力

・画像ファイルをGCSに配置してインタネット公開

・画像ファイルのURLリンクを変更

・mysql_xxxx()関数をmysqli_xxxx()に変更(*2)

(*1)とりあえず動くけど、速度に若干不満あるので将来的にはmemcacheやBigTableへの移行を検討

(*2)M/Wのバージョンアップ影響

 

#ファイル配置

$GAE_BASE/app.yaml

$GAE_BASE/php.ini

$GAE_BASE/html/Smarty/*

$GAE_BASE/html/modules/*

$GAE_BASE/html/css/*

$GAE_BASE/html/js/*

gs:://xxxxxxx.appspot.com/img/*

gs:://xxxxxxx.appspot.com/compiled/*

gs:://xxxxxxx.appspot.com/cache/*

 

##app.yaml

```

application: xxxxxxxxxxx

version: 1-0

runtime: php55

api_version: 1

threadsafe: true

 

handlers:

- url: /css

  static_dir: html/css

- url: /js

  static_dir: html/js

- url: .*

  script: html/modules/index.php

```

 

##php.ini

GCSにsmartyキャッシュファイルを配置するので、このおまじない設定が必要。

```

allow_url_include = "1"

google_app_engine.allow_include_gs_buckets = "バケット名/compiled/,バケット名/cache/"

```


##メール送信関数変更

mail()やmb_send_mail()は使えないのでgoogle提供ライブラリを利用

```

 

 

use \google\appengine\api\mail\Message;

 

$message = new Message();

$message->setSender("送信者メールアドレス");

$message->addTo('宛先メールアドレス');

$message->setSubject('件名');

$message->setTextBody('本文');

$message->send();

```

 

##GCPバケットのデフォルト設定変更

外部公開用バケットを作成してデフォルト設定を一般公開に設定。

コピー前のファイルの公開属性は変更されないが、新規作成ファイルは一般公開で作成される。

```

gsutil defacl ch -u AllUsers:R gs://xxxxxxx.appspot.com/

gsutil defacl get gs://xxxxx.appspot.com/

```

 

#感想

・GAE移行は1日かからずに、できてしまうから簡単。

・データや画像ファイル移行、ミドルバージョンアップ影響調査に時間がかかった。

・PaaSの普及でインフラ技術者が、ますます不要になってくる。

 

 

 

 

CakePHP2.8.7で作成したアプリをGAE(Google App Engine)に移行したので手順をメモしておきます。

思ったより少ない工数で簡単に移行できました。

今後はGAEでのアプリ開発が主流になり、インフラ専任技術者は不要になってくると思われる。

 

#修正概要

・app.yamlでアプリ設定

・cron.yamlでバッチ処理起動設定

・数千ファイルある画像ファイルをGCSに配置

・画像のリンクをGCSアドレスに変更

・Fileキャッシュを別の方式に変更(本番=APC 開発=Memcache)

・メール送信をgoogle提供関数に切り替え

・カスタムドメイン設定、DNS設定変更(TXT,MX,A,AAA)

・CakePHPログをFileLogからSyslogLogに変更

・データファイルを絶対パスから相対パスに変更

・ローカルディスク書き込みをデータベース書き込みに変更

・getmypid()は使えない

・ファイルアップロード時の保存先変更

 

#GAEのメリット

・とにかく簡単で使い易い。

・無料枠が広くて、個人サイトレベルではタダで利用できる

・ストレージ料金が安いので容量を気にせず利用できる。

・開発環境が使いやすくて開発効率がアップする。

・管理画面でアクセス状況やエラー状況等を確認できて便利。

・googleインフラ上で動くので、大量なアクセスをさばける

・loggingが使い易い

・アプリバージョン管理や切り替えが簡単

・本番デプロイが簡単

・yamlファイル設定のみでgoogle認証が利用できる

・BigQuery等のgoogleサービスを追加インストール不要で利用できる

・重い処理はタスクキューにまわせる

 

#GAEのデメリット

・現時点(2016/10/5)時点では日本リージョンがなく、USだと100ms程度オーバヘッドあり

・外部コマンドは利用できないものが多い。

・特殊な処理は外部APIへの移行が必要

・ローカルディスクを使ってゴリゴリするアプリは別の方法への移行が必要

・開発環境でできない機能(APC、メール送信、google認証は簡易的なもの)

 

#移行サイト

http://105638.info/

 

#修正ファイル一覧
app/Utility/AppEngine.php : 本番・開発判定関数追加

app/Config/bootstrap.php:出力設定

app/Config/core.php:出力設定

app/Config/database.php:DB接続設定

app/Controller/*.php:【アプリ】コントローラ

app/Model/*.php:【アプリ】モデル

app/View/*/*.php:【アプリ】モデル

app/webroot/*:【アプリ】静的ファイル