Open5

[Scrap] Dart で GCP Cloud Functions を書いてみる

背景

作ろうとしているアプリの要件的にバックエンドを Dart で書くのが一番良さそうだったので、GCP Cloud Functions (以下 CFs) を Dart で書くことに入門する。

知りたいところ

  • 開発手順
    • 開発方法
    • CFs の追加、編集手順
    • デプロイ方法
  • GCP CFs でどこまでできるのか
    • Callable 以外にも定期実行処理などを実装できるのか

やること

以下の動画に沿って入門して、足りないところがあれば追加で調査する。

https://youtu.be/y6Z1V8QpGFc

作業ログ

実際にやったことを書いていきます。

作業ログ

動画で紹介されていないものには * をつけてます。

  • gcloud の SDK をインストールした
  • 任意の ディレクトリを作成して dartfn コマンドでボイラープレート作成
  • *Firebase からプロジェクトを作成した
  • *GCP で Billing Account を追加してクレカを登録した
  • *BillingAccount の予算アラートを有効にした
  • *上記で作成したプロジェクトに BillingAccount を紐付けた
    • *CloudFunctions のセクションに "ACTIVATE BILLING" ボタンが表示されてます
  • gcloud auth login した後 deploy した
  • barcode_image package を追加
  • QR コード画像を作成する処理を書いた
    • クエリパラメータを使えるようにしたり
    • エラーのステータスコードを返したり

dartfn 0.4.4

GCP 製で、Dart で GCP の開発用のボイラープレートを生成できるコマンドラインツール。Makefile, Dockerfile を用意してくれてるのが好印象だった。
make run で CFs が localhost で立ち上がって動作確認できるのが最高。

https://pub.dev/packages/dartfn

CFs の開発方法

CFs の見た目

CloudFunction アノテーションの引数として、デプロイしたい CFs の名前を指定します。

(target: 'hello-world')
Response helloWorld(Request request) {
  // queryParameter を取り出すこともできる。
  final params = request.url.queryParameters;
  // Response を返却する必要がある。
  return Response.ok('Hello, world!');
}

CFs を追加する時の手順

  1. 関数を一つだけ含むファイルを作成する
    もっと良いいやり方があるかもしれないです。
()
Response function(Request request) {
  // 何らかの処理
  return Response.ok('Sucess');
}
  1. ローカルテスト用にコード生成
    新規で CFs を追加した場合は、ローカルテスト用の server.dart を更新する必要があるので、コード生成を走らせます。
$ dart run build_runner build         
  1. ローカルでの動作確認
    Makefile が用意されているので、以下のコマンドを実行します。
$ make run FUNCTION_TARGET=function-name
  1. gcloud でデプロイ
    デプロイする際は gcloud コマンドでデプロイします。(以下は一例なので適宜変更してください)
$  gcloud run deploy dartcloudfn --allow-unauthenticated --source=. 
ログインするとコメントできます