Azure でスケーラブルなアプリケーションを構築する | オリジナル、AI翻訳

Home 2023.07

このブログ記事は、ChatGPT-4oのアシストで執筆されました。


目次

はじめに

クラウドコンピューティングの世界では、Microsoft Azureはアプリケーションの構築、デプロイ、管理に強力なプラットフォームとして注目されています。最近のプロジェクトでは、Azureサブスクリプション、Azure Kubernetes Service (AKS)、Application Insights、Virtual Machines (VMs)、Event Hubs、API Management Services、SQLデータベースなどのAzureサービスを活用し、スケーラブルで監視可能なアプリケーションインフラを構築しました。このブログ記事では、私たちのアプローチ、使用したツール、ベストプラクティス、クラスターの管理、ログの取得、ログのクエリに関する詳細な手順を紹介します。

Azureサブスクリプションの開始

Azureサブスクリプションは、Azureサービスにアクセスするためのゲートウェイです。仮想マシン、データベース、Kubernetesクラスターなどのリソースを格納するコンテナとして機能します。

  1. Azureサブスクリプションの設定:
    • サインアップ: Azureアカウントをお持ちでない場合は、Azureポータルでサインアップしてください。
    • サブスクリプションの作成: 「サブスクリプション」セクションに移動し、新しいサブスクリプションを作成します。これは、請求と管理のコンテナとなります。
  2. リソースの整理:
    • リソースグループ: リソースのライフサイクルや管理基準に基づいてリソースグループに整理します。
    • タグ: 追加のメタデータとしてタグを使用し、リソース管理と請求を容易にします。

Azure Kubernetes Service (AKS) でアプリケーションをデプロイ

Azure Kubernetes Service (AKS) は、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを簡素化するマネージドKubernetesサービスです。

AKSクラスターの作成と管理

  1. AzureポータルでAKSクラスターを作成:
    • 設定: AzureポータルでAKSを検索し、新しいKubernetesクラスターを作成します。
    • 構成: クラスターのサイズを選択し、ノードプールを構成し、ネットワークを設定します。
    • 認証: セキュアなアクセス制御のためにAzure Active Directory (AAD) を使用します。
    • 監視: 設定プロセス中に監視とログ記録を有効にします。
  2. Azure CLIでAKSクラスターを作成:
    az aks create \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --node-count 3 \
      --enable-addons monitoring \
      --generate-ssh-keys
    
  3. AKSクラスターの管理:
    • クラスターのスケーリング:
      az aks scale \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 5
      
    • クラスターのアップグレード:
      az aks upgrade \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --kubernetes-version 1.21.2
      

アプリケーションのデプロイ

  1. Kubernetesマニフェストの使用: デプロイメント、サービス、その他のKubernetesオブジェクト用のYAMLファイルを記述します。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: myapp
            image: myregistry.azurecr.io/myapp:latest
            ports:
            - containerPort: 80
    
  2. kubectlでデプロイ:
    kubectl apply -f myapp-deployment.yaml
    
  3. Helmチャート: Helmを使用してKubernetesアプリケーションを管理し、バージョン管理を行います。
    helm install myapp ./mychart
    

Podからのログの取得

  1. Podにアタッチしてログを取得:
    kubectl logs <pod-name>
    
    • ログをストリーミング:
      kubectl logs <pod-name> -f
      
  2. ログ収集用のサイドカーの使用:
    • Pod仕様にログ収集用のサイドカーコンテナを作成し、ログを中央集権的なロギングサービスに送信します。
    spec:
      containers:
      - name: myapp
        image: myregistry.azurecr.io/myapp:latest
        ...
      - name: log-shipper
        image: log-shipper:latest
        ...
    

Azure Application Insightsによる監視と診断

Application Insightsは、アプリケーションの監視と診断に強力な機能を提供します。

  1. Application Insightsの設定:
    • 統合: アプリケーションコードにApplication Insights SDKを追加します。
    • 計測キー: Application Insightsリソースからの計測キーでアプリケーションを構成します。
  2. パフォーマンスの追跡:
    • メトリクス: 応答時間、失敗率、アプリケーション依存関係を監視します。
    • ライブメトリクスストリーム: 即時の洞察のためにリアルタイムのパフォーマンスメトリクスを表示します。
  3. 診断とトラブルシューティング:
    • アプリケーションマップ: 依存関係を可視化し、パフォーマンスボトルネックを特定します。
    • トランザクション診断: 分散トレーシングを使用して、サービス間のリクエストをトレースします。

Azure Virtual Machines (VMs) の活用

Azure VMは、コンテナ化されていないカスタムアプリケーションやサービスを実行するための柔軟性を提供します。

  1. 仮想マシンのプロビジョニング:
    • VMの作成: Azureポータルで新しい仮想マシンを作成し、適切なサイズとオペレーティングシステムを選択します。
    • ネットワーク構成: トラフィックを制御するために仮想ネットワーク、サブネット、セキュリティグループを設定します。
  2. VMの構成:
    • ソフトウェアのインストール: 必要なソフトウェアと依存関係をインストールします。
    • セキュリティ: 定期的にパッチと更新を適用し、ファイアウォールを構成し、ネットワークセキュリティグループ(NSGs)を使用します。
  3. VMの管理:
    • バックアップと復元: Azure Backupを使用してVMのバックアップを行います。
    • 監視: Azure Monitorを使用してVMのパフォーマンスを監視します。

Azure Event Hubsによるリアルタイムデータの取り込み

Azure Event Hubsは、1秒間に数百万のイベントを受信および処理できるビッグデータストリーミングプラットフォームおよびイベントインゲストサービスです。

  1. Event Hubsの設定:
    • Event Hubネームスペースの作成: AzureポータルでEvent Hubネームスペースを作成し、Event Hubsを格納します。
    • Event Hubsの作成: ネームスペース内で、データストリームをキャプチャするために1つ以上のEvent Hubsを作成します。
  2. データの取り込み:
    • プロデューサ: SDK(.NET、Java、Pythonなど)を使用して、アプリケーションやサービスを設定し、イベントをEvent Hubsに送信します。
    • パーティション: イベント処理をスケールアップし、高いスループットと並列処理を確保するためにパーティションを使用します。
  3. イベントの処理:
    • コンシューマ: コンシューマーグループを使用してイベントを読み取り、処理します。Azureは、Azure Stream Analytics、Azure Functions、Event Hubs SDKを使用したカスタム処理など、処理に複数のオプションを提供します。
  4. Event Hubsの監視:
    • メトリクス: Azureポータルを通じてスループット、レイテンシ、イベント処理メトリクスを監視します。
    • アラート: 高いレイテンシやドロップされたメッセージなどの問題を通知するためにアラートを設定します。

Azure API Management ServicesによるAPIの管理

Azure API Management Servicesは、既存のバックエンドサービスに対して一貫性のあるモダンなAPIゲートウェイを作成する方法を提供します。

  1. API Managementの設定:
    • API Managementサービスの作成: AzureポータルでAPI Managementを検索し、新しいサービスを作成します。
    • APIの構成: OpenAPI仕様、Azure Functions、またはその他のバックエンドからAPIを定義およびインポートします。
  2. APIのセキュリティ:
    • 認証と認可: OAuth2、JWT検証などのメカニズムを使用してAPIをセキュリティ保護します。
    • レート制限とスロットリング: APIを悪用から保護するためのポリシーを実装します。
  3. 監視と分析:
    • API Insights: 使用状況を追跡し、パフォーマンスを監視し、ログを分析します。
    • デベロッパーポータル: デベロッパーがAPIを発見し、使用できるポータルを提供します。
  4. ライフサイクルの管理:
    • バージョニングとリビジョン: APIの異なるバージョンとリビジョンをシームレスに管理します。
    • ポリシーマネジメント: リクエストとレスポンスの変換、検証、ルーティングのためのポリシーを適用します。

Azure SQLデータベースの活用

Azure SQL Databaseは、組み込みのインテリジェンス、高可用性、スケーラビリティを備えた完全マネージドのリレーショナルデータベースです。

  1. Azure SQL Databaseの設定:
    • SQLデータベースの作成: AzureポータルでSQLデータベースに移動し、新しいデータベースを作成します。
    • データベースの構成: データベースのサイズ、パフォーマンスレベルを設定し、ネットワーキング設定を構成します。
  2. SQLデータベースへの接続:
    • 接続文字列: 提供された接続文字列を使用して、アプリケーションをSQLデータベースに接続します。
    • ファイアウォール規則: アプリケーションまたはローカルマシンからのアクセスを許可するためにファイアウォール規則を構成します。
  3. データベースの管理:
    • バックアップと復元: 自動バックアップとポイントインタイム復元を使用してデータを保護します。
    • スケーリング: パフォーマンス要件に基づいてデータベースをアップまたはダウンします。
  4. 監視とパフォーマンスチューニング:
    • クエリパフォーマンスインサイト: クエリパフォーマンスを監視し、最適化します。
    • 自動チューニング: パフォーマンスを向上させるために自動チューニング機能を有効にします。

Kusto Query Language (KQL) でのログのクエリ

Kusto Query Language (KQL) は、Azure Monitor Logsをクエリするために使用され、ログデータに関する強力な洞察を提供します。

  1. 基本的なKQLクエリ:
    // 特定のテーブルからレコードを取得
    LogTableName
    | where TimeGenerated > ago(1h)
    | project TimeGenerated, Level, Message
    
  2. データのフィルタリングと集約:
    LogTableName
    | where TimeGenerated > ago(1h) and Level == "Error"
    | summarize Count=count() by bin(TimeGenerated, 5m)
    
  3. テーブルの結合:
    Table1
    | join kind=inner (Table2) on $left.UserId == $right.UserId
    | project Table1.TimeGenerated, Table1.Message, Table2.AdditionalInfo
    
  4. クエリに基づくアラートの作成:
    • Azureポータルに移動し、Log Analyticsワークスペースにアクセスします。
    • 「ログ」をクリックし、KQLクエリを入力します。
    • 「新しいアラートルール」をクリックし、クエリ結果に基づいてアラートを作成します。

プロアクティブ監視のためのアラート設定

Azure Alertsは、リソースの健全性とパフォーマンスについて通知を受け取るのに役立ちます。

  1. アラートの作成:
    • メトリクスアラート: CPU使用率、メモリ使用率、応答時間などのメトリクスに基づいてアラートを設定します。
    • ログアラート: KQLを使用したログ検索クエリに基づいてアラートを作成します。
  2. アクションの構成:
    • アクショングループ: 通知を受け取る人と方法(メール、SMS、Webhook)を指定するアクショングループを定義します。
    • 統合: ServiceNowなどのITSMツールと統合し、インシデント管理を自動化します。
  3. アラートへの対応:
    • ダッシュボード: アラートの中央集権的なビューを提供するAzureダッシュボードを設定します。
    • 自動化: Azure Automationを使用して特定のアラートに自動的に対応します。

まとめ

Azureサブスクリプション、AKS、Application Insights、Virtual Machines、Event Hubs、API Management Services、SQLデータベースを活用することで、スケーラブルで堅牢で監視可能なアプリケーションインフラを構築しました。Azureの包括的なツールセットにより、アプリケーションを効率的にデプロイ、管理、監視できました。この設定は、アプリケーションのパフォーマンスを向上させるだけでなく、リソースをプロアクティブに維持し、最適化するために必要な洞察を提供しました。


Back Donate