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
2026-02-24 月末 Tech Lunch Online #10 Cloud Runのデ...
Search
SUZUKI Masashi
February 23, 2026
Technology
200
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2026-02-24 月末 Tech Lunch Online #10 Cloud Runのデプロイの課題から考えるアプリとインフラの境界線
SUZUKI Masashi
February 23, 2026
More Decks by SUZUKI Masashi
See All by SUZUKI Masashi
2026-07-28 3-shakeテックランチ Cloud Run のデプロイパラメータを考える / Cloud Run Deploy Parameter
masasuzu
0
74
2026-07-24 tfpolicyを試してみたのですが、、、、
masasuzu
0
88
2026-06-18 ecspressoのtfstate参照が便利すぎた話
masasuzu
1
410
2026-04-14 Jagu'e'r Cloud Native分科会 Terraform Stateにおけるシークレットの平文保存という課題とその解決
masasuzu
1
64
2026-03-27 #terminalnight 変数展開とコマンド展開でターミナル作業をスマートにする方法
masasuzu
0
460
2026-03-23 Ops-JAWS Meetup39 Session Managerを使った セキュアなサーバーアクセス
masasuzu
2
170
2026-03-11 JAWS-UG 茨城 #12 改めてALBを便利に使う
masasuzu
3
500
2026-03-03 Jagu'e'r Tech Writer Meetup #19 登壇のネタ作りについて
masasuzu
0
350
2025-11-21 社内エンジニア勉強会 改めて理解するVPC Endpoint
masasuzu
0
490
Other Decks in Technology
See All in Technology
信頼できるテスティングAIをどう育てるか?
odan611
0
180
[しろおび夏祭り2026] チャットするAIから、作業するAIへ - 使われ方の変化と、その裏側で起きていること
kk0n
0
700
AI駆動開発は個人技からチーム戦へ:組織でAIを使いこなすための実践設計
moongift
PRO
0
390
SnowflakeCoCoでデータエンジニアリング!
foursue
0
110
AIで楽になるはずが、なぜ疲れる?
kinopeee
0
150
「待ち時間」の消滅と「自我消耗」の加速:生成AI時代のエンジニアを救うメンタル・リソース管理
poropinai1966
0
400
AI エージェント時代のデジタルアイデンティティ
fujie
2
1.3k
なぜ、あなたのAPIは使われないのか? AX時代の設計原則、ガードレール、運用体制
yokawasa
1
1.2k
クラウドを使う側から、作る側へ / 大吉祥寺.pm 2026前夜祭
fujiwara3
8
2k
PLaMoを毎日の開発で使い育てていく
pfn
PRO
0
170
20260724 情シスAI #1 「全従業員をAIネイティブにする」ために情シスがやっていること(公開版)
frtckty
0
150
Amazon Bedrock Managed Knowledge BaseDive Deep
ren8k
0
320
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Everyday Curiosity
cassininazir
0
270
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
470
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
240
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
310
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
550
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Code Reviewing Like a Champion
maltzj
528
40k
A better future with KSS
kneath
240
18k
Transcript
Cloud Runのデプロイの課題から考える アプリとインフラの境界線 Copyright © 3-shake, Inc. All Rights Reserved.
2026-02-24 月末 Tech Lunch Online #10 すずきまさし
Copyright © 3-shake, Inc. All Rights Reserved. おまえだれよ 2 •
すずきまさし/masasuzu/@masasuz • 株式会社スリーシェイクSreake事業部シニアアーキテクト • クラウドインフラなんでも屋さんをしてます ◦ お客様の外部から ▪ 設計、運用、構築等の技術支援を行います。 ◦ お客様の内部から ▪ インフラチームの一員として内製化支援も行います。 • 得意領域 ◦ AWS ▪ AWS Community Builder Cloud Operation ▪ 2025 Japan All AWS Certifications Engineers ◦ Google Cloud ▪ Google Cloud Partner Top Engineer 2026 ◦ Terraform
• はじめに • Cloud Runデプロイの課題 • Cloud Runデプロイの課題解決 • まとめ
Copyright © 3-shake, Inc. All Rights Reserved. 目次 3
Copyright © 3-shake, Inc. All Rights Reserved. はじめに 01 4
• 開発チームにはアプリとインフラの2つのロールがある • アプリはアプリのデプロイに責任を持つ • インフラはクラウドリソースの構築、運用に責任を持つ • テストされたコンテナイメージを使用したいので、コンテナイメージデプロイを行う • Cloud
Run Serviceを対象とする • インフラはIaC(Terraform)化されている 今回はアプリとインフラで職掌が別れている前提で考えていきます。 Copyright © 3-shake, Inc. All Rights Reserved. いったんコンテキストを合わせたいです 5
• コンテナさえあれば、コマンド一発でwebアプリがデプロイできる • スケーリングも勝手にやってくれる • ただ動かすだけなら他のリソースの事前準備が不要 サクッと使うには考えることが少なくて便利 Copyright © 3-shake,
Inc. All Rights Reserved. Cloud Run (Service)便利ですよね 6
• Google Cloud サービスと連携するなら ◦ Service Accountの権限設定 • VPCとつなぐなら ◦
Direct VPC Egressの設定およびサブネット設定 ◦ Ingress/Egress設定 • シークレット情報を扱うならSecret Managerの設定 • etc このあたりインフラ側チームとの連携が必要となります Copyright © 3-shake, Inc. All Rights Reserved. でも、実運用を考えると 7
Cloud Run Serviceの設定にはアプリの設定もインフラの設定も両方含まれています。 そのため、誰がどうデプロイ管理するのかが課題になります。 次章で詳しく見ていきます。 Copyright © 3-shake, Inc. All
Rights Reserved. Cloud Runはアプリでもあり、インフラでもある 8
Copyright © 3-shake, Inc. All Rights Reserved. Cloud Run デプロイの課題
02 9
課題を考える前にCloud Runのデプロイ方法を見ていきます。 Cloud Runのデプロイ方法としては以下の3つあります。 • Terraform • gcloud run deploy
• gcloud run services replace (マニフェスト) いったんそれぞれを見ていきます。 Copyright © 3-shake, Inc. All Rights Reserved. Cloud Runのデプロイ方法 10
インフラがTerraformで管理されているの で、合わせてCloud RunもTerraformで管 理するのが自然です。 ただし、コンテナイメージや環境変数などア プリ側で管理したいパラメータも含まれて いるのがネック。 Copyright © 3-shake,
Inc. All Rights Reserved. Terraform 11 resource "google_cloud_run_v2_service" "main" { name = var.name location = var.location template { service_account = var.service_account containers { image = var.image env { name = "ENV" value = var.env } env { name = "DB_PASSWORD" value_source { secret_key_ref { secret = var.db_password_secret_id version = "latest" } } } } vpc_access{ network_interfaces { network = var.network subnetwork = var.subnetwork } } } }
gcloud コマンドのパラメータに設定を定義 していきます。 明示的に設定したパラメータ以外は既存の リビジョンの設定を引き継ぎます。 Copyright © 3-shake, Inc. All
Rights Reserved. gcloud run deploy 12 gcloud run deploy ${NAME} \ --region=${LOCATION} \ --image=${IMAGE} \ --service-account=${SERVICE_ACCOUNT} \ --set-env-vars=ENV=${ENV} \ --set-secrets=DB_PASSWORD=${DB_PASSWORD_SECRET_ID}:latest \ --network=${NETWORK} \ --subnet=${SUBNETWORK}
Knative Serving APIと互換性があるので マニフェストを利用してデプロイもできま す。 Copyright © 3-shake, Inc. All
Rights Reserved. gcloud run services replace (マニフェスト) 13 apiVersion: serving.knative.dev/v1 kind: Service metadata: name: ${NAME} namespace: ${PROJECT_NUMBER} labels: cloud.googleapis.com/location: ${LOCATION} annotations: run.googleapis.com/launch-stage: GA spec: template: spec: serviceAccountName: ${SERVICE_ACCOUNT} containers: - image: ${IMAGE} env: - name: ENV value: ${ENV} - name: DB_PASSWORD valueFrom: secretKeyRef: name: ${DB_PASSWORD_SECRET_ID} key: latest metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"${NETWORK}","subnetwork":"${SUBNETWORK}"}]' gcloud run services replace sample.yaml --region=${LOCATION}
Terraformでクラウドインフラの管理をしている前提として、gcloud run deployやgcloud run services replaceでアプリをデプロイする場合、Terraformで設定したものを外部か ら書き換えてしまいます。 このときTerraformを再度デプロイすると上書きます。それゆえ意図しないデグレードが 発生しうります。 e.g.
Direct VPC Egressの設定が消えたため、DB接続ができなくなった。 どうしたらいいのか。。。。 Copyright © 3-shake, Inc. All Rights Reserved. Terraformのドリフト(差分)課題 14
いずれの方法でも、Cloud Runの設定にアプリとインフラで責任を持つ範囲が含まれて しまう。 • デプロイの責任をインフラが持つと、 ◦ デプロイのたびにインフラに依頼することになりスピードが落ちる。 • デプロイの責任をアプリが持つと、 ◦
本来責任外のインフラ周りの設定を意図せず変更してしまうリスクがある。 どうしたらいいのか。。。。 余談ですが、このあたりECS Task Definitionにも同じ課題を感じます。 Copyright © 3-shake, Inc. All Rights Reserved. Cloud Runはアプリでもあり、インフラでもある 15
• アプリ ◦ コンテナイメージ ◦ 環境変数 ◦ スペック(CPU、 Memory、 インスタンス
数) うまく責任ごとに分担できないか? Copyright © 3-shake, Inc. All Rights Reserved. 設定項目の責任範囲 16 • インフラ側 ◦ ネットワーク ▪ VPC接続 ▪ Ingress/Egress制御 ◦ 認証 ◦ サービスアカウント ◦ 環境変数に注入する Secret Manager
Copyright © 3-shake, Inc. All Rights Reserved. Cloud Run デプロイの課題解決
03 17
• Cloud Runの箱とインフラ設定のみ Terraform側で管理する • アプリ側で設定する項目は ignore_changesを入れる ◦ env ◦
image ◦ client、client_version ▪ デプロイしたクライアントが設定される この設定を入れることで、アプリ側で設定した ものが差分になっていても、無視させるので Copyright © 3-shake, Inc. All Rights Reserved. ドリフトの解消 18 resource "google_cloud_run_v2_service" "main" { name = var.name location = var.location template { service_account = var.service_account containers { image = "nginx" # 仮イメージ、アプリから設定される } vpc_access { network_interfaces { network = var.network subnetwork = var.subnetwork } } } lifecycle { ignore_changes = [ template[0].containers[0].image, template[0].containers[0].env, client, client_version, ] } }
gcloud run deployを使って必要な部分だ けデプロイします。 指定されていないパラメータに関しては既 存の最新のリビジョンのものを引き継ぎま す。 Copyright © 3-shake,
Inc. All Rights Reserved. デプロイの設定 19 gcloud run deploy ${NAME} \ --image=${IMAGE} \ --set-env-vars=ENV=${ENV} \ --set-secrets=DB_PASSWORD=${DB_PASSWORD_SECRET_ID}:latest
環境変数が多数の場合、--set-env-varsが 長くなってしまいます。その場合、 --env-vars-fileを使用して、YAMLファイル で外部化することによって整理できます。 --set-secretsも同様の問題がありますが、 オプションを使ってファイルでの外部化が できないので、シェルで組み立てるワーク アラウンドする方法が考えられます。 Copyright ©
3-shake, Inc. All Rights Reserved. 環境変数tips 20 # 1. コメント行(#)と空行を除外し、 改行をカンマ (,)に変換して変数に格納 SECRETS_STR=$(grep -v '^\s*#' secret_mangager.txt | grep -v '^\s*$' | tr '\n' ',' | sed 's/,$//') # 2. 組み立てた文字列を --set-secrets に渡す gcloud run deploy my-app-service \ --image "${IMAGE}" --env-vars-file env.yaml \ --set-secrets="${SECRETS_STR}" \ --region asia-northeast1 # env.yaml --- ENV: "dev" PROJECT: "hogehoge_project" # secret_manager.txt # DB接続情報 DB_PASSWORD=my-db-secret:latest # 外部APIキー API_KEY=external-api-key:latest # サービスアカウントキー(ファイルマウントの例) /app/secrets/sa-key.json=my-sa-key:latest
インフラ • Terraformでインフラ設定を行う • ignore_changesでアプリ側の設定の 差分無視を行う ◦ env ◦ image等
Copyright © 3-shake, Inc. All Rights Reserved. 役割分担まとめ 21 アプリ • gcloud コマンドでアプリに必要な設定 のみ指定してデプロイを行う この方法により、インフラチームはリソースの安定性を確保しつつ、アプリチームはデ プロイのスピードと自律性を確保できます。
Copyright © 3-shake, Inc. All Rights Reserved. まとめ 04 22
Cloud Runのデプロイおけるインフラとアプリの責任分界について見てきました。 Cloud Run Serviceリソース自体はインフラでもありアプリでもあるため、一筋縄ではい きません。今回は責任分界に基づいたTerraformのignore_changesとgcloud run deployを組み合わせたソリューションを説明しました。 今回説明した方法が唯一解ではないです。 アプリが多数増えたときにすべてのアプリに対してインフラチームがインフラを個別対応
するのは現実的ではないので、アプリチームにインフラ責任を移譲する場合もあります。 そのときは別のアプローチが必要となります。 Copyright © 3-shake, Inc. All Rights Reserved. まとめ 23
• トラフィック移行 ◦ カナリアリリース • ソースデプロイ • ビルドなしのデプロイ • ベースイメージの自動更新
• CI/CDパイプライン • Platform Engineering • レポジトリわけ ◦ アプリとインフラはライフサイクルが違うのでレポジトリを分けたほうがいいです 時間が足りないのでブログ等で後日触れたいです。 Copyright © 3-shake, Inc. All Rights Reserved. 関連するが今回触れなかったトピック 24