大学祭のウェブサイトをGoogle App Engineから
Cloud Run
に切り替えた話
市川詩恩
Shion1305
1
root@world~:$ whoami
username: Shion1305
name: Shion Ichikawa
affiliation: 横浜国立大学大学院 環境情報学府 修士1年 (2024/4~)� 大学祭実行委員(昨年: 技術部局長) / Lumos� 情報安全確保支援士合格(登録セキスぺ申請中)
fields: SWE 80% / Security(Web) 10% / ML 5%
interns: 生成系AI開発インターン @ドリコム
SWE @ 松尾研究室 / R&D @ Poetics� ex: メルカリ / ユニクロ / Flatt Security / ちゅらデータ
2
本日の発表は
大学祭実行委員会
公式の発表ではありません
3
年2回大学祭を開催。�昨年の常盤祭の来場者数は約9500人。
横浜国立大学
大学祭について
4
技術部局
2023年1月に発足!
「年2回の大学祭のHPを作る!!」
+ 大学祭運営に必要なサービスの開発
22年からHP開発自体は行っていて、
現在運用している大学祭HPは4つ。
22清陵祭HP 22常盤祭HP
23清陵祭HP 23常盤祭HP
5
Google App Engineとは?
「アプリケーションをサーバーレスで提供できるサービス」
6
PaaS �(Platform as a Service)
23清陵祭まで...
7
seiryo22.
ynu-fes.yokohama
tokiwa22.
ynu-fes.yokohama
seiryo23.
ynu-fes.yokohama
23清陵祭まで...
8
seiryo22.
ynu-fes.yokohama
✖ SEO
毎回別ドメインとなるため、
それぞれがWebsiteとして認識される
⇒ Google検索に表示されるまで
時間がかかる
tokiwa22.
ynu-fes.yokohama
seiryo23.
ynu-fes.yokohama
✖ プロジェクトの乱立
23常盤祭では...
9
/23/tokiwa/*
ynu-fes.yokohama/23/tokiwa
/stg/23/tokiwa/*
それ以外
本番環境
開発用環境
robots.txt などサイト共通のファイル
23常盤祭では...
10
/23/tokiwa/*
ynu-fes.yokohama/23/tokiwa
/stg/23/tokiwa/*
それ以外
本番環境
開発用環境
robots.txt などサイト共通のファイル
複数インスタンスを建てた
ことで課金が発生。
クラウド料金が高額に...
Google Cloud Runとは?
「コンテナをサーバーレスで稼働できるサービス」
11
PaaS �(Platform as a Service)
IaaS �(Infrastructure as a Service)
と
の中間
Cloud Runに対する懸念
12
| Google Cloud Run | Google App Engine |
インスタンスの 管理方法 | 100ms単位で�起動状態が切り替わる | 15分リクエストがない時に�スケールダウン�(→ピーク時は稼働し続ける) |
デプロイ方法 | デプロイする際に�アプリケーションを�コンテナ化する必要がある | 実行環境は用意されるので�ソースコードのみあれば良い |
Cloud Runに対する懸念
13
| Google Cloud Run | Google App Engine |
インスタンスの 管理方法 | 100ms単位で�起動状態が切り替わる | 15分リクエストがない時に�スケールダウン�(→ピーク時は稼働し続ける) |
デプロイ方法 | デプロイする際に�アプリケーションを�コンテナ化する必要がある | 実行環境は用意されるので�ソースコードのみあれば良い |
引継ぎ
コスト大
Dockerの知識が必要。
手順が複雑だとミスに繋がる
レスポンス
時間の懸念
コールドスタートによる
影響が懸念
14
コンテナ化
アプリケーションを
そのままデプロイ
コンテナをデプロイ
様々な設定項目が存在。
コンソール画面上で�全て可視化されている
App Engine
Cloud Run
Cloud Run導入結果
レスポンス時間
コールドスタートによる影響はほぼなし。�初期レスポンス時間 < 150ms以内
コンテナ化による技術的ハードル(引継ぎコスト)
設定を全てGitHubのレポジトリ上で管理することで「見える化」し、�デプロイ作業を全てGitHub Actionsで完結させたことで�開発体験が大幅に向上した
15
コスト削減
サイトが増えても�デプロイ対象のコンテナは一つ。
Cloud Runの構成
16
/23/tokiwa/*
/23/seiryo/*
/24/seiryo/*
その他
23清陵祭HP
23常盤祭HP
24清陵祭HP
静的ファイルなど
本番環境
全体で�1つのコンテナ
Cloud Runの構成
17
/23/tokiwa/*
/23/seiryo/*
/24/seiryo/*
その他
23清陵祭HP
23常盤祭HP
24清陵祭HP
静的ファイルなど
本番環境
/23/tokiwa/*
/23/seiryo/*
/24/seiryo/*
その他
23清陵祭HP
23常盤祭HP
24清陵祭HP
静的ファイルなど
開発環境�(全体)
Cloud Runに移行して�1 プロジェクト内で�多数サービスを稼働でき、�になり、開発体験が向上。
Pull Requestごとのデプロイ
Cloud Run GitHub Actions
18
設定ファイルを全てGitHub上に。�PushするだけでコンテナのBuild & Deploy
Push
Build & Push
Container image
Update
Pull
Cloud Run GitHub Actions
19
変更を
Push
Cloud Runの設定は全てYAMLファイルに。�GitHub上で管理し自動反映。
自動反映
Cloud Run GitHub Actions (PR Review)
20
デプロイ完了次第、�ActionsがPRにリンクを自動投稿
それぞれのリソースを
Actionsから自動作成
Cloud Run GitHub Actions (PR Closed)
21
PRがMergeされたら
GitHub Actionsが�PR作成時に生成したリソースを全て消去
✖
✖
削除に失敗したらPRに通知
Cloud Run GitHub Actions
22
Main / Release
へのPushで更新
自動更新
開発環境�本番環境
Cloud Runへの移行結果
23
App Engineの�インスタンス料金
Cloud Runの�ネットワーク料金
Cloud Runの�インスタンス料金�0
まとめ
24
Cloud Run
(+ GitHub Action)
最高!!!
まとめ
25