こんにちは、かみむらです。Cloud Runは少し前から気になっていましたが、中々触る機会がありませんでした。ですが、最近Cloud Runをフロントエンドで使う事例を目にして、すぐに触ってみたくなりました。
Cloud RunとはDockerのコンテナをサーバレスな環境で実行出来るサービスで、Knativeがベースとなっています。
そして、DockerのコンテナイメージをGCPで管理できるサービスに、Container Registryがあります。これは非公開でイメージを管理できることや、Container Registry内でビルドやデプロイができること、イメージの脆弱性チェックなど、非常に強力な機能が提供されています。
今回はContainer Registryにコンテナイメージを登録して、Cloud Runにデプロイしていきます。
書いたコードはこちらです。
https://github.com/hiro08gh/cloudrun-startgithub.com
前提環境
GCPの課金設定が有効になっている
Google Cloud SDKがインストールされている
v 272.0.0
Dockerがインストールされている
version 18.09.2, build 6247962
Nodeアプリケーションのコンテナイメージを作成
これからContainer Registryに登録するための、小さなNodeアプリケーションを作っていきます。まずはpackage.jsonを作成します。
package.json
{ "name": "cloud-run", "version": "1.0.0", "main": "index.js", "author": "hiro08gh", "license": "MIT", "dependencies": { "express": "^4.17.1" }, "scripts": { "start": "node index.js" } }
そしてindex.jsを作って、下記のコードを書き込んでください。これはlocalhost:3000にアクセスした時に、ブラウザ上にHello Worldという表示する簡単なプログラムです。
index.js
const express = require('express') const app = express() const PORT = process.env.PORT || 3000; app.get('/', (req, res) => res.send('Hello World!')) app.listen(PORT, () => console.log('Start on port 3000!'))
次にDockerのコンテナイメージを作るためのDockerfileを作っていきます。こちらも記述量は多くありません。
FROM node:12.2.0-alpine WORKDIR /src COPY package.json /src/package.json COPY . . RUN yarn install --only=production CMD [ "yarn", "start" ]
Dockerfileを元にビルドして、コンテナイメージを作成してみましょう。-tフラグをつけることで、名前をつけることができます。
$ docker build . -t hello-image
イメージが作成されてるか確認してみましょう。
$ docker images
Container Registryにコンテナイメージを登録
イメージをpushするためには、gcloudでリクエストの認証ヘルパーを構成する必要があります。下記のコマンドを実行します。
$ gcloud auth configure-docker
Container Registryに登録するために、先ほど作成したコンテナイメージに新しく名前をつけていきます。[PROJECT=ID]には自分が管理しているGCPのプロジェクトIDを入れます。
$ docker tag hello-image gcr.io/[PROJECT-ID]/hello-image:latest
Docker イメージを Container Registryに登録します。 形式はgcr.io/[PROJECT-ID]/[CONTAINER-NAME]で指定します。
次のコマンドを実行します。
$ docker push gcr.io/[PROJECT-ID]/hello-image:latest
これで登録できました。GCPのダッシュボード上にある、Container Registryで確認します。hell-imageが登録されてることが分かります。
Cloud Runにデプロイ
準備が整ったので、コンテナイメージをCloud Runにデプロイしてみましょう。まずはgcloudでbetaをインストールします。
$ gcloud components install beta
そして、デプロイするためのコマンドを打ちます。
$ gcloud beta run deploy --image gcr.io/[PROJECT-ID]/hello-image
リージョン、サービス名などデプロイ時にいくつか質問されます。最後の未認証の呼び出しを許可はyで大丈夫です。
デプロイに成功後、発行されたURLにアクセスしてください。
これでCloud Runへデプロイするための一連の流れが終わりました。簡易的ではありましたが、第一歩を踏み出せました。次回はフロントエンド + Cloud Runな構成で記事を書きたいと思います。