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

20250214_クラウドネイティブを加速する Azure Container Apps 実践

20250214_クラウドネイティブを加速する Azure Container Apps 実践

Azure PaaSの概要から、Container Appsを用いたBlue-Greenデプロイの実演、Dapr/KEDAなどを活用したクラウドネイティブなマイクロサービス構築手法までを解説します。

■アジェンダ
・Introduction
・はじめに
・Azure PaaS サービス概要
・Azure Container Apps の特徴
・Azure Container Apps での Blue-Green Deployments デモ
・Container Apps Environment をデプロイ
・バックエンド&フロントエンドアプリをAzure Container RegistryへPush
・Azure Container Apps をデプロイ
・フロントエンドを表示してみる
・Blue-Green Deploymentsをやってみる
・Dapr / KEDA の重要性
・まとめ

yutakaosada

February 14, 2025
Tweet

More Decks by yutakaosada

Other Decks in Technology

Transcript

  1. Agenda • Introduction • はじめに • Azure PaaS サービス概要 •

    Azure Container Apps の特徴 • Azure Container Apps での Blue-Green Deployments デモ • Container Apps Environment をデプロイ • バックエンド&フロントエンドアプリをAzure Container RegistryへPush • Azure Container Apps をデプロイ • フロントエンドを表示してみる • Blue-Green Deploymentsをやってみる • Dapr / KEDA の重要性 • まとめ DO WHAT MATTERS 2
  2. Yutaka Osada (長田 豊) • DevOps Engineer @Avanade Japan •

    業務 • Azureコンポーネントを活用したサー ビス構築 • 技術検証、パフォーマンスチューニン グを得意とし、T-SQLが好き。 • 技術スタック • C#, .NET, Azure(PaaS), Azure DevOps, GitHub • Please follow me DO WHAT MATTERS 3 https://github.com/yutaka-art
  3. はじめに DO WHAT MATTERS 4 • 目的 • Azure PaaS

    の全体像と、Azure Container Apps の特徴・活用方法を理解する • 対象 • アプリケーション開発者 • インフラエンジニア • DevOps エンジニア • ゴール • Azure PaaS サービス(Web Apps / Functions / Container Apps / AKS)の使い分 け方を理解する • Azure Container Apps を利用した Blue- Green Deployments の実装例を把握する
  4. Azure PaaS サービス 概要 • AZURE WEB APPS • Web

    アプリケーション / API 向け • 組み込みのデプロイ、TLS 証明書、認証・認可など • Windows / Linux / Custom Container に対応 • AZURE FUNCTIONS • イベントドリブンなサーバーレスアプリケーション • HTTP / イベントベースのフルマネージドなオートスケー リング • Binding / Trigger を使うことでサービス依存のコードを 記述不要 • AZURE CONTAINER APPS • Web アプリケーション / イベント駆動アプリケーション の両方に対応 • KEDA / Dapr を利用したスケーリングとマイクロサービ ス機能を手軽に活用 • バックグラウンド常時稼働も可能 • Kubernetes の管理や設定を意識せずに利用できる • AZURE KUBERNETES SERVICE (AKS) • より自由度・拡張性が必要な場合に採用 • コンテナオーケストレーションを自前で細かく管理可能 • 運用コストも大きいが、GPU インスタンスのような特殊 な構成にも対応可能 DO WHAT MATTERS 5
  5. Azure Container Apps の特徴 • CONTAINER APP としての機能 • 1つ以上のコンテナを実行可能

    (Sidecar パターン向 け) • Dapr と KEDA によるマイクロサービス、イベントド リブン、スケーリングのサポート • 外部 / 内部へのエンドポイント公開 • Container App Environment 内でのアプリ間通信 • GitHub Actions を使った継続的デプロイ • CONTAINER APP ENVIRONMENT • ネットワークが分離されたリソース単位 • カスタム VNET を環境単位でサポート • App Service Plan / App Service Environment に相当 する概念 DO WHAT MATTERS 6
  6. Azure Resource Group Container Apps Environment Container Apps (Frontend-App) Log

    Analytics Application Insights Container Apps (Backend-App) Container Revison 1 Container Revison 2 Container Revison 1 Ingres s https://fed- app.*.japaneast.azurecontai nerapps.io http://8080 100% GitHub # git commit # git push Docker ビルド Docker コンテナを push Docker コンテナをpull デプロイ・更新 GitHub Container Registry GitHub Actions Azure Bicep 認 証 ・ 認 可 architecture 1 2 4 X デモの順序 5 Azure Container Apps での Blue-Green Deployments デモ DO WHAT MATTERS 7 • デモの概要 • Bicep を使ったアプリケーション構成のデプロイ • コンテナのバージョンを切り替えながらトラフィックを制御 • 手順ハイライト • Bicep テンプレートの用意 • Container App Environment, Container App, ログ設 定など • Blue (現行バージョン) のデプロイ • トラフィックを 100% Blue に割り当て • Green (新バージョン) のデプロイ • トラフィックを段階的に Green に振り分け • 正常性確認後にトラフィックを切り替え • デモのポイント • Dapr / KEDA との連携が容易 (イベントベースのスケーリン グなど) • トラフィック制御が簡単に実装でき、継続的デリバリーの質 を高められる 3
  7. Container Apps Environment をデプロイ DO WHAT MATTERS 8 # Environmentを作成

    az deployment group create --resource- group $resource_group --template- file ./deploy/_env/main.bicep -- parameters environmentName=$environmentName リソースプレフィックスは osatrd と言う前提を置いてます
  8. バックエンド&フロントエンドアプリを Azure Container RegistryへPush DO WHAT MATTERS 9 # 作成されたAzure

    Container Registryの情報を取得 $crServerName = 'cr' + $environmentName + '.azurecr.io' $crUserName = 'cr' + $environmentName $crPassword = az acr credential show --name $crUserName --query "passwords[0].value" -o tsv # docker login docker login $crServerName # コンテナ作成 バックエンド docker build -t dapr-backend:latest . docker tag dapr-backend crosatrd.azurecr.io/dapr-backend:latest docker push crosatrd.azurecr.io/dapr-backend:latest # コンテナ作成 フロントエンド docker build -t dapr-frontend:latest . docker tag dapr-frontend crosatrd.azurecr.io/dapr-frontend:0.1.0 docker push crosatrd.azurecr.io/dapr-frontend:0.1.0 docker tag dapr-frontend crosatrd.azurecr.io/dapr-frontend:0.2.0 docker push crosatrd.azurecr.io/dapr-frontend:0.2.0 リソースプレフィックスは osatrd と言う前提を置いてます
  9. Azure Container Apps をデプロイ DO WHAT MATTERS 10 リソースプレフィックスは osatrd

    と言う前提を置いてます # Container App作成 バックエンド $crImage = 'crosatrd.azurecr.io/dapr-backend:latest' az deployment group create --resource-group $resource_group --template-file ./deploy/backend- app/main.bicep --parameters environmentName=$environmentName crServerName=$crServerName crUserName=$crUserName crPassword=$crPassword crImage=$crImage # Container App作成 フロントエンド $crImage = 'crosatrd.azurecr.io/dapr-frontend:0.1.0' $revisionSuffix = 'v1' $oldRevisionSuffix = 'v1' az deployment group create --resource-group $resource_group --template-file ./deploy/frontend- app/main.bicep --parameters environmentName=$environmentName crServerName=$crServerName crUserName=$crUserName crPassword=$crPassword crImage=$crImage revisionSuffix=$revisionSuffix oldRevisionSuffix=$oldRevisionSuffix
  10. Blue-Green Deploymentsをやってみる (1/2) DO WHAT MATTERS 12 # Blue/Green Deployments

    # containerImage のタグを 0.2.0、revisionSuffix のバージョンを v2 に 更新することで、先ほどデプロイした Revision( ca-osatrd-fed--v1)への トラフィックを 100% のまま、新しい Revision をデプロイ $crImage = 'crosatrd.azurecr.io/dapr-frontend:0.2.0' $revisionSuffix = 'v2' $oldRevisionSuffix = 'v1’ Az deployment group create –resource-group $resource_group – template-file ./deploy/frontend-app/main.bicep –parameters environmentName=$environmentName crServerName=$crServerName crUserName=$crUserName crPassword=$crPassword crImage=$crImage revisionSuffix=$revisionSuffix oldRevisionSuffix=$oldRevisionSuffix ca-osatrd-fed--v2 という Revision が追加された traffic が「0」の新しい Revision には、ユーザーに公開 される FQDN とは異なる FQDN が割り当てられるので、 リリース前のテストが可能
  11. Blue-Green Deploymentsをやってみる (2/2) DO WHAT MATTERS 13 # リリース前のテストが完了したとして、Azure CLI

    を使って Swap az containerapp ingress traffic set -n ca-osatrd-fed -g rg-osatrd --revision-weight ca-osatrd-fed--v1=0 latest=100 traffic のパーセンテージが入れ替わりました ユーザーに公開される FQDN にアクセスすると、V2 に 更新された フロントエンドが表示される # 旧バージョンの Revision をシャットダウンします。アクティブのま まだと、課金対象となります az containerapp revision deactivate -n ca-osatrd-fed -g rg- osatrd --revision ca-osatrd-fed--v1
  12. Dapr / KEDA の重要性 DO WHAT MATTERS 14 https://dapr.io/ https://keda.sh/

    ポイン ト Azure Container Apps では、これらがマネージドで統合され ているため、Kubernetes の知識がなくても導入が簡単 モダンなマイクロサービス / イベントドリブンアーキテクチャ へのステップアップが容易 KEDA KEDAとはマイクロサービスにおけるスケーリング機構 •イベントに応じた自動スケーリング (CPU, メッセージキュー、カスタムイベン トなど) •コンテナ単位でスケールを管理できる Dapr Daprとはインフラストラクチャの抽象化 •分散アプリケーションランタイム •サービス間通信 / PubSub / バインディング / シークレット管理など •コードに大きな変更を加えずにマイクロサービス化がしやすい
  13. Summary DO WHAT MATTERS • イベント駆動アプリケーションを作りたい • Azure Functions •

    C# や Node.js で動く Web アプリケーションを作りたい • Web Apps • SPA / SSG を使った Web アプリケーションを作りたい • Static Web Apps • 利用したい言語が Azure Functions でサポートされていない • Container Apps • バックグラウンドで常時稼働するサービスを作りたい • Container Apps • 大規模に Microservices を採用したアプリケーションを作りたい • Container Apps • GPU インスタンスなど特殊なインスタンスが必要な場合 • AKS 15
  14. References DO WHAT MATTERS 16 デモで利用したSrcは以下に配置しています。 https://github.com/yutaka-art/SoeDay_AcaDemo_20250201 ツール ダウンロードURL Visual

    Studio 2022 Enterprise 17.12.3 https://visualstudio.microsoft.com/ja/thank-you-downloading-visual- studio/?sku=Enterprise&channel=Release&version=VS2022&source=VSLandingPage&cid= 2030&passive=false Visual Studio Code 1.97.0 https://code.visualstudio.com/download docker-desktop https://www.docker.com/products/docker-desktop/ Azure CLI 2.68.0 https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli-windows?tabs=azure-cli Azure CLI on Bicep 0.33.93 az bicep upgrade Dapr CLI 1.14.1 https://docs.dapr.io/getting-started/install-dapr-cli/ 環境前提
  15. THANK YOU • Yutaka.Osada • [email protected] • https://github.com/yutaka-art DO WHAT

    MATTERS 17 2/25(火) 12:30-13:15 GitHub dockyardで話しますー https://github-dockyard.connpass.com/event/345814/