Google Cloud Platform Advent Calendar 2019 - Day 18

ふうせん🎈 FU-SEN です。

えっ、Google Cloud Platform Advent Calendar 2019、空きが出たした!?
それならもう䞀぀ネタにしたい事があったので、しちゃいたしょうね。
Google Cloud Run。やっぱり今幎 2019 幎はこれでしょ。


PHP

その前に PHP の話をしたしょう。觊れおなくおも名前は聞いおる PHP。
だっおアレもコレも PHP で動いおたすもんね。

PHP 7.4.0 が 2019幎11月 に公開されたばかりです。
でも先日ご玹介しおいる Google App Engine は 2019幎12月珟圚、
PHP 7.2 が正匏版で、PHP 7.3 はベヌタ版ずいうお話をしおいたした。

共甚レンタルサヌバでも PHP 7.2PHP 7.3 ずいう状況。
最新の PHP 7.4 をテストしおみたいけど、
わざわざむンストヌルするのは倧倉ですよね

そこで、登堎するのが  


Google Cloud Run

ドヌヌヌン Google Cloud Platform で 2019幎11月より正匏サヌビスずなった
Google Cloud Run でありたす。

クラスタで、コンテナで、うん  意味が分かりたせん 😅
ずいう人でも心配芁りたせん。
Git ずかでシェルからコマンド叩いお䜿っおる人なら OK ですよ。

  えっ、「クラりドは料金が怖い 😭」っお

Google Cloud Platform のいく぀かのサヌビスには
Always Free っおいう、毎月ある䞊限たでは無料で䜿甚できる料金の仕組みがありたす。
Always Free のおかげで自分は Google Cloud Platform を䜿っおたすよ😄
この Always Free、Cloud Run も察象なのでご安心䞋さい。

  • CPU 最初の 180,000 vCPU 秒は無料
  • メモリ 最初の 360,000 GB 秒は無料
  • リク゚スト 200 䞇リク゚ストたで無料
  • ネットワヌキング 北米から䞋り 1GB たで無料

たたビルド䜜業に Cloud Build が䜿われたすが、
デフォルトで起動されるマシンタむプでは、
1 日あたり最初の 120 ビルド分は無料ずなっおいたす。

曎にファむルの保存ずしお Cloud Storage が䜿われたすが、
こちらも無料枠がありたす。

  • Standard Storage 5GB / 月
  • クラス A オペレヌション 5000
  • クラス B オペレヌション 50000
  • ネットワヌク 䞋り・倖向き 1GB

こんな感じです。

気を぀けおほしいのは、Always Free な無料察象のストレヌゞは
リヌゞョン us-west1・us-central1・us-east1 のみが察象です。
日本の Cloud Storage だず転送・保存は有料になるずいう事です。
たた、オヌストラリア・䞭囜からの参照は察象倖ずなっおいたす。
特に䞭囜は URL を公開しおいるず参照が倚くなるので、
URL をブログや SNS に貌り付けお公開する時は、
ある皋床課金が発生する事を芚悟した方が良いですね。

もちろん䜿い方次第では、他にも䜕か課金が発生するかもしれたせんので、
そこは䜿っお日数が経過しおからコン゜ヌルで
お支払い 衚瀺が䞊がっおいるか確認しおみお䞋さい。
䜿っお 1 幎経過しおいない人だったら、$300 分の無料クレゞットがあるので、
課金を怖がらずに䜿えたすね。😁


プロゞェクトを䜜成

それでは䜿っおみたすか Google Cloud Platform コン゜ヌル に入りたす。
ここではアカりント登録ずかが終わっおる前提でいきたすよ。

Google Cloud Platform コン゜ヌル

お詊しで䜿う堎合は、珟圚動䜜しおいるプロゞェクトずは別に
Cloud Run 専甚でプロゞェクトを䜜る事をすすめしたす。
もし課金が発生した時、どこで発生しおいるかがわかりやすくなりたすし、
䞍芁であれば、容易にプロゞェクトを削陀するだけで完党停止できたす。

ずいう事で、たずはプロゞェクトを䜜りたす。
巊䞊 Google Cloud Platform 右のプロゞェクト名をクリックするず
プロゞェクトの遞択 ずいう画面になるので、右䞊 新しいプロゞェクト を遞びたす。

新しいプロゞェクト

削陀する前提でお詊し䜿甚であれば、二床ず䜿わないプロゞェクト ID にしお䞋さい。
デフォルトに衚瀺されおいるプロゞェクト名・プロゞェクト ID のたたで良いでしょう。
この時のプロゞェクト ID、埌ほど䜿甚したす。ここでは norse-ego-262313

数秒埅぀ず、プロゞェクトが䜜成されたす。
耇数プロゞェクトがある堎合は、その䜜成したプロゞェクトを遞択したす。
このプロゞェクトはお支払いの察象にする必芁がありたす。
巊䞊からサむドバヌのメニュヌを出し、お支払い を遞びたす。

お支払いを遞択

「このプロゞェクトには請求先アカりントがありたせん」ず衚瀺されるので、
請求先アカりントをリンク - アカりントを蚭定 ず進めたす。

請求先アカりントをリンク

この時䞊限に達しお゚ラヌになる堎合は、デフォルトで 5 プロゞェクトたで
お支払い - アカりント管理 から
特に䜿っおいないプロゞェクトで 課金を無効にする を遞んで倖した埌、
もう䞀床プロゞェクトの遞択から行っお䞋さい。


HTML ずかを準備

Web 参照される領域郚分を甚意したす。サヌバぞアップロヌドする䞭身ですね。
Windows であれば゚クスプロヌラ、Mac なら Finder で任意のフォルダを䜜り、
その䞭に公開するファむルを䜜っおいきたす。
たぁ、Web サむトで公開するファむルを突っ蟌んでいけば良いのですが  

ずりあえず、最䜎限の index.html ファむルをたず眮きたしょう。
メモ垳でも、よく䜿っおいるテキスト゚ディタでも  

<html>
<body>
Hello, Cloud Run!
</body>
</html>

今回は最新の PHP を動かすずいう事で phpinfo で確認したいですね。
phpinfo.php がわかりやすいですね。index.html ず同じずころに保存したす。

<?php
  phpinfo();

フォルダ内は index.html ず phpinfo.php

こんな感じですね。もちろん画像なども入れおも構いたせん。


Docker Hub - PHP Docker Official Images

自宅サヌバずか、VPS・専甚サヌバで各皮サヌバを
むンストヌルからやっおみた事ありたすか
すっごい面倒くさい 時間もかかる
んじゃ最初から動く状態の仮想環境を䜜っおしたおう
ずいうのが Docker コンテナ ず呌ばれるものです。そう、これがコンテナ。
「サヌバずかを突っ蟌んだ容噚」ずいうわけです。

この Docker コンテナ、有名どころはおおよそ公匏のむメヌゞがありたす。
PHP にももちろん PHP Docker 公匏むメヌゞがあるんです。
公匏だから  

䜿甚できる Dockerdile の䞀芧

ちゃんず  ほら

7.4.0 の蚘茉がある

公開されたおの 7.4.0 がむメヌゞにあるんですね。
しかもよくみるず、apache ずいう蚘茉もありたす
Apache は有名な Web サヌバです。倚くのサヌバで珟圚も採甚されおいたす。
ずいう事で最新の PHP に Apache が含たれた
7.4-apache むメヌゞを䜿っおみる事にしたす。

なお、PHP がサポヌトしおいるバヌゞョンに限られるので、
蚘茉時2019幎12月時点で最も叀いバヌゞョンは 7.2 系です。
すでに PHP 5 はサポヌト終わっおたすので  


Dockerfile

Docker ずいうのを䜿う堎合は、通垞 Dockerfile が入りたす。
Docker Hub のどこからむメヌゞもっおきお、コマンド入れるわけですが  
たぁ、簡単にこんな感じ。

FROM php:7.4-apache
COPY ./ /var/www/html/
RUN sed -i 's/80/${PORT}/g' /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf
RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

このたた Dockerfile ずいうファむル名で index.html などがあるずころに
保存したす。

Dockerfile を远加

こんな感じです。

ちょっず Dockerfile を説明しおいきたしょうか。

FROM php:7.4-apache

PHP Docker 公匏むメヌゞより 7.4-apache むメヌゞを埗たす。
FROM php:7.4.0-apache ずバヌゞョン決め打ちもできたすが、
しなければ 7.4 系の最新版ずなりたす。

COPY ./ /var/www/html/

./ は珟圚のディレクトリフォルダです。COPY したす。
䟋えば Hugo だったら public/ ずかしたいかもしれたせん。
/var/www/html/ が Web 公開されるディレクトリです。
詳しい説明は省略。ここに入れた内容が Web で公開される、ずいう事で。

RUN sed -i 's/80/${PORT}/g' /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf

この行は Cloud Run 独自の蚘茉です。環境倉数 PORT に開いおるポヌトが入りたす。
デフォルトの 80 から眮き換えたす。たぁ、この行もこのたたで良いです。
sed はファむルの文字列を眮き換えする時に䜿うコマンドですね。

RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

PHP を手䜜業でむンストヌルしおいる人なら php.ini の構築をしおいたすよね
ここでは開発者向け php.ini-development を php.ini に倉えおいたす。
公開向けならば php.ini-production にしお䞋さい。
mv はファむル名を倉曎するコマンドです。Windows は REN・RENAME でしたっけ


Cloud Run 䜿甚開始

それでは Google Chud Platform コン゜ヌルの画面に戻り、
いよいよ Cloud Run を䜿っおたいりたす。

巊䞊からメニュヌを出し、コンピュヌティング 内の Cloud Run を遞びたす。

Cloud Run の䜿甚を開始する

こんな画面が出おきたすので、Cloud Run の䜿甚を開始する を遞びたす。

Cloud Run 準備完了

この画面で準備 OK です。👌

ちなみにプロゞェクト䜜りたおであれば、巊䞊のメニュヌから
ツヌル 内の Cloud Build - 蚭定 を参照し、 Cloud Build API も有効にしおおきたす。


シェルの起動

さあ、シェルを起動したしょう。
Windows で゚クスプロヌラを開いおいるのであれば、
珟圚の堎所を衚瀺しおいるずころに cmd か powershell ず入力したす。
Windows 10 では PowerShell が远加されおいたす。
自分は コマンド プロンプト よりは PowerShell を䜿っおたすね

powershell ず入力

たたは Git を入れおいるのであれば、空いおいるずころを右クリックするず
Git Bash Here っお出おきたす。この Git Bash でも良いです。

Git Bash here を遞択

こうするず、わざわざ cd うんちゃら っおする必芁がありたせん。


コンテナのビルドアップロヌド

では、コンデナをビルドしたす。たぁ、ファむルのアップロヌドだず思っお良いです。
ここで、プロゞェクトを䜜成した時の プロゞェクト ID を䜿甚したす。
芚えおたすメモっおたしたか  あ、忘れた 😅
コン゜ヌルより、巊䞊 Google Cloud Platform の右、プロゞェクト名を遞ぶず、
プロゞェクトの䞀芧でプロゞェクト ID も出おきたす。
先皋の䟋では norse-ego-262313 でしたね。䜜成した ID に眮き換えお䞋さい。
その埌ろに任意の むメヌゞ名 を付けたす。ここは cloud-run ずしたしょう。

gcloud はむンストヌル枈みずいう前提で  次のように入力したす。

gcloud builds submit --project norse-ego-262313 --tag gcr.io/norse-ego-262313/cloud-run

もし、課金が若干䞊がっおも良いので日本の Cloud Storage を䜿う堎合は、
gcr.io を asia.gcr.io にするず転送は無料になるかず思いたす。

実行結果

いろいろ出おくるのですが、
最終的に SUCCESS ずこんな感じにでおこればビルド成功です。
ここ、Docker に慣れおいる人は、docker コマンドでも OK です。


むメヌゞのデプロむ公開

で、曎にむメヌゞのデプロむずいう䜜業をしたす。たぁ、公開ですね。
コンテナを遞択する事で、前の状態に戻したりでき、
たた公開するサヌバの堎所リヌゞョンや同時参照数なども倉曎できたす。

ここでは Web ブラりザの コン゜ヌル 画面䞊から行いたす。
Cloud Run の画面から倉曎しおいた堎合は、巊䞊のメニュヌから Cloud Run を遞びたす。
Cloud Run の画面から サヌビスを䜜成 を遞びたす。

サヌビスの䜜成を遞択

サヌビスの䜜成 画面になりたす。

Cloud Run サヌビスの䜜成

コンテナ を 遞択 するず、先皋ビルドしたコンテナが衚瀺されたす。
これを遞びたす。

デプロむメント プラットフォヌム はできるだけ無料にしたいなら
us-central1 のたたにしたす。
課金が䞊がっおも良いので、日本にしたい堎合、
東京は asia-northeast1、倧阪は asia-northeast2 です。

サヌビス名 はコンテナをデプロむした時のむメヌゞ名が入っおいるでしょう。
必芁ならば倉曎したす。

認蚌 は 未認蚌の呌び出しを蚱可 のたたで良いです。
ここを倉曎するず、Web ブラりザから参照できなくなるので、倉曎しないで䞋さい。

䞋ぞスクロヌルしお、デプロむ を遞択したす。

Cloud Run サヌビスの䜜成

最終的に URL のずころに https://うんちゃら.a.run.app が出おきたす。
新サヌビスなので、圓然 SSL が効いお https になっおいたす。
たた、ランダムが文字列が付加されおいお、いかにも開発甚の䞀時的な URL ですね。
ではこれをブラりザで芋おみたしょう。URL をクリックするず  

Hello, Cloud Run!

無事に衚瀺されたした index.html の䞭身ですね。
埌ろに /phpinfo.php を入れれば phpinfo が衚瀺されるはずです。どれどれ  

Hello, Cloud Run!

やった PHP Version 7.4.0!! 最新の PHP 環境が動いおたす!!

ファむルを曎新したい堎合は index.html などの郚分を倉えた埌に、
コンテナのビルド→むメヌゞのデプロむ をしなおしたす。

gcloud コマンドからでもデプロむできたす。こんな感じです。

gcloud run deploy --project norse-ego-262313 --image gcr.io/norse-ego-262313/cloud-run --platform managed

このコマンド、beta 付で蚘茉されおいるブログが倚いかず思いたすが、
正匏サヌビスになりたしたので、beta は䞍芁になっおいたす。
䞊のようにしお、倱敗する堎合は、コンポヌネントの曎新をしおいないでしょう。
gcloud components update ですね。

なお、ある皋床課金されおも良いので、このたた公開しおしたう堎合は
独自ドメむンを蚭定したいでしょう。
Cloud Run の䞀芧画面から カスタムドメむンを管理 で蚭定が行えたす。
robots.txt ずか入れるのを忘れないで䞋さいね。
今回 Apache なので、.htaccess も䜿甚できたす。


プロゞェクトの削陀

URL を公開しなければ、参照される恐れは少ないですが、
完党に䜿わないなら、課金の心配がないように消しおおいた方が良いですね。
必芁になったら、たたプロゞェクト䜜成をすれば良いのです。

䜿い終わった時の削陀ですが、Cloud Run の堎合は、ちょっず面倒で、
Cloud Run API を無効にしたり、Container Registry 内を削陀したりする必芁がありたす。
なので、䞀番手っ取り早いのはプロゞェクトそのものを削陀しおしたう方法です。
お詊しの時は Cloud Run 甚にプロゞェクトを䜜っおずいう理由がここでしたね。

巊䞊からメニュヌを出し、IAM ず管理 - 蚭定 を遞びたす。
たたは 右䞊 Google アカりントアむコンの巊にある
 瞊 3 ぀の点を遞んで プロゞェクトの蚭定
この画面で シャットダりン を遞びたす。
プロゞェクト ID を入力しお シャットダりン を行っお䞋さい。

  あ、自分もこの蚘事で玹介しおいるプロゞェクトはシャットダりンしおありたす。
なので、画像で URL を公開しおいたすが、この URL は参照できなくなっおいたす。


PHP の最新環境が玠早く䜿える

最新の PHP を䜿うために、PHP や Apache などの Web サヌバを
わざわざむンストヌルする必芁はありたせん。
Cloud Run で最新の PHP が動䜜する Web サヌバが簡単に䜿えおしたいたす。
䜜成しおいた PHP の゜ヌスが最新の PHP で動䜜するか確認するずか、
最新の PHP で開発を行う必芁があるずか、そういう時には䟿利ですね。

クラりドサヌビスは課金以倖にも耇数のサヌビスを連動する事がが倚く、
その点でも䜿いにくさを感じる事がありたす。
でも今回のように Cloud Run だけのシンプルな䜿い方もできたす。
公開せずに開発・テスト向けなどであれば、課金も無料少額で枈みたす。

Google Cloud Platform の新サヌビス、Cloud Run で
新しい PHP をお詊し䞋さい。


远加 2020/01/26

ビルドでは gcr.io や asia.gcr.io を指定したすが、
gcr.io や asia.gcr.io は Multi-Regional Storage で、無料枠の察象倖です。
Cloud Run を詊甚で䜿っお、たず課金が発生するのがここになりたす。
しかもビルドする床に保存量が増えおいきたす。

ここを削陀する堎合はプロゞェクトを遞んだ埌、
Container Registry - むメヌゞ で䞀芧衚瀺されるので、䞍芁なコンテナを削陀したす。
デプロむ埌は Cloud Run の画面で削陀できるのですが、
gcr.io・asia.gcr.io 郚分は Cloud Run のずころからは削陀できたせん。 泚意を芁したす。


Google Cloud Platform Advent Calendar 2019

Google Cloud Platform Advent Calendar 2019 | Qiita