# Google Cloud Platform

# Functions

# babel 関係のセットアップ

{
  "main": "dist/index.js",
  "scripts": {
    "build": "babel src --out-dir dist --ignore **/__tests__/**",
    "deploy": "yarn build && gcloud beta functions deploy helloGET --trigger-http",
    "deploy:local": "yarn build && functions deploy helloGET --trigger-http"
  }
}

# コマンド

# ファイル

// src/index.js
exports.helloGET = (req, res) => {
  res.send('Hello World!');
};

# デプロイ

# web
gcloud beta functions deploy helloGET --trigger-http
# local
functions deploy helloGET --trigger-http

# 説明

gcloud beta functions describe helloGET

# ローカルデプロイ関係

# node6 しか対応していない。yarn でエラーが出る場合はnpmでインストールするとよい
npm install -g @google-cloud/functions-emulator

# ローカルサーバの開始と終了
functions start
functions stop
functions kill (ハングした時)

# 一覧
functions list

# ファンクションの呼び出し
functions call helloGET --data='{"message":"Hello World"}'
functions call helloGET --file=/path/to/data.json

# ログ
functions logs read
functions status # ログファイルの場所を確認する

# デバッグツールの利用
# https://github.com/GoogleCloudPlatform/cloud-functions-emulator/wiki/Debugging-functions
functions inspect helloGET # chrome-devtools
functions logs read # chrome-devtools 用の URI をコピーしてブラウザで開く
functions reset helloWorld #デバッグモードを離脱
functions reset helloWorld --keep # デバッグモードを維持したまま再起動。URI は変わる。

# Cloud Run

デプロイ用スクリプト(カレントディレクトリにDockerfileがある前提)

#/bin/sh

image_name="my_image"
gcp_project_id='my-gcp-project-1234'
gcr_host='asia.gcr.io'

set -e

case $1 in
  'production'|'staging')
    tag=$1
    ;;
  *)
    echo '引数が不正です'
    exit 1
    ;;
esac

full_image_name="$image_name:$tag"
gcr_destination="$gcr_host/$gcp_project_id/$full_image_name"

docker build --target RUNNER -t "$full_image_name" .
docker tag "$full_image_name" "$gcr_destination"
docker push "$gcr_destination"