About Google Cloud Run

Google launch a month ago Google Cloud Run, something between Google App Engine with flexible environment and Kubernetes. With cost optimization, GAE flex can’t have 0 instance for running the service. It’s zero-op and doesn’t have the complexity of Kubernetes.

The idea is to submit a docker image that Google Cloud Run will deploy within a minute (or two).

Still Beta

Only one region available (us-central) UPDATE: Not anymore, I’ve seen european region available

The pricing model seems interesting, the ability to have 0 instance running can be useful. I’m not sure how the price would scale in heavy production load.

About the sample Laravel app

Laravel

Mysql

Controller and Model Log . The simplest entity that I cloud think of.

. The simplest entity that I cloud think of. Api route, no auth.

You can get the code on Github. Look for the cloud-run tag on the repository as the project is kind of a sandbox and can move.

This is not a Laravel tutorial, generate a resource LogController , or just the index and store as I done. The idea is to store some logs and read them.

POST http://localhost:8080/api/log content='foobar' GET http://localhost:8080/api/log

Dockerfile

Cloud run needs a dockerfile and an application that run on 8080 port.

The gcloud has a ignore file with vendor and .env in it.

FROM composer:1.6.5 as build WORKDIR /app COPY site /app RUN composer install FROM php:7.2-apache 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 site/.env.prod /var/www/.env RUN chmod 777 -R /var/www/storage/ RUN echo "Listen 8080" >> /etc/apache2/ports.conf RUN chown -R www-data:www-data /var/www/ \ && a2enmod rewrite

Few comments on it

I put all the Laravel project in a site/ folder, I would’t do like this anymore, it’s just a sandbox project.

folder, I would’t do like this anymore, it’s just a sandbox project. .env.prod , maybe not the best practice but it’s a test.

, maybe not the best practice but it’s a test. Port 8080 is a Google Cloud Run requirement.

Build the image

Let’s build the image.

You might need to setup permission, you will be prompt with a link on the google dock to setup permission.

gcloud builds submit --tag gcr.io/nipsandbox/logs .

It will submit the build, and perform the following steps

Create a tarball of your sources

Upload them on the google servers

Build the docker image

Stock the image on a Google Registry

It should look like this

Deploy on Google Run

On the cloud registry, choose the google cloud run deployment like this (or any other way)

The deployment is fast.