Cloud RunでPhalconをサーバーレスに実行する
Cloud Runを使うとコンテナをFaaSのように呼ばれた時だけ実行することができます。
PHPのマイクロフレームワークPhalconで作ったコードをコンテナに固めて実行してみます。
まずはコンテナを作りましょう。
Cloud Shellで作業します。
以下3ファイルを作成します。
8080ポートをリッスンするようにしてるのはCloud Runへのデプロイがこけるからです。
コンテナをビルド、実行します。
「https://8080-521240b2-607a-5167-abb1-a7d2245e6759.asia-east1.cloudshell.dev/hello/phalcon」みたいなURLでCloud ShellからプレビューできればOK。
.dockerignoreを作り、Cloud Buildでコンテナイメージをビルドし、Container Registryに格納します。
イメージをCloud Runにデプロイします。
途中サービス名、リージョンを入力し、未認証の呼び出し許可は「y」にします。
デプロイが成功するとコマンド出力の最後にエンドポイントが表示されるのでアクセスができればOK。
コードを変更するときは再度イメージのビルド、デプロイを行えば反映されます。
コンテナ単体を簡単に公開できるサービスってありそうでなかった感。
ミドルウェア自由にしてちょっとしたアプリ作りたいときに使えそう。
GCPの
PHPのマイクロフレームワークPhalconで作ったコードをコンテナに固めて実行してみます。
まずはコンテナを作りましょう。
Cloud Shellで作業します。
$ mkdir phalcon
$ cd phalcon/
FROM phalconphp/ubuntu-16.04:php-7.2
WORKDIR /app/public
COPY index.php .
WORKDIR /etc/nginx/sites-enabled
COPY nginx.conf default
<?php
use Phalcon\Mvc\Micro;
$app = new Micro();
$app->get(
"/hello/{name}",
function ($name) {
echo json_encode([
"message" => 'Hello!' . $name,
]);
}
);
$app->notFound(function () use ($app) {
$app->response->setStatusCode(404, 'Not Found.');
$app->handle();
});
$app->handle(
$_SERVER["REQUEST_URI"]
);
server {
listen 8080 default_server;
server_name example.com;
index index.php;
root /app/public;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_read_timeout 300;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}
}
コンテナをビルド、実行します。
「https://8080-521240b2-607a-5167-abb1-a7d2245e6759.asia-east1.cloudshell.dev/hello/phalcon」みたいなURLでCloud ShellからプレビューできればOK。
$ docker build -t phalcon .
~
Successfully tagged phalcon:latest
$ docker run -d --name app -p 8080:8080 -t phalcon
$ echo Dockerfile > .dockerignore
$ gcloud builds submit --tag gcr.io/$DEVSHELL_PROJECT_ID/phalcon
$ gcloud run deploy --image gcr.io/$DEVSHELL_PROJECT_ID/phalcon --platform managed
デプロイが成功するとコマンド出力の最後にエンドポイントが表示されるのでアクセスができればOK。
コードを変更するときは再度イメージのビルド、デプロイを行えば反映されます。
コンテナ単体を簡単に公開できるサービスってありそうでなかった感。
ミドルウェア自由にしてちょっとしたアプリ作りたいときに使えそう。
ディスカッション
コメント一覧
まだ、コメントがありません