Cloud Run functions × TypeScript 開発をしよう！【料金：Cloud Run functions 関連サービスの無料枠を把握しよう】

# はじめに
この記事では以下のことについて説明しています。
- 本カレンダーにて解説したサービスのコスト体系
- コストアラートの設定方法

---

GCPに限らずクラウドインフラを使う上で必ずついてくるのが「使用料金」。何も考えずにリソースを作成しまくったり無駄なリクエストを送りまくっているといつの間にか無料枠をはみ出して、想定外の出費が発生してしまいます。従量課金制（使えば使うほど料金がかかる）なので、気をつけていないと大変なことになってしまいます。ば各リソースを使用する前に必ず無料枠で抑まる範囲を確認しておきましょう。

本記事では本カレンダーで使用したGCPのサービスの料金体系と無料枠を確認しておきましょう。また、想定外のコストが発生した際にアラートを発生させる方法も紹介します。

# 本カレンダーで使用したサービスの料金体系
使用したサービスは以下のものです。
- Cloud Run functions
- Cloud Run
- Artifact Registry
- Cloud Storage
- Secret Manager
- Cloud Endpoints
- Clous Scheduler


### Cloud Run functions
個人開発の範疇であれば、無料で使えると言ってもいいと思います。

#### 呼び出し回数での課金
|呼び出し回数 / 月|料金 / 100万回コール|
|---|---|
|最初の 200 万回|無料|
|200 万回を超えた分|$0.40|

#### コンピューティング時間
コンピューティング時間とは、関数がリクエストを受け取ってからリクエスト完了（エラー、成功問わず）までにかかる時間のことを指します。メモリとCPUの両方に対して料金がかかります。

メモリは GB 秒という単位で計算しており、1 GB秒 = 1 GB のメモリが 1 秒間プロビジョニングされていることを示します。
CPU は GHz 秒という単位で計算しており、1 GHz秒 = 1 GHz の CPU が1 秒間プロビジョニングされていることを示します。1 vCPU = 2.4 GHzです。

公式の課金表は秒単位で課金額が書かれてあるものの少額過ぎる、CPUの課金額はvCPU単位で表記されていたりと何かとわかりづらいです。なので「1日稼働させ続けた時の料金表」を実際の設定値の単位で出してみます。

||24時間単位の課金額表|
|---|---|
| メモリ 1 GB あたり(※1)|$0.22| $0.30 |
| CPU 1 GHz あたり(非アイドル)| $0.864 | $1.21 |
| CPU 1 GHz あたり(アイドル) | $0.09 | $0.13 |

円単位で書き換えておきましょう $1 = 150円で計算します。

|              | 24時間単位の課金額表  |
|---------------------------------|----------|
| メモリ 1 GB あたり(※1)          | 約33円       | 約45円       |
| CPU 1 GHz あたり (非アイドル)   | 約130円     | 約182円      |
| CPU 1 GHz あたり (アイドル)     | 約14円      | 約20円       |

#### データ送信
||料金|
|--|--|
|外部サービスにデータ送信|$0.12|
|同じリージョン内の Google API へのデータ送信|無料|
|受信|無料|


#### 無料枠
メモリとCPUにはそれぞれ無料枠が割り当てられています。これもわかりやすい数字に変えておきます。

||無料枠（※2）|
|---|---|
|メモリ 1 GB あたり|4日と15時間くらい|
|CPU 1GHz あたり|2日と7時間半くらい|
|データ転送量|5GB|

※1. アイドル時も同じ料金です
※2. 無料枠は Tier 1 料金設定で計算されます

https://cloud.google.com/functions/pricing?hl=ja

### Artifact Registry
Cloud Run functions をデプロイする際に裏でコンテナイメージが生成され、それが Artifact Registry に送られます。その Artifact Registry の利用料金が Cloud Run functions ではかかってきます。

|使用法|料金（1GB/月）|
|--|--|
|〜0.5 GB|無料|
|0.5 GB 超|$0.10|

各関数のコンテナは、その関数を削除するまで Artifact Registry に保存されるため、毎月わずかな料金が発生しています。Cloud Run functions の利用料金が安いからと言って大量に関数を作りすぎると、このサービスの使用料がバカにならない料金になってくるので注意してください。
とはいえ大体は無料枠に収まる範囲で利用できます。


### Cloud Run
常に割り当てる場合とリクエスト時にのみCPUを割り当てる場合で料金が大きく変わります。基本節約のためにRequest-based の課金にしましょう。Request-based であれば小規模のプロジェクトであれば無料の枠内で収まり切ると思います。

#### CPUを常に割り当てる場合
||24時間単位の課金額表|
|---|---|
| メモリ 1 GB あたり|$0.17|
| CPU 1 GHz あたり|$0.65|
|リクエスト|無料|

#### CPUを常に割り当てる場合（無料枠）

||無料枠（月）|
|---|---|
|メモリ 1 GB あたり|5日と5時間くらい|
|CPU 1 GHz あたり|2日と18時間くらい|
|リクエスト|無料|

#### リクエスト時にCPUを割り当てる場合
||24時間単位の課金額表|
|---|---|
| メモリ 1 GB あたり|$0.22|
| CPU 1 GHz あたり|$0.86|
|リクエスト|$0.40 / 100 万リクエスト(認証通過時のみ課金)|

#### リクエスト時にCPUを割り当てる場合（無料枠）

||無料枠（月）|
|---|---|
|メモリ 1 GB あたり|4日と4時間くらい|
|CPU 1GHz あたり|2日と2時間くらい|
|リクエスト|200 万リクエストまで無料|


### Cloud Storage
#### 月あたりの無料枠
`asia-northeast1`（東京）リージョンの場合で考えます。ストレージは`us-west1`, `us-central1`, `us-east1`のみが無料枠の対象になるので対象外です。

- ClassA: オブジェクト作成、リスト取得など(比較的重い操作) 
- ClassB: オブジェクトのメタデータ取得など(軽い操作)

| 項目                       | 無料枠 /月                       |
|---------------------------|--------------------------------|
| ~~ストレージ (Standard)~~ | ~~5 GB~~| 対象リージョン: `us-west1`, `us-central1`, `us-east1` |
| Class A オペレーション | 5,000 回   |オブジェクト作成、リスト取得など(比較的重い操作)    |
| Class B オペレーション | 50,000 回        | オブジェクトのメタデータ取得など(軽い操作)         |
| ネットワーク送信 | 1 GB | インターネット向けデータ転送が対象    |

では `asia-northeast1` の Cloud Storage の1GBあたりの月間使用料金は以下のようになります。

#### `asia-northeast1` にストレージを置いた時の課金額
|ロケーション |Standard|Nearline|Coldline|Archive|
|--|--|--|--|--|
|asia-northeast1|$0.023|$0.016|$0.006|$0.0025|
||約3.45円|約2.40円|約0.90円|約0.38円|

Cloud Run functions のソースは "Standard" に配置されますが、ファイルの大きさを200MB程度に収めるとほとんど無料枠内で収めることができます。できるだけ少ない容量で配置するためにビルド時は minify しておきたいですね。

### Secret Manager
無料枠は「バージョン数」が6つです。シークレットそのものの数は問われていません。
ローテーションは使わないのでよくわかりません。

#### 月額課金額
|課金対象のアイテム|月額|
|--|--|
|アクティブ シークレット バージョン|$0.06 / 1 バージョン|
|アクセス オペレーション|$0.03 / 10,000 アクセス|
|ローテーションの通知|$0.05 / 1 ローテーション|
|破棄されたシークレット バージョン|無料|
|管理オペレーション|無料|

#### 月の無料枠

|リソース	|無料枠|
|--|--|
|有効なシークレットバージョン数|6 バージョン|
|アクセス オペレーション|10,000 オペレーション|
|ローテーションの通知|3 ローテーション|


#### 注意
シークレットバージョンは**無効だと課金対象になっています。使わない場合は必ず破棄しましょう。**

### Cloud Endpoints
もう（個人開発の範疇なら）ほぼ無料です。ガンガン使いましょう。

|API 呼び出し回数 / 月|API 呼び出し回数 100 万回あたりの費用|
|--|--|
|0〜200 万回|無料|
|200 万回～10 億回|$3.00|
|10 億回超|$1.50|

### Cloud Scheduler
毎月3つのジョブに無料枠が付与されます。4つ目以降のジョブに対しては以下のコストがかかります。
||料金|
|--|--|
|1ジョブ|$0.10/月|

### おまけ（Cloud Build）
公式曰く、大量にビルドしなければ大丈夫そうです。手抜きます。
> 15 個の関数すべてを 1 日 8 回を超えてデプロイしない限り Cloud Build の無料枠に収まります。

https://cloud.google.com/functions/pricing?hl=ja#deployment_costs

# 費用アラートを設定する
「予算とアラート」のサービスで設定しましょう。

![スクリーンショット 2024-12-24 13.20.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374872/7b50dad4-2e6b-7b5f-7b8d-e95026d16dae.png)

公式がめっちゃ詳しく説明してくださっているのでそれを見てください（丸投げ）。

https://cloud.google.com/billing/docs/how-to/budgets?hl=ja


# 終わりに
今回は Cloud Run functions 関連のサービスのコストの把握を行いました。サービスを利用する前に料金を確認するのが一番大事までありますね。そういう意味で言うと Cloud SQL は使用初っ端で思いっきり 5000 円くらい課金されるのでなかなか使いづらいところがあります。