Google Cloud Run is なに?
Google Cloud Run とは、GCP マネージド型のコンピューティング プラットフォームで、
Knative を基盤としてる、コンテナをサーバーレスで実行するための環境です。
Cloud Run は、サーバーレスとコンテナの いいとこ取りを実現します。
https://cloud.google.com/run/?hl=ja
https://cloud.google.com/blog/ja/products/serverless/knative-based-cloud-run-services-are-ga
Laravel を動かす
では試しにLaravel を動かしてみましょう
事前準備
- GCP のプロジェクト作成
- GCPのgcloud コマンドをインストール
- gcloud コマンドの初期設定
- デプロイする Laravel のプロジェクトを事前に作成
デプロイの流れ
コンテナ用の設定ファイルを作成
↓
デプロイ用のコンテナイメージをビルドする
↓
ビルドしたイメージを ContainerRegistry にプッシュ
↓
プッシュしたイメージを CloudRun にデプロイ
コンテナ用の設定ファイルを作成
まずコンテナイメージのビルドに必要なファイルを作成
Dockerfile
今回は、PHP7.3 の Apacheのイメージをベースします
CloudRun で動かすコンテナは、HTTP のリクエストを 8080
ポートでリッスンしておく必要があります
# composer 用
FROM composer:1.9.0 as build
WORKDIR /app
COPY . /app
RUN composer global require hirak/prestissimo && composer install
# Laravel の実行環境用のコンテナ
FROM php:7.3-apache-stretch
RUN docker-php-ext-install pdo pdo_mysql
EXPOSE 8080
COPY --from=build /app /var/www/
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
COPY [Laravelの.envファイル] /var/www/.env
RUN chmod 777 -R /var/www/storage/ && \
echo "Listen 8080" >> /etc/apache2/ports.conf && \
chown -R www-data:www-data /var/www/ && \
a2enmod rewrite
Apacheの設定ファイル
<VirtualHost *:8080>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/public/
<Directory /var/www/>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
デプロイ用のコンテナイメージをビルド and ContainerRegistry にプッシュ
gcloud の以下のコマンドを、Dockerfile のあるディレクトリで叩く
$ gcloud builds submit --tag gcr.io/[GCPのプロジェクト ID]/[イメージ名]
コンテナイメージのビルド後 GCP ContainerRegistry にイメージがプッシュされる
Cloud Run へデプロイ
ContainerRegistry の画面から プッシュしたコンテナイメージを選択し
Cloud Run へのデプロイ
を選択する
デプロイ時に、 ローケーション、サービス名、認証について設定し、デプロイを実行する
確認
デプロイ画面で作成されたURLを確認
URLにアクセスして、Laravel で作成したアプリケーションを確認
まとめ
自分でコンテナイメージを作るため FaaS 特有の、言語縛りや、ライブラリの制限、
ベンダー特有のコーディング方法への制限がない、という点に大きな魅力を感じました。
コンテナをサーバレス化する場合の組み合わせとして、FaaS 以外の選択肢という可能性を大きく感じました!
参考