📰

Cloud Runのリリースノート総ざらい(2023/4~2023/8)

2023/09/07に公開

育休明けで Cloud Run のリリースに追いつけていなかった吉崎です。こんにちは。

本記事では 2023 年 4 月~ 2023 年 8 月の Cloud Run のリリースを総ざらいします。
なお、この期間のリリースの種類別数は下表の通りです。

FEATURE CHANGED ANNOUNCEMENT BREAKING
17 3 1 1

以下では、個人的に注目するリリースを紹介した後、月別リリースを紹介していきます。

注目のリリース

サイドカーコンテナがデプロイ可能に(Preview)

最も注目を集めるリリースは、サイドカーコンテナがデプロイできるようになったことでしょう。これまでインスタンス:コンテナ=1:1 の対応でしたが、このリリースを以てマルチコンテナ構成(1:n)を取れるようになりました。本リリースについては弊社の間瀬の記事に詳しいので、こちらをご覧ください。
https://zenn.dev/cloud_ace/articles/036f6056a620fe

サーバーレス VPC アクセスコネクタなしに VPC へトラフィックを送る機能(Preview)

サーバーレス VPC アクセスコネクタなしに VPC へトラフィックを送る機能については、Direct VPC Egress と呼ばれています。主な特徴は、これまで Cloud Run は VPC へアクセスする際にサーバーレス VPC アクセスコネクタが必要でしたが、これが不要になった点です。大阪リージョンではサポートされていないなど、リージョンや関連機能に制限がありますので公式ドキュメントを参照の上利用しましょう。本機能については弊社の妹尾の記事に詳しいので併せてご覧ください。
https://zenn.dev/cloud_ace/articles/cloudrun-direct-vpc-egress-preview

セッションアフィニティが利用可能に(GA)

セッションアフィニティは、同じクライアントからのリクエストを同じインスタンスに転送する機能のことです。この機能により Cloud Run 上でステートフルなアプリケーションが実行可能になりました。ステートフルな既存のアプリケーションを Cloud Run に移行したい場合に有用な機能です。ただし、Cloud Run はオートスケールしますので、この機能はあくまでベストエフォートとなります。その他注意事項も併せて公式ドキュメントをご覧ください。
https://cloud.google.com/run/docs/configuring/session-affinity?hl=ja#key_behaviors_to_be_aware_of

IAP with Cloud Run(GA)

IAP with Cloud Run は、Cloud Run を Google アカウント認証により保護できる機能です。これまで Preview でしたが、このたび GA となりました。GAE のようにサービスそのものに IAP を設定することは出来ません。Cloud Run で利用する場合、外部もしくは内部 HTTPS ロードバランサが必要となる点が注意です。詳細は公式ドキュメントをご覧ください。
https://cloud.google.com/iap/docs/enabling-cloud-run?hl=ja

月別リリース

2023 年 7 月・8 月

  • europe-west10(ベルリン)リージョンが利用可能に(GA)
  • サーバーレス VPC アクセスコネクタなしに VPC へトラフィックを送る機能(Preview)
  • ジョブ実行中にジョブの設定を上書き可能に(Preview)
  • 内部もしくは内部およびロードバランサにアクセスが制限されたサービスへのアクセス時に 404 ではなく 403 を返すように(GA)
  • ジョブのタイムアウトに 1 時間以上が設定できるように(Preview)

ジョブについては、作成後に設定を変更できるようになったこと、1 時間を超えるタイムアウトを設定できるようになったことの二点です。1 時間を超えるジョブでは、メンテナンスの発生によりタスク移行が行われ、処理が一時的に停止することに注意が必要です。

地味に嬉しい変更として、内部もしくは内部およびロードバランサにアクセスが制限されたサービスへのアクセス時に404ではなく403を返すようになったことがあります。404 は Not Found、403 は Forbidden ですので、認可の拒否というニュアンスが強調された形です。

2023 年 5 月・6 月

  • サーバーレス VPC アクセスコネクタをコンソールから作成可能に(Preview)
  • 32GiB メモリおよび 8CPU の割当(GA)
  • インメモリボリュームが利用できるように(Preview)
  • 統合(Preview)機能が asia-east1, europe-west4, us-east1, and us-west1 のリージョンで利用可能に(Preview)
  • 統合機能によって Firebase Hosting による公開と CDN の利用が出来るように(Preview)
  • デフォルトの TCP スタートアッププローブを含むヘルスチェックの失敗がログに出るように(GA)
  • Recommender による CPU 割当の推奨が自動で行われるように(Preview)

インメモリボリュームについて、これまでインメモリファイルシステムというものがありましたが、これは使用するメモリの上限を設定できませんでした。対してインメモリボリュームは、使用するメモリの上限を設定できます。上限を設定しておくと、上限を超えた場合にエラーが発生します。そしてこのエラーを捕捉すればアプリケーションでメモリ不足に対処できます。対して、上限を設定していなければインスタンスがクラッシュしてしまいますので、メモリの管理がしやすくなったと言えます。ただし、どちらもインメモリであることには変わりありませんので、インスタンスが停止するとそのデータが削除されることには注意が必要です。また、上述のサイドカー構成を取った場合、共有ボリュームも使用可能です。メモリサイズの上限を指定している場合はその上限の半分、指定していない場合は使用可能なメモリ合計の半分が共有ボリュームのメモリサイズとなります。

統合機能はこれ自体がプレビューですが、本リリースでは Firebase Hosting による Cloud Run アプリケーションの公開が統合機能によって実現できるようになりました。実際にこの統合機能をコンソール上から触ってみると分かりますが、数回クリックする程度で公開できます。デフォルトでは .web.app ドメインのサブドメインを使用する形でドメインを指定できますが、カスタムドメインの使用も可能です。また Firebase Hosting によるホストすることで CDN も利用できます。これにより Cloud Run の負荷低減も出来ます。

Recommender による推奨は GCE のものとは少し異なるので注意が必要です。より経済的な CPU 数を推奨するのではなく、安くなると判断された場合にCPU の常時割り当てを推奨します。「CPU の常時割り当ての方が割高になるのでは?」と思うかもしれませんが、常時割り当ての方が経済的である場合があります。詳細は公式ドキュメントに記載されていますが、用途においてどちらが経済的かは料金計算ツールを用いて試算することをおすすめします。

2023 年 4 月

  • Ubuntu 22 LTS イメージを用いたソースコードからのデプロイができるように(GA)
  • europe-west1(ベルギー)リージョンで統合機能が利用可能に(Preview)
  • 接続している共有 VPC からのアクセスを受け付けられるように(Preview)
  • Startup CPU boost(GA)
  • Node.js によるソースコードデプロイ時に自動で npm run build が実行されるように(GA)
  • 新しいリビジョンのデプロイ時、十分なインスタンスが起動するように(GA)
  • リージョン外部・内部ロードバランサがバックエンドサービスとして Cloud Run をサポート(GA)

Startup CPU boost はコールドスタートと呼ばれる問題を改善する機能です。インスタンス起動時に一時的に CPU 割り当てを増加させることで起動完了までの時間を短縮します。この機能については私が紹介や検証をしている記事がありますので、興味があればご覧ください。
https://zenn.dev/cloud_ace/articles/bd95501cb0cd3f

また、個人的に気になっているのが新しいリビジョンのデプロイ時に十分なインスタンスが起動するようになったリリースです。恐らくこれまでは新しいリビジョンのインスタンス数は、受信するリクエストの数に応じて徐々に増加していったものと思われます。「十分な」のロジックは不明ですが、これからは旧リビジョンで受信していたリクエストを処理できる程度にインスタンスがあらかじめ確保されるようになったものと思います。なるべく高負荷時のリリースは避けたいものですが、それでもリリースをする必要がある場合に有用な機能でしょう。

Discussion