【5%還元】Amazonキャッシュレスキャンペーン

【node.js】Cloud FunctionsをローカルのDocker環境で実行して開発する方法

web
【node.js】Cloud FunctionsをローカルのDocker環境で実行して開発する方法

「Cloud Functions をローカルで開発したい」

この記事はそんな方に向けて書いています。

どうもー。GCP 大好きガッチ(@gatchsite)です。

最近はほぼ毎日、Google Cloud Platform を触って開発をしています。

ちょっとしたツールであれば、「Cloud Functions」や「Cloud Run」を選択する人は多いのではないでしょうか。

ただ、毎回 GCP にデプロイしてテストするのもめんどくさいし、時間がかかってしまいます。

ということで、今回は開発フローを意識した Cloud Functions をローカルで実行させる環境設定を紹介します。

記事の内容はこちら

Cloud functions をローカル環境で使う

Cloud Functionsには、Google が提供してくれているフレームワークがあります。

そのフレームワークを使うことで、ローカルでも Cloud Functions を実行することができます。

ローカルにフレームワークをインストール

$ npm install @google-cloud/functions-framework

公式 GitHub: functions-framework-nodejs

フレームワークを設定する

package.jsonの scripts に以下を追加します。

{
  "scripts": {
    "start": "functions-framework --target=[実行する関数名]"
  }
}

フレームワークをスタート

$ npm start

Cloud functions をテストしてみる

ブラウザからhttp://localhost:8080/へアクセスしても良いですし、curlでコマンドラインからアクセスするでも良いです。

$ curl http://localhost:8080/

ローカル環境を使った環境を考える

せっかくローカル環境で開発を行うのであれば、もう少し実践的な構成を検討してみたいと思います。

考えることは2つです。

「ローカルの開発環境そのもの」と「開発フロー」です。

想定しているローカルの開発環境

Docker で仮想環境を作成し、そこで開発を行います。開発時の条件はこんなところを意識しています。

  1. Docker 環境で動作させ、ホスト側の環境を汚さない。
  2. ホスト側のテキストエディタで開発する。
  3. ブラウザからアクセスし確認できる。
  4. ソースコードは Git で管理する。

※コンポーネント図で作成したかったんですが、mermaid.js では作成できなかったのでフローチャートで。

sequenceDiagram
ホスト側ブラウザ ->> ローカルホスト: 通信
ローカルホスト ->> Docker環境: バインド
Docker環境 -->> CloudFunctions: 実行
CloudFunctions ->> Docker環境: 応答
Docker環境 ->> ローカルホスト: 応答
ローカルホスト -->> ホスト側ブラウザ: 応答

開発フローを考える

開発する前にフローを考えておくことはとても重要です。

Colud Functions はブラウザ内でコードを書いてデプロイすることも可能です。一人でちょっとした機能を作成する場合は問題ないかもしれません。

ただ、作成したほとんどの機能は機能を追加したり修正したりしたくなります。開発する前に少し先の運用を考えた設計をしておくことで、後々とても楽になります。

sequenceDiagram
SourceRepositories ->> ローカル: pull
ローカル ->> ローカル:  開発
ローカル ->> Docker: 実行
Docker ->> ローカル: 応答
ローカル ->> ローカル: コミット
ローカル ->> SourceRepositories:push
SourceRepositories ->> CloudBuild:実行
CloudBuild ->> CloudFunctions:デプロイ

※Docker は CloudFunctionsFramework を含んでいます。

デレクトリ構成

こんな感じの構成で開発しています。

repos/
|-- docker/
|    |-- node.Dockerfile
|-- src/
|    |-- index.js  // CloufFunctionsで実行するファイル
|    |-- package.json
|-- cloudbuild.yml
|-- docker-compose.yml

docker-compose の設定と CloudBuid の設定

docker を使う場合、docker-compose がおすすめです。

docker-compose の設定

version: '3'

services:
  node:
    build:
      context: .
      dockerfile: ./docker/node.Dockerfile
    ports:
      - 3000:3000
    tty: true
    working_dir: /src
    volumes:
      - ./src:/src
      - /src/node_modules
    environment:
      ENVIRONMENT: development
      PORT: 3000
      BIND_HOST: 0.0.0.0

CloudBuid の設定

steps:
  - name: 'gcr.io/cloud-builders/gcloud'
    args:
      - functions
      - deploy
      - [関数名]
      - --source=src

まとめ

Cloud Functions をローカルの Docker 環境で実行する方法やローカル開発時に考えることなどをまとめました。

コンポーネント図が使えず詳しく説明できていない部分も多々ありますが、、、

docker + Cloud Functions の設定を1度できてしまえば、2つ目3つ目はとても簡単に作成できるようになります。

ぜひ、試してもらいたいと思います。

ではでは、ガッチ(@gatchsite)でした。

Amazon キャッシュレス5%還元

関連の記事を読んでみる