Google Cloud Platform - xyz600/knowledge GitHub Wiki

Functions

サーバーを建てなくても、常時リクエストに答えてくれる環境を作るための便利なもの。

立ち上げる簡単なサンプル

プロジェクトの削除方法

インスタンスをプロジェクト間で移動する方法

gcloud のコマンドあれこれ

デフォルトのプロジェクト設定

gcloud config set project ${project-id}

function の deploy

gcloud functions deploy ${function_name} --runtime python37 --trigger-http --allow-unauthenticated

API で instance を起動・停止する

API 利用

  • POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/zone/instances/example-instance/stop
  • POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/zone/instances/example-instance/start

を使って、

  • myproject
  • zone
  • example-instance

に相当する部分を書き換えればいい

python library

def restartInstance(auth_http, gce_service):
  request = gce_service.instances().start(project="myproject", zone="zone", instance="example-instance")
  response = request.execute(auth_http)

      print response

認証周りの情報について

firebase による line bot の作成

基本的には、導入記事を見れば ok

注意点

  • gcp functions だけど、express を使う例が多い
  • 料金形態を Spark から Blaze にしないと、外部リクエストを裁けない
  • firebase depoly --only functions,hosting で deploy する時の hosting URL はホストであって endpoint ではない
    • ${hosting URL}/webhook みたいなのを line に書かないとダメ
    • 404 not found になるのと ngrok でサーバーを建てると、 /webhook でなく / にアクセスが来るので気づいた
  • gcp functions のログは、標準入出力が普通に表示されるので、printf debug が普通にできることがわかった
  • gcp functions ってサーバーレスなのに、なんで express 何だろうなぁと思うなど
    • 少し考えたけど、 endpoint を発行する手間が省けていいって話なんだろうか

express を使う意味

  • functions って直感的には状態を持たない関数なのに、何で express みたいなものを挟む必要ある?
    • line-bot-api の middleware を挟めるから
    • 60秒間次のアクセスがあるか否かを待って、アクセスがある間は同一のプロセスを動かして待ってくれているから
      • なので、グローバル変素に cache を用意しておくことは意味があるらしい

line-bot-sdk の役割

  • line-developers に書いてある json 仕様に従って、post をやってくれること
  • json の仕様を見て自分で書いたほうが楽だと思えば、自分で書いても良いかもしれない

関数を複数ファイルに分割する

firebase の DB をいじりたい

  • 適当な登録用の endpoint を立てて、自分でフロントエンドを書いて post すればよさそう

XmlHttpRequest で、status code が正常なのになぜか 0 が帰ってくる問題