Slide 1

Slide 1 text

クラウドネイティブを加速する Azure Container Apps 実践 2025.02.14 Yutaka.Osada

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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 と言う前提を置いてます

Slide 9

Slide 9 text

バックエンド&フロントエンドアプリを 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 と言う前提を置いてます

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

フロントエンドを表示してみる DO WHAT MATTERS 11 FQDNが自動生成 このURIが既定となる Dapr経由でAPIをCallしレスポンスを描画

Slide 12

Slide 12 text

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 が割り当てられるので、 リリース前のテストが可能

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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/ 環境前提

Slide 17

Slide 17 text

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/