facebook twitter hatena line email

「Gcp/Firebase/CloudFunctions/基本」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(外部ライブラリインストール)
(errorlogをメールアラート設定)
(同じ利用者による、間の4版が非表示)
行103: 行103:
 
===errorlogをメールアラート設定===
 
===errorlogをメールアラート設定===
 
新しく起こったerrorlogをメールするには
 
新しく起こったerrorlogをメールするには
stackdriverのサイトhttps://console.cloud.google.com/errors へ行って、
+
stackdriverのサイト https://console.cloud.google.com/errors へ行って、
 
設定から新しいエラーが起こったときに通知するように設定する。
 
設定から新しいエラーが起こったときに通知するように設定する。
  
行149: 行149:
 
  Your client does not have permission to get URL /dummyendpoint from this server.
 
  Your client does not have permission to get URL /dummyendpoint from this server.
 
ステータスコード403となる
 
ステータスコード403となる
 
==外部ライブラリインストール==
 
例としてmomentライブラリを入れる
 
 
cd functions
 
npm install moment
 
 
functions/package.json にmomentが追加されてることを確認
 
  "dependencies": {
 
    "firebase-admin": "^8.0.0",
 
    "firebase-functions": "^3.1.0",
 
    "moment": "^2.24.0"
 
  },
 
 
index.js
 
<pre>
 
const moment = require("moment");
 
console.log("format=" + moment().format()); // format=2019-08-24T09:19:10+00:00
 
console.log("YYYY-MM-DD=" + moment().format("YYYY-MM-DD"));          // YYYY-MM-DD=2019-08-24
 
console.log("YYYY-MM-DD HH=" + moment().format("YYYY-MM-DD HH:mm:ssZ")); // YYYY-MM-DD HH=2019-08-24 09:19:10+00:00
 
console.log("unix format=" + moment().unix()); // unix format=1566638922
 
</pre>
 

2019年9月17日 (火) 15:08時点における版

CloudFunctionsとは

  • サーバーレスアーキテクチャ。関数処理をしてくれるもの。awsのLambdaと同じ。
  • nodeで動く

CloudFunction準備

nvmインストール

Javascript/nodejs/インストール/nvm [ショートカット]

firebaseログイン

$ npm install -g firebase-tools
$ firebase --version
6.10.0
$ firebase login

ブラウザが開くので、firebaseコンソールに繋がるgoogleアカウントでログインする。

firebaseログアウト

$ firebase logout

functionsを新規作成

$ firebase init functions
? What language would you like to use to write Cloud Functions? JavaScript
? Do you want to use ESLint to catch probable bugs and enforce style? No
✔  Wrote functions/package.json
✔  Wrote functions/index.js
✔  Wrote functions/.gitignore
? Do you want to install dependencies with npm now? Yes
  1. プロジェクトを選択
  2. JavaScriptとTypeScriptを選択、とりあえずJavaScriptを選択
  3. ESLintはデフォルトoffだったので、offで作成
  4. npmの依存パッケージはデフォルトyesだったので、yesで作成

スクリプト修正

functions/index.js

exports.helloWorld = functions.https.onRequest((request, response) => {
 response.send("Hello from Firebase!");
});

コメントを外す

deploy

$ firebase deploy --only functions
ttps://us-central1-unity-xxxxx.cloudfunctions.net/helloWorld

メソッドをコメントアウトしたままだと公開用urlは出てこない

現在のデフォルトプロジェクト確認

$ firebase list
│ Name                       │ Project ID / Instance      │ Permissions │
│ unitysample (current)      │ unitysample-31353          │ Owner       │
│ unity-fabric-project       │ unity-android-demo         │ Owner       │

現在のデフォルトプロジェクト変更

$ firebase use [project id]

プロジェクト指定

$ firebase deploy --only functions --project hogeproject-12341

Error: Error parsing triggers: Cannot find module 'firebase-functions'エラーが出る場合

cd functions
npm install

特定functionのみ

firebase deploy --only functions:addMessage

httpアクセス

Hello from Firebase!

最初のアクセスだけgoogle認証が必要?2回目からは別のブラウザからでも認証画面が出てこなかった。


東京リージョン指定

const functions = require('firebase-functions');
exports.helloWorld = functions.region('asia-northeast1').https.onRequest((request, response) => {
    response.send("Hello from Firebase! asia-northeast1");
});

既に別の場所にdeployしてる場合は、その場所のfunctionsは削除され、東京に新たに作られる。

hostingから連携してた場合は、us-central1以外へアクセスすると"Your client does not have permission to get URL /helloWorld from this server."エラーとなる。

log

console.log('I am a log entry!');
  • console.log() INFO ログレベル
  • console.error() ERROR ログレベル
  • 内部システム DEBUG ログレベル

以下のような感じで表示される

時刻arrow_downward	レベル	関数	イベント メッセージ
1:57:06.117 午前 info	helloWorld I am aa log entry!
1:56:20.007 午前 warning	helloWorld2 error2

\nで改行にできる。ただし、文字列が多い場合のみ

logに表示されるのは丁度5000文字まででした。5000文字以上は特にエラーなくカットされてた。

errorlog

以下記述よってグラフ反映に違いがある。

console.error(new Error('message')); // エラーグラフに反映される
console.error('message'); // エラーグラフに反映されない。がjavaエラーのStackLogなフォーマットな感じだと記録されるっぽい。

Stackdriver Error Reporting にエラーを送信したい場合も。

参考:https://cloud.google.com/functions/docs/monitoring/error-reporting?hl=ja

errorlogをメールアラート設定

新しく起こったerrorlogをメールするには stackdriverのサイト https://console.cloud.google.com/errors へ行って、 設定から新しいエラーが起こったときに通知するように設定する。

既存エラーでピークが発生した際は設定がないので自力でやる?

log割り当て制限

https://cloud.google.com/logging/quota-policy

ログエントリのサイズ	100 KB*
entries.write リクエストのサイズ	5 MB*
entries.write API 呼び出しの数	1 プロジェクトあたり 1,000 回/秒
entries.list API 呼び出しの数	1 プロジェクトあたり 1 回/秒
ログエントリの保持期間	30 日(プレミアム階層)
7 日(基本階層)
ユーザー定義のログベースの指標	1 プロジェクトあたり 500 件
API からのページトークンの有効期間	24 時間

Spark無料枠

呼び出し125K/month
GB 秒 40K/month
CPU 秒 40K/month
アウトバウンド ネットワーキング Google services only

https://firebase.google.com/pricing/?hl=ja

Blaze 従量プラン

呼び出し $0.40/百万
GB 秒 $0.0025/千
CPU 秒 $0.01/千
アウトバウンド ネットワーキング $0.12/GB

Billing account not configured. External network is not accessible and quotas are severely limited. Configure billing account to remove these restrictionsが出る場合

請求先アカウントを登録する

一定数のリクエストを超えると

speakプランで、呼び出し125K/monthを超えた後でもstatus_code:200が返ってきた。 70回/分を超えると以下のようになったが・・。

status_code=429
message=Too Many Requests

存在しないエンドポイントにアクセスすると

Error: Forbidden
Your client does not have permission to get URL /dummyendpoint from this server.

ステータスコード403となる