Cloud Run パフォーマンスチューニング編(Performance tuning)

①Dockerfileを最小構成で作成する ②cloudbuild.yamlの_DEPLOY_REGIONと_GCR_HOSTNAMEは合わせる

①は前回の記事でDockerfileについて扱っています。 ②ついてはcontainer registry 料金と検索すると出てきます。

Google Container Registryを使う場合にはlocationに注意

ここ見たらわかるようにドキュメント通り進めた日本の方の場合us to asiaになってる可能性が高いです。

最小のインスタンスを0としていたのでコールドスタートが原因なのかと思っていましたがリージョンと_GCR_HOSTNAMEを合わせたら初回ロードはかなり改善されました。

注意点として

1 - name: 'asia.gcr.io/google.com/cloudsdktool/cloud-sdk'

は存在しましたが

1- name: 'asia.gcr.io/cloud-builders/docker'

は存在しませんでした。 ビルド時に存在しませんエラーが出るのでわかると思います。

REGIONとはasia-northeast1(東京)とかのやつです。 GCRHOSTNAMEとはgcr.io(US), asia.gcr.io(日本)とかのやつです。 上記のZennの記事の方が詳しいので見たらすぐわかると思います。

cloudbuild.yaml

1steps:
2  # Build the container image
3  - name: 'gcr.io/cloud-builders/docker'
4    args:
5      [
6        'build',
7        '--build-arg',
8        '_Exmaple=$_Exmaple',
9        '--build-arg',
10        '_Exmaple=$_Exmaple',
11        '-t',
12        '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME',
13        '.',
14      ]
15  # Push the container image to Container Registry
16  - name: 'gcr.io/cloud-builders/docker'
17    args: ['push', '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME']
18  # Deploy container image to Cloud Run
19  - name: '$_GCR_HOSTNAME/google.com/cloudsdktool/cloud-sdk'
20    entrypoint: gcloud
21    args:
22      [
23        'run',
24        'deploy',
25        '$_SERVICE_NAME',
26        '--image',
27        '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME',
28        '--region',
29        '$_DEPLOY_REGION',
30        '--platform',
31        '$_PLATFORM',
32      ]
33images:
34  - '$_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME'

Cloud Runの新しいリビジョンの編集とデプロイ

メモリ&CPU = 低い方が低コストです リクエストタイムアウト=できるだけ低い方がいいです コンテナあたりの最大リクエスト数 = スペックで捌き切れるなら高い方がいいです 自動スケーリング, インスタンスの最小数 = 1以上でコールドスタートが減少します & 低い方が低コストです インスタンスの最大数 = この数字とコンテナ最大リクエスト数を乗算した数が同時に処理できるリクエストの数になります

カスタムしたスペック>=コンテナあたりの最大リクエスト数 とする必要があり、1リクエストあたりに必要とするスペックを知る必要があります。

私が置いた仮想マシン

256RAM 1CPU リクエストタイムアウト10second 最大コンテナ200 最小インスタンス0 最大インスタンス100

おわり

ビルドの所有時間はバラつきがありますが10分行きません(Dockerfileに依存で自分は6分くらい) 最小インスタンスだけは常時稼働で秒単位で常に課金されるため必ず気を付けてください。 個人的にgetStaticPropsで取得しているページが126mbを超えていたことに驚愕しました。 Reactのパフォーマンスチューニング全然できてないのかもしれないです。