Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cloud Deploy と仲良くなりたい

Cloud Deploy と仲良くなりたい

Tomonori Hayashi

March 17, 2024
Tweet

More Decks by Tomonori Hayashi

Other Decks in Technology

Transcript

  1. Tomonori Hayashi • NTT コミュニケーションズ イノベーションセンター所属 ◦ ノーコード時系列分析ツール「 Node-AI」の開発/運用 ◦

    アプリケーションエンジニア ▪ Front:TypeScript - React/Next.js ▪ Infra:Google Cloud • Jagu’e’r ◦ 人材育成分科会 ◦ O11y - SRE 分科会 • Google Cloud Partner Top Engineer 2024 • Google Cloud All Certifications • Favorite Word ◦ class SRE implements DevOps @pHaya72 2
  2. Node-AI の紹介 • ノーコードで AI モデルを作成できる WEB アプリケーション • カードを直感的につなげるだけで

    時系列データの前処理から AI モデルの学習・評価までの パイプラインを作成・実行 できる • 技術スタック ◦ TypeScript + React / Next ◦ Python + Django ◦ C# + ASP.NET Core ◦ Kubernetes ◦ Google Cloud ◦ Scikit-learn / Tensorflow / Pytorch 3
  3. (隙間時間で)こんなことに挑戦しています Cloud Run を中心に アーキテクチャを構築 IAP ・URL マスク・ストレージマウントなど 痒いところに手が届く感じが良き! 構築中のテレメトリ収集/可視化基盤

    Cloud Operations との連携 でテレメトリを集約 Grafana から Cloud Monitoring や Cloud Logging に手を伸ばしてテレメトリ を取得 & Otel 経由でも取得 5
  4. (隙間時間で)こんなことに挑戦しています Cloud Run を中心に アーキテクチャを構築 IAP ・URL マスク・ストレージマウントなど 痒いところに手が届く感じが良き! 構築中のテレメトリ収集/可視化基盤

    Cloud Operations との連携 でテレメトリを集約 Grafana から Cloud Monitoring や Cloud Logging に手を伸ばしてテレメトリ を取得 & Otel 経由でも取得 6 CI/CD はどこぞ?
  5. 構築中ってのもありゴリゴリ手動 ビルド デプロイ $ docker build -t asia-northeast1-docker.pkg.dev/hoge/grafana/dev . $

    docker push asia-northeast1-docker.pkg.dev/hoge/grafana/dev 構築中 & 個人での開発なら あまり問題にならない 8
  6. 構築中ってのもありゴリゴリ手動 ビルド デプロイ $ docker build -t asia-northeast1-docker.pkg.dev/hoge/grafana/dev . $

    docker push asia-northeast1-docker.pkg.dev/hoge/grafana/dev 構築中 & 個人での開発なら あまり問題にならない 今後開発も運用もスケールさせたい 9
  7. 構築中ってのもありゴリゴリ手動 ビルド/テスト デプロイ $ docker build -t asia-northeast1-docker.pkg.dev/hoge/grafana/dev . $

    docker push asia-northeast1-docker.pkg.dev/hoge/grafana/dev 構築中 & 個人での開発なら あまり問題にならない 今後開発も運用もスケールさせたい 登壇機会もらったし 検討してみよう 10
  8. ばくっとした全体像 Dev - Cloud Run Target Env Stg - Cloud

    Run Prod - Cloud Run Cloud Deploy dev/stg/prod manifest.yaml skaffold .yaml Cloud Build Artifact Registry Create Release Promote to Stg Promote to Prod Release Contents 16 Cloud Storage
  9. ばくっとした全体像 Dev - Cloud Run Target Env Stg - Cloud

    Run Prod - Cloud Run Cloud Deploy dev/stg/prod manifest.yaml skaffold .yaml Cloud Build Artifact Registry Create Release Promote to Stg Promote to Prod Release Contents 17 Cloud Run Service の切り分けとして プロジェクト毎もしくはサービス毎 にしておく Cloud Storage
  10. ばくっとした全体像 Dev - Cloud Run Target Env Stg - Cloud

    Run Prod - Cloud Run Cloud Deploy Cloud Build Artifact Registry どの環境に何を デプロイするのか Create Release Promote to Stg Promote to Prod dev/stg/prod manifest.yaml skaffold .yaml Release Contents 18 Cloud Run Service の切り分けとして プロジェクト毎もしくはサービス毎 にしておく Cloud Storage
  11. ばくっとした全体像 Dev - Cloud Run Target Env Stg - Cloud

    Run Prod - Cloud Run Cloud Deploy Create Release Promote to Stg Promote to Prod Cloud Build Artifact Registry Release ver.X $ skaffold deploy dev/stg/prod manifest.yaml skaffold .yaml Dev の manifest.yaml に 基づきデプロイ どの環境に何を デプロイするのか Release Contents 19 Cloud Run Service の切り分けとして プロジェクト毎もしくはサービス毎 にしておく Cloud Storage
  12. ばくっとした全体像 Dev - Cloud Run Target Env Stg - Cloud

    Run Prod - Cloud Run Cloud Deploy Create Release Promote to Stg Promote to Prod Cloud Build Artifact Registry Release ver.X $ skaffold deploy dev/stg/prod manifest.yaml skaffold .yaml Dev の manifest.yaml に 基づきデプロイ どの環境に何を デプロイするのか Release Contents 20 Cloud Run Service の切り分けとして プロジェクト毎もしくはサービス毎 にしておく Cloud Storage
  13. ばくっとした全体像 Dev - Cloud Run Target Env Stg - Cloud

    Run Prod - Cloud Run Cloud Deploy Create Release Promote to Stg Promote to Prod Cloud Build Artifact Registry Release ver.X $ skaffold deploy dev/stg/prod manifest.yaml skaffold .yaml Dev の manifest.yaml に 基づきデプロイ Dev で OK だったら Stg にプロモート どの環境に何を デプロイするのか Release Contents 21 Cloud Run Service の切り分けとして プロジェクト毎もしくはサービス毎 にしておく Cloud Storage
  14. ばくっとした全体像 Dev - Cloud Run Target Env Stg - Cloud

    Run Prod - Cloud Run Cloud Deploy Create Release Promote to Stg Promote to Prod Cloud Build Artifact Registry Release ver.X $ skaffold deploy dev/stg/prod manifest.yaml skaffold .yaml Dev の manifest.yaml に 基づきデプロイ Dev で OK だったら Stg にプロモート Release ver.X $ skaffold deploy Stg の manifest.yaml に 基づきデプロイ どの環境に何を デプロイするのか Release Contents 22 Cloud Run Service の切り分けとして プロジェクト毎もしくはサービス毎 にしておく Cloud Storage
  15. ばくっとした全体像 Dev - Cloud Run Target Env Stg - Cloud

    Run Prod - Cloud Run Cloud Deploy Create Release Promote to Stg Promote to Prod Cloud Build Artifact Registry Release ver.X $ skaffold deploy dev/stg/prod manifest.yaml skaffold .yaml Dev の manifest.yaml に 基づきデプロイ Dev で OK だったら Stg にプロモート Release ver.X $ skaffold deploy Stg の manifest.yaml に 基づきデプロイ どの環境に何を デプロイするのか Release Contents 23 Cloud Run Service の切り分けとして プロジェクト毎もしくはサービス毎 にしておく Cloud Storage
  16. ばくっとした全体像 Dev - Cloud Run Target Env Stg - Cloud

    Run Prod - Cloud Run Cloud Deploy Create Release Promote to Stg Promote to Prod Cloud Build Artifact Registry Release ver.X $ skaffold deploy dev/stg/prod manifest.yaml skaffold .yaml Dev の manifest.yaml に 基づきデプロイ Dev で OK だったら Stg にプロモート Release ver.X $ skaffold deploy Stg の manifest.yaml に 基づきデプロイ Release ver.X $ skaffold deploy Stg で OK だったら Prod にプロモート Prod の manifest.yaml に 基づきデプロイ どの環境に何を デプロイするのか Release Contents 24 Cloud Run Service の切り分けとして プロジェクト毎もしくはサービス毎 にしておく Cloud Storage
  17. ばくっとした全体像 Dev - Cloud Run Target Env Stg - Cloud

    Run Prod - Cloud Run Cloud Deploy Create Release Promote to Stg Promote to Prod Cloud Build Artifact Registry Release ver.X $ skaffold deploy dev/stg/prod manifest.yaml skaffold .yaml Release ver.X $ skaffold deploy Release ver.X $ skaffold deploy Yaml や Terraform で 事前に定義 Release Contents 25 Delivery Pipeline Cloud Storage
  18. ばくっとした全体像 Dev - Cloud Run Target Env Stg - Cloud

    Run Prod - Cloud Run Cloud Deploy Create Release Promote to Stg Promote to Prod Cloud Build Artifact Registry Release ver.X $ skaffold deploy dev/stg/prod manifest.yaml skaffold .yaml Release ver.X $ skaffold deploy Release ver.X $ skaffold deploy Yaml や Terraform で 事前に定義 Release Contents 26 Delivery Pipeline Cloud Deploy 何をどこの環境にどの順番で(どのように) デプロイするかをあらかじめ設計した デリバリーパイプラインで管理・自動化してくれる
  19. 便利な機能 - カナリアリリース - *** - Cloud Run Cloud Deploy

    Cloud Build Artifact Registry Release ver.Y $ skaffold deploy 27 Promote to ** ver.Y 50% ver.X 50% DeliveryPipeline に strategy 項目を追加する Delivery Pipeline Cloud Storage
  20. 便利な機能 - カナリアリリース - *** - Cloud Run Cloud Deploy

    Cloud Build Artifact Registry Release ver.Y $ skaffold deploy 28 Promote to ** ver.Y 100% DeliveryPipeline に strategy 項目を追加する Delivery Pipeline Cloud Storage Stable な状態に移行させることで ver.Y を 100% にロールアウト トラフィック分割した後の新 Ver のロールアウトか 旧 Ver へのロールバックかの作業が容易
  21. 便利な機能 - デプロイ後の検証 - Dev - Cloud Run Cloud Deploy

    Cloud Build Artifact Registry Release ver.X $ skaffold deploy dev/stg/prod manifest.yaml skaffold .yaml 29 Verify 項目を追加する Create Release or Promote to **
  22. 便利な機能 - デプロイ後の検証 - Dev - Cloud Run Cloud Deploy

    Create Release or Promote to ** Cloud Build Artifact Registry Release ver.X $ skaffold deploy dev/stg/prod manifest.yaml skaffold .yaml 30 Verify 項目を追加する デプロイ完了後に Verify 項目で 設定したコマンドを実行 $ wget http://*** コマンドが失敗したら ロールアウトも失敗する
  23. 便利な機能 - デプロイ後の検証 - Dev - Cloud Run Cloud Deploy

    Create Release or Promote to ** Cloud Build Artifact Registry Release ver.X $ skaffold deploy dev/stg/prod manifest.yaml skaffold .yaml 32 Verify 項目を追加する デプロイ完了後に Verify 項目で 設定したコマンドを実行 $ wget http://*** コマンドが失敗したら ロールアウトも失敗する Cloud Deploy デプロイ戦略やデプロイ後の検証も デリバリーパイプラインに組み込める
  24. Github Actions との連携は意外と簡単 33 Workload Identity での連携 OAuth トークンで Docker

    に対して認証 (※) https://github.com/google-github-actions/example-workflows/blob/main/workflows/create-cloud-deploy-release/cloud-deploy-to-cloud-run.yml
  25. Github Actions との連携は意外と簡単 34 Workload Identity での連携 OAuth トークンで Docker

    に対して認証 (※) https://github.com/google-github-actions/example-workflows/blob/main/workflows/create-cloud-deploy-release/cloud-deploy-to-cloud-run.yml create-cloud-deploy-release という Action を使うことで適切なパラメーターを渡すだけ
  26. Github Actions との連携は意外と簡単 35 Workload Identity での連携 OAuth トークンで Docker

    に対して認証 (※) https://github.com/google-github-actions/example-workflows/blob/main/workflows/create-cloud-deploy-release/cloud-deploy-to-cloud-run.yml create-cloud-deploy-release という Action を使うことで適切なパラメーターを渡すだけ よし!これでいい感じの CI/CD 実装ができそうだ・・・
  27. Github Actions との連携は意外と簡単 36 Workload Identity での連携 OAuth トークンで Docker

    に対して認証 (※) https://github.com/google-github-actions/example-workflows/blob/main/workflows/create-cloud-deploy-release/cloud-deploy-to-cloud-run.yml create-cloud-deploy-release という Action を使うことで適切なパラメーターを渡すだけ よし!これでいい感じの CI/CD 実装ができそうだ・・・ と思ったけど、Cloud Deploy の良さを活かせるか??
  28. 要件とアプローチを整理 37 現状(最低限実装できればいいこと) 検討内容 今のところ 1 プロジェクトに Dev/Prod が 異なる

    Cloud Run Service・デプロイ頻度は低い チームの多くは アプリケーションエンジニア
  29. 要件とアプローチを整理 38 現状(最低限実装できればいいこと) 検討内容 今のところ 1 プロジェクトに Dev/Prod が 異なる

    Cloud Run Service・デプロイ頻度は低い チームの多くは アプリケーションエンジニア 現状に対してはちょっとリッチすぎるかも Cloud Deploy のキャッチアップも必要
  30. 要件とアプローチを整理 39 現状(最低限実装できればいいこと) 決定内容 gcloud コマンドで Cloud Run Service にデプロイ

    Cloud Deploy を使いたくなったら置 き換えるだけ 今のところ 1 プロジェクトに Dev/Prod が 異なる Cloud Run Service・デプロイ頻度は低い チームの多くは アプリケーションエンジニア
  31. 要件とアプローチを整理 40 現状(最低限実装できればいいこと) 決定内容 gcloud コマンドで Cloud Run Service にデプロイ

    Cloud Deploy を使いたくなったら置 き換えるだけ 今のところ 1 プロジェクトに Dev/Prod が 異なる Cloud Run Service・デプロイ頻度は低い チームの多くは アプリケーションエンジニア 俺の考える最強の CI/CD(の軸) 要件に合わせてシンプルな技術選択する CI と CD を分離することで それぞれ最適なタイミングで最適な技術を導入しやすくする
  32. CREDITS: This presentation template was created by Slidesgo, and includes

    icons by Flaticon, and infographics & images by Freepik Thanks! @pHaya72 @t_hayashi 41
  33. CREDITS: This presentation template was created by Slidesgo, and includes

    icons by Flaticon, and infographics & images by Freepik Thanks! Cloud Deploy ! @pHaya72 @t_hayashi 42
  34. はまったポイント 44 Cloud Run Cloud Deploy Cloud Build Artifact Registry

    Cloud Storage イメージをひっぱてくる権限 デプロイを実行する権限 オブジェクトを作成する権限 デフォルトが Compute Engine の デフォルトサービスアカウントで実行 ログを書き込む権限権限
  35. はまったポイント 45 Cloud Run Cloud Deploy Cloud Build Artifact Registry

    Cloud Storage イメージをひっぱてくる権限 デプロイを実行する権限 オブジェクトを作成する権限 デリバリーパイプラインを構築する際の executeConfig でサービスアカウントを指定する必要があった ログを書き込む権限権限
  36. 参考文献 ★ GitHub Actions と Google Cloud Deploy が連携 ◦

    https://cloud.google.com/blog/ja/products/devops-sre/using-github-actions-with-google-cloud-deploy • GitHub Actions を使用して Cloud Run にデプロイする ◦ https://cloud.google.com/blog/ja/products/devops-sre/deploy-to-cloud-run-with-github-actions ★ Cloud Deploy 公式ドキュメント ◦ https://cloud.google.com/build/docs/deploying-builds/deploy-cloud-run?hl=ja ★ Google Cloud Partner Tech Blog Challenge の 2023 年度受賞者発表 ◦ https://cloud.google.com/blog/ja/topics/partners/google-cloud-partner-tech-blog-challenge-2023-winners ★ Cloud Run のための実践 Cloud Deploy ◦ https://zenn.dev/knowledgework/articles/cloud-deploy-for-cloud-run ★ Cloud Deploy で始める 継続的デリバリー 䛾 継続的改善 ◦ https://lp.cloudplatformonline.com/rs/808-GJW-314/images/App_Modernization_OnAir_q4_1027_Session.pdf ★ Google Cloud Deploy にデプロイ後に検証を行う機能を導入 ◦ https://cloud.google.com/blog/ja/topics/developers-practitioners/google-cloud-deploy-introduces-post-deploy ment-verification 46