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

DevFest Tokyo 2023: Google Cloudでチームで安全にデプロイをする

DevFest Tokyo 2023: Google Cloudでチームで安全にデプロイをする

DevFest Tokyo 2023: Google Cloudでチームで安全にデプロイをする

https://gdg-tokyo.connpass.com/event/301690/

サンプル
https://github.com/sakajunquality/devfest-2023

sakajunquality

December 09, 2023
Tweet

More Decks by sakajunquality

Other Decks in Technology

Transcript

  1. Cloud Run について - 今回は Cloud Run にデプロイします。 - 本題と逸れるためCloud

    Runの詳細は割愛します。 - 基本的には任意のコンテナイメージをHTTP/gRPCサーバーとして公開で きます。 - Cloud Deploy は GKE にも対応しているため GKE でも流れは同じにな ります。
  2. まずはビルド $ gcloud builds submit \ --tag asia-northeast1-docker.pkg.dev/[project]/app/test-app:v1 \ --project

    [project] . Cloud Build を使っていますが docker build & push していると 思ってください
  3. e.g. オプションがどんどん複雑になったら...? $ gcloud run deploy test-app-prd \ --image=asia-northeast1-docker.pkg.dev/[project]/app/test-app:v1 \

    --cpu=1 \ --memory=4G \ --concurrency=500 \ --port=8080 \ --set-secrets… \ --set-env=vars… \ --project [project] ...
  4. Cloud Deploy の実行について Cloud Deploy 自体の機能にフォーカスするため、Cloud Deploy へのリリース作成 などの自動化については割愛します。 GitHub

    の場合はこちらのactionを組み合わせると簡単にできます。 - https://github.com/google-github-actions/auth - https://github.com/google-github-actions/create-cloud-deploy-release https://cloud.google.com/blog/ja/products/devops-sre/using-github-actions- with-google-cloud-deploy?hl=ja なども参考に
  5. apiVersion: serving.knative.dev/v1 kind: Service metadata: name: test-app-prd spec: template: spec:

    serviceAccountName: run-sa containers: - image: app ports: - name: http1 containerPort: 8080 resources: limits: cpu: 1000m memory: 256Mi Cloud Run サービスの定義 後ほど解説するのでここは雰囲気 だけで (Kubernetes に慣れてる方は Deployment と思ってください)
  6. 後ほど解説するのでここは雰囲気 だけで apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: test-app description:

    test-app application pipeline serialPipeline: stages: - targetId: prd-test-app profiles: [prd] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prd-test-app description: Cloud Run production run: location: projects/[project]/locations/asia-northeast1 Cloud Deployの設定
  7. Google Cloud Deploy provides an opinionated on-ramp to GKE, Cloud

    Run, and Anthos via Skaffold. Leverage built-in best practices which keep pipelines durable by insulating them against changes. Google Cloud Deploy https://cloud.google.com/deploy?hl=en
  8. Google Cloud Deploy provides an opinionated on-ramp to GKE, Cloud

    Run, and Anthos via Skaffold. Leverage built-in best practices which keep pipelines durable by insulating them against changes. Google Cloud Deploy https://cloud.google.com/deploy?hl=en
  9. - Google Cloud のフルマネージドのCD - GKE や Cloud Run にデプロイが可能

    - Skaffold を利用 - 宣言的にデプロイやパイプライン定義 Cloud Deploy
  10. 命令的なデプロイ: Imperative Deploy - 手続き的に手順を羅列 - e.g. Cloud Build や

    GitHub Actions など - 単純にデプロイするだけなら1-2コマンドで解決 - e.g. gcloud run deploy --source … - 直感的でわかりやすく自由度が高い - 自由度が高い反面、カオスになる場合も
  11. - デプロイ対象の設定 - Cloud RunやKubernetesの定義 - e.g. https://cloud.google.com/run/docs/reference/yaml/v1 - skaffoldの設定

    - 何をデプロイするか - Cloud Deployの設定 (DeliveryPipeline や Target) - どこにどうやってデプロイするか Cloud Deploy の設定
  12. apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: test-app description: test-app application

    pipeline serialPipeline: stages: - targetId: stg-test-app profiles: [stg] - targetId: prd-test-app profiles: [prd] ここが差分 prdの前にstgを追加 Cloud Deployの設定
  13. apiVersion: deploy.cloud.google.com/v1 kind: Automation metadata: name: test-app/promote description: Promotes a

    release to the next target suspended: false serviceAccount: sa selector: - target: id: "*" rules: - promoteRelease: name: "promote-release" toTargetId: "@next" 自動化も宣言的に設定 Cloud Deployの設定 次のステージに promoteする
  14. Cloud Deployの設定 apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prd-test-app description:

    Cloud Run production requireApproval: true run: location: projects/[project]/locations/asia-northeast1 ここだけ
  15. Cloud Deployの設定 apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: test-app description:

    test-app application pipeline serialPipeline: stages: - targetId: stg-test-app profiles: [stg] strategy: standard: verify: true verifyを有効化
  16. Cloud Deployの設定 apiVersion: skaffold/v3alpha1 kind: Config metadata: name: test-app //

    省略 deploy: cloudrun: {} verify: - name: verify container: name: verify image: ubuntu command: - echo - ok Verifyで何をするか 今回は ok と出力するのみ もし手元で試される場合は、 exit 1に変えてみてください
  17. Cloud Deployの設定 apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: // 省略 -

    targetId: prd-test-app profiles: [prd] strategy: canary: runtimeConfig: cloudRun: automaticTrafficControl: true canaryDeployment: percentages: [25, 50, 75] verify: true カナリアの割合を指定
  18. Cloud Deployの設定 apiVersion: deploy.cloud.google.com/v1 kind: Automation metadata: name: test-app/advance //

    省略 rules: - advanceRollout: name: "advance-rollout-to-50" sourcePhases: ["canary-25"] wait: 1m - advanceRollout: name: "advance-rollout-to-75" sourcePhases: ["canary-50"] wait: 10m カナリアも自動化! 1分後に25%->50%へ (verifyが通れば) 10分後に75%へ
  19. Cloud Deployの設定 apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prd-all-test-app description:

    deploy to the prod all regions multiTarget: targetIds: [prd-test-app, prd-us-test-app] 複数のターゲットにデプロイ
  20. - 複数のターゲットにデプロイ - e.g. 別リージョンのCloud Runや複数の GKE クラスター - Deploy

    parameterを利用することで環境差を吸収することも - https://cloud.google.com/deploy/docs/parallel?hl=en Parallel Deploy
  21. まとめ Cloud Deploy Cloud Deploy は Cloud Run や GKE

    へのフルマネージドのデプロイ パイプラインを 構築することが可能。 専用のUIやデプロイの仕組みが統一されるだけではなく、canaryやverificationと いったデプロイ戦略を高めたり automation のように自動化をする機能が充実してい る。