Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
自分のブログをCloudFront+HerokuからCloud Runに移行した
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Takashi Masuda
September 30, 2022
Technology
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
自分のブログをCloudFront+HerokuからCloud Runに移行した
2022-09-30 フィードフォース社内技術勉強会のプレゼン資料です。
https://developer.feedforce.jp/entry/2022/09/30/180000
Takashi Masuda
September 30, 2022
More Decks by Takashi Masuda
See All by Takashi Masuda
マスタカネットの紹介 〜悠久なる変更履歴〜
masutaka
0
13
最近の情報収集方法 2025
masutaka
0
86
BigQuery経由で使うGoogleスプレッドシートのスキーマ管理
masutaka
0
370
本を聴く毎日を送っています
masutaka
0
100
ボッチLookML開発者兼データ整備人を連れてきたよ!
masutaka
0
150
ここがつらいよ普段使いのLinux
masutaka
0
380
4月から取り組んできたLookerの導入から実装までのお話
masutaka
0
190
HerokuでSidekiqを監視する方法を確立した
masutaka
0
660
デプロイで止まらないバッチ処理を求めて
masutaka
1
170
Other Decks in Technology
See All in Technology
クラウドを使う側から、作る側へ / 大吉祥寺.pm 2026前夜祭
fujiwara3
8
1.8k
最新IoT事例11選に学ぶ!現場の成功パターンと実践のコツ【SORACOM Discovery 2026】
soracom
PRO
0
120
PLaMoを毎日の開発で使い育てていく
pfn
PRO
0
140
QAタスクをスキル化したいときに考えること
aomoriringo
0
130
データと地図で読む 大井町の「かわるもの、かわらないもの」
yoshiyama_hana
0
740
GMOフィナンシャルゲートが挑む、「止まらない」決済インフラ構築の裏側【SORACOM Discovery 2026】
soracom
PRO
0
110
AI エージェント時代のデジタルアイデンティティ
fujie
1
1.2k
AIエージェントに財布を渡す日 ― 承認付き"買い物エージェント"を作って実演
yama3133
0
110
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
53k
AIエージェントの知識表現と推論に なぜグラフが使われるのか - 記号的AIの復権とニューラルAIとの統合
yohei1126
1
220
WEBフロントエンド研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
1
760
reFACToring
moznion
1
970
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Skip the Path - Find Your Career Trail
mkilby
1
170
Being A Developer After 40
akosma
91
590k
A designer walks into a library…
pauljervisheath
211
24k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
230
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4k
New Earth Scene 8
popppiees
3
2.4k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
200
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
420
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
Transcript
引っ越ししたら家賃が 3分の1になった🦆 2022-09-30 FFTT#494 @masutaka
自己紹介 • 増田貴士(@masutaka) • 株式会社フィードフォース App Unity所属 • 自称Lookerエバンジェリスト •
来月10/28はベヨネッタ3の発売日👓 • 来年2/24はオクトパストラベラーⅡの発売日🚅 https://www.feedforce.jp/
今までの部屋
今までの部屋 インターネット AWS Route53 AWS CloudFront Heroku
CloudFront + Heroku • https://masutaka.net/ • Herokuで動作するnginxコンテナが実体で、Hugoで生成 した静的コンテンツを配信 • 表側にCloudFront(CDN)を配置し、全世界に高速配信
• ドメインとDNSはRoute53で管理 • 外形監視はHerokuのNew Relic Add-on • 月の家賃はHerokuの7USDと、Route53の0.5USDくらい
課題感
課題感 • 2019年1月にHerokuに引っ越してから、実に動作が安定 している。料金も安い • 課題がないことが課題()だった ◦ とは言え、4月のインシデントは少しだけ後押しになった ◦ https://blog.heroku.com/april-2022-incident-review
https://masutaka.net/history/
引っ越しのモチベーション
引っ越しのモチベーション • 以前Herokuに引っ越したのは、前のプロジェクトEC Boosterで採用されていたHerokuを、徹底的に学ぶため だった • 今関わっているLookerはGoogleのサービスなので、今は GCPに興味がある • むしろGoogle様に身も心も捧げたい///
もっと簡単な方法があるのでは?
もっと簡単な方法があるのでは? • 仰るとおり • ほぼ静的コンテンツの配信だけなので、コンテナなど使 わずにGitHub Pages等でも良い ◦ リダイレクトをそれなりに設定しているので、工夫は必要だけど •
とは言え、個人の趣味だからこそ少しだけ無駄でオー バーなことを続けたい
GCPのどのサービスを使う?
どこで実行すべきか。Google Cloud のコンピューティング オプションの選択 | Google Cloud Blog
左から順に • GCE: AWSだとEC2に相当。でも今さらサーバーの管理はやりたくな い • GKE: AWSだとEKSに相当。Kubernetesはさすがにオーバースペック • Cloud
Run: どちら様ですか...? • GAE: AWSだとElastic Beanstalkに近い?以前気になって試したこと あり。大本命 • Cloud Functions: AWSだとLamdaに相当。しかし今回は軽量すぎる
内見1: GAE
• Google App Engine • 2009年に正式リリース • サーバーレスなWebアプリケーションプラットフォーム • 特定言語(PHP,
Python, Node.js, Java, Go, C#)のアプリケーション を動かせるスタンダード環境と、Dockerコンテナを動かせるフレキ シブル環境がある • 今回はnginxコンテナを動かしたかったので、フレキシブル環境で試 した GAEとは https://cloud.google.com/appengine/
導入のためにやったこと env: flex runtime: custom service: default instance_class: B1 manual_scaling:
instances: 1 resources: cpu: 1 memory_gb: 0.6 includes: - secret.yaml app.yamlを作ってgcloud CLIでデプロイす るだけ。 $ gcloud -q app deploy app.yaml --stop-previous-version Dockerfileはそのまま使えた。Herokuと同 様、$PORTのListenが求められるだけ。
参考: 使っているDockerfile FROM klakegg/hugo:0.101.0-onbuild AS hugo ARG HUGO_ENV_ARG=production FROM nginx:1.23.1-alpine
COPY --from=hugo /target /usr/share/nginx/html COPY nginx/nginx.conf /etc/nginx/ COPY nginx/default.conf /etc/nginx/conf.d/ STOPSIGNAL SIGQUIT # hadolint ignore=DL3025 CMD sed -i -e "s/{{PORT}}/$PORT/" /etc/nginx/conf.d/default.conf && \ nginx -g "daemon off;"
問題点 https://cloud.google.com/appengine/pricing • 料金が高い。最低インスタンスタイプであるB1またはF1 の1台稼働だと、月6,000円以上かかりそう ◦ $0.065/h x 24h
x 30d ≒ $46.8/mo ≒ ¥6,692 ($1 = ¥143) ◦ フレキシブル環境には無料枠はない ◦ B1はマニュアルスケーリング、F1はオートスケーリングの最低インスタンスタイプ。どちら もCPU 600MHz, メモリ256MB • デプロイが遅い。6分から8分かかる。厳しい。Herokuは 2分半くらいだった
内見2: Cloud Run + Cloud CDN
Cloud Runとは https://cloud.google.com/run • 2019年11月に正式リリース • サーバーレスなコンテナ型Webアプリケーションプラッ トフォーム •
Knativeのマネージドサービスで、Dockerコンテナを動 かすことが出来る ◦ Knativeとは「Kubernetesでイベント駆動型プログラミングを実現しやすくするソフトウェ ア」とのこと。へぇ
この部屋のイメージ インターネット AWS Route53 GCP Cloud CDN GCP Cloud Run
Cloud Run導入のためにやったこと Cloud Runのコンソールからポチポチ手 動でGitHub連携しただけ。 HugoのためにはCloud Buildのコンソー ルからコピーしたcloudbuild.yamlに右記 変更が必要だった。 今回もDockerfileをそのまま使えた。
Herokuと同様、$PORTのListenが求め られるだけ。 diff --git a/cloudbuild.yaml b/cloudbuild.yaml index 2245dd6..7c3c0cc 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -1,4 +1,10 @@ steps: + - name: gcr.io/cloud-builders/git + args: + - submodule + - update + - '--init' + id: "git submodule update" - name: gcr.io/cloud-builders/docker args: - build @@ -8,6 +14,8 @@ steps: - . - '-f' - Dockerfile + - "--build-arg" + - "HUGO_ENV_ARG=production" id: Build - name: gcr.io/cloud-builders/docker args:
GAEと比較して良くなったこと • デプロイが速くなった。1分半から2分強で完了する。 Herokuと同じくらい ◦ Cloud Buildでビルドされ、Container Registryにpushされる
Cloud CDNも導入する • Cloud Runだけでは何となく心もとないから ◦ GAEとCloud Functionsの間の子というイメージがある • HerokuでもDyno1台で心もとなかったので使っていた
• 今まで使っていたAWS CloudFrontは無料枠内だった。 GCPもそんなものだろう
Cloud CDN導入のために必要な手順 1. 外部IPアドレス(固定IPアドレス)を予約する🤔❓ 2. SSL証明書リソースを作成する🤔🤔❓❓ 3. ロードバランサを作成する🤔🤔🤔❓❓❓ a. この時、バックエンドサービスに対して「Cloud
CDNを有効にする」を選択する 4. ドメインをロードバランサに接続する https://cloud.google.com/cdn/docs/setting-up-cdn-with-serverless
Cloud CDN難しすぎる...😭 • どうやらCloud CDNはロードバランサありきのサービス らしい • AWSではDistributionを1つ作るだけで良かった。固定IP アドレスも要らなかった ◦
これを知っているからこそ、今回の調査で一番ハマった
問題点 • やはり料金が高い。Cloud RunのvCPUを1つ常時稼働だと、 ロードバランサと合わせて実測で月1万円程度(!)かかりそ うだった ◦ Cloud Run: ¥215
x 30d ≒ ¥6,450 ◦ ロードバランサ: ¥83 x 30d ≒ ¥2,490 ◦ 正直言って料金表は複雑で、実測しないと分からなかった ◦ 無料枠は実測で600円くらいのようだ • 「引っ越ししたら家賃が10倍以上になったかも/(^o^)\」と いうタイトルでもネタにはなったが... https://cloud.google.com/run/pricing
ここであることに気づく
ここであることに気づく • 「リクエストの処理中にのみCPUを割り当てる」でも遅くないよう な?1秒より全然速いし、遅さを感じない • 少なくとも今回のコンテナであれば、Cloud Runのコールドスタート 時間は無視できるのかも • テスト環境だとリクエストが自分しかいないので、料金がほぼゼロ
さらに気づく • 1分間隔の外見監視を設定しても、料金がほぼ増えない。 日に5円くらい? • もしかして「リクエストの処理中にのみCPUを割り当て る」を選択することが重要なのかも?
もっと気づく • 以上はインスタンス数がmax: 1, min: 0の話 • 試しにmax: 4, min:
0にしたが料金は変わらなかった ◦ Cloud Runでは最低でもmaxを4にすることを奨励している • いつか起きるかもしれないアクセス増に耐えるために、 maxを16とか32にしても料金的な問題はないのかも
内見3: Cloud Run
これを試してみた • Cloud Runをインターネットに露出させる インターネット AWS Route53 GCP Cloud Run
現在の設定 • コンテナ数: max 4, min 0 • リクエストの処理中にのみCPUを割り当てる •
各コンテナに割り当てるvCPUの数: 1 • 各コンテナに割り当てるメモリ: 512MiB • 各コンテナの最大リクエスト数: 80
カスタムドメインも設定した • Cloud Runコンソール上でカスタムドメインを設定可能 ◦ 2022年9月現在、プレビュー機能 ◦ ルートドメインとサブドメインのいずれも設定可能 ◦ 今回はmasutaka.netのルートドメインを設定した
• TLS証明書も自動的に作られ、HTTP/2を利用可能になる
Google Domainsにも移行した インターネット Google Domains GCP Cloud Run
めっちゃ良いかも • 料金が安い ◦ リクエストの処理中にのみCPUを割り当てれば、外形監視で起こし続けても安い ◦ おまけに月に¥600程度のクレジットが付きそう ◦ ¥32 x
30日 - ¥600 = ¥360 • デプロイも速い ◦ 1分半から2分強で完了する。Herokuと同じくらい • 今回の使い方だとGAEの上位互換 https://cloud.google.com/run/pricing
引っ越しの変化点整理
引っ越しによる変化 インターネット AWS Route53 AWS CloudFront Heroku インターネット Google Domains
GCP Cloud Run 引越し前 引越し後
引っ越しによる変化の詳細 引越し前 引越し後 ドメイン AWS Route53 Google Domains DNS AWS
Route53 Google Domains CDN AWS CloudFront なし ※2 DDoS防御 AWS Shield ※1 なし ※2 バックエンド Heroku Container GCP Cloud Run ロギング Heroku Add-on Papertrail + AWS Athena GCP Cloud Logging Metrics Heroku Metrics GCP Cloud Monitoring 外形監視 Heroku Add-on New Relic GCP Cloud Monitoring ※1 デフォルトで有効化されている ※2 Cloud Runはロードバランサーを有効化すれば Cloud CDNやCloud Armorを使える
料金の変化 引越し前 引越し後(予測) ドメイン $11/年 ¥1,540/年 DNS $0.5/月 ¥0/月 CDN
$0/月 - DDoS防御 ¥0/月 - バックエンド $7/月 ※¥360/月 ロギング $0.7/月 ¥0/月 Metrics $0/月 ¥0/月 外形監視 $0/月 ¥0/月 ※ ¥32/日 x 30日 - クレジット¥600
まとめ
まとめ • CloudFront + HerokuからGCPに引っ越したら、家賃が3 分の1くらいになった🤗 ◦ 従量課金なので抜き差しならない状況()ではある。もちろん予算アラートは設定してるよ • 全部Googleになった😍
◦ 一太郎+Lotus1-2-3モデルから、MS-Word+Excelモデルになった気分😅 • 無駄にオーバースペックになった👍
学び • Cloud Runはお手軽にコンテナをポコポコ作れる ◦ 軽量なWebアプリケーションに良いみたい。プレビュー版でCloud Runジョブもあるよ • Dockerfileを変更せずにHerokuから移行できたのは良い 体験だった
• GCPはAWSよりCDNの最低料金が高い ◦ ¥3,000/月くらいはかかる • Google Domainsはエンジニアでない方にも良さそう • GCPに外形監視があったのか
今後の予定
今後の予定 • GCPのコード管理 • サービスアカウントの権限最小化 • デプロイ通知(Pushover) • AWSのLambdaもCloud Functionsに引っ越してみよう
続きは来週水曜日のインフラ共有会で
おわり
おまけ: 試行錯誤の痕跡 Cloud Run (常時CPU割当) GAE ロードバランサ 本番稼働 Cloud Run
(リクエスト処理時のみCPU割当)