いつか使ってみようと思っていたら数年経ちました。
サーバーレスコンピューティングとは
サーバーレスコンピューティングとは、開発者がサーバーを意識せずにユーザーにアプリケーションサービスなどを提供することができるサービスのことです。
サーバーレスというと「サーバーがないの?」と思われるかもしれませんが、そのようなことはもちろんなく、あくまで開発者がサーバーを直接イジる必要がないというものです。
主な例
主にFaaS(Function as a Service)と呼ばれる事前に登録した関数を実行するサービスを中心としたサービス群のことを言います。
FaaSの代表例として
- AmazonのAWS Lambda
- GoogleのCloud Functions
- MicrosoftのAzure Functions
などが挙げられます。
メリット・デメリット
メリット
- 比較的簡単
- 安価
- 有名ベンダーには大体月当たりの無料枠が設けられている
- Google Cloud Functionでは1ヶ月あたり200万回の呼び出し、400,000GB秒・200,000GHz秒のコンピューティング時間、5GBの送信データが無料枠となっている(記事執筆現在)1
デメリット
- 自由度が低い
- 設定ミスで膨大な請求もありうる2
実際に使ってみる
今回はGoogleのCloud Functionsを使ってみました。理由はなんとなくです。
作るもの
LINE Notifyと連携して天気通知アプリを作ってみようと思います。
天気情報は気象庁から持ってこようと思います。
気象庁は非公式でWeb APIを公開しているようで、様々な気象関連データがプログラムから取得できます。
「https://www.jma.go.jp/bosai/common/const/area.json」から都道府県のエリアコードを取得し、「https://www.jma.go.jp/bosai/forecast/data/forecast/{エリアコード}.json」から各地の天気や気温データが取得できます。
だいぶ省いてますが、アプリ全体のイメージはこんな感じです。
Google Cloudへの登録
- https://console.cloud.google.comにアクセスし、利用するGoogleアカウントを選択
- 本人確認
- 支払い情報(クレジットカード)登録
って感じだったと思います。
ファンクションの作成
https://console.cloud.google.com/functionsにアクセスし、ファンクション(関数)を作成します。
シークレットの作成
https://console.cloud.google.com/security/secret-managerにアクセスし、LINE Notifyのトークンを登録します。
Google Cloudにおけるシークレットとは、APIキーやパスワードなどの機密データのことです。
今回の場合は別にそこまでの機密ではないのですが、一応教科書通りにやりました。
シークレットを環境変数として登録
ファンクション作成時の設定として、上記で作成したシークレットを環境変数として扱えるようにします。
ソースコードの登録
これが今回作成するWebアプリの本体となります。
Cloud Functionsでは様々な実行環境が用意されており、記事執筆現在ではNode.js 18、Python 3.11、Go 1.20などが推奨環境とされています3。
トリガーの設定
トリガーとは、ファンクションを実行する条件のことです。
今回はURLにPOSTリクエストがあった時としています。
これも深い理由はないです。
スケジュールの設定
https://console.cloud.google.com/cloudscheduler/?hl=jaにアクセスしてファンクションの実行スケジュールを設定します。
Google Cloudではcron形式でスケジュールします4。
画像の設定では日本時間21:00に毎日実行されます。
設定した時刻になると
このようにLINEで天気情報が送られてきました。
成功です!
実はソースコードのエントリポイントからのreturnを忘れていてエラーログがあったのは内緒です。
注意点
上記したように膨大な数の処理や通信が発生してしまうと問答無用で大金を請求されます。
また、設定方法や機能もベンダーの都合で変更・追加・削除されていくので、利用する際は都度ドキュメントを参照しましょう。
まとめ
今回は天気予報を通知するアプリを作成しましたが、通知する内容は天気でなくてもなんでもいいし、通知アプリではなくて株自動売買アプリとか、チャットボットとかもできそうですね。
ぜひ活用してみてください。
- https://cloud.google.com/functions/pricing?hl=ja#free_tier ↩︎
- https://www.itmedia.co.jp/news/articles/2209/09/news014.html ↩︎
- https://cloud.google.com/functions/docs/concepts/execution-environment?hl=ja ↩︎
- https://cloud.google.com/scheduler/docs/configuring/cron-job-schedules?hl=ja#defining_the_job_schedule ↩︎
コメント