次の方法で共有


Azure Kubernetes Service へのデータ API ビルダーのデプロイ

Azure Kubernetes Service (AKS) を使用すると、他のワークロードと共にマネージド Kubernetes クラスターでデータ API ビルダーを実行できます。 このガイドでは、構成ファイルを含むカスタム コンテナー イメージを構築し、それを Azure Container Registry (ACR) にプッシュし、Kubernetes マニフェストを使用して AKS にデプロイする方法について説明します。

前提条件

構成ファイルをビルドする

  1. 構成ファイルのローカル ディレクトリを作成します。

  2. dab initを使用して基本構成ファイルを初期化します。 接続文字列に @env() 関数を使用して、シークレットがイメージにベイクされずに実行時に挿入されるようにします。

    dab init \
      --database-type mssql \
      --connection-string "@env('DATABASE_CONNECTION_STRING')"
    
  3. dab addを使用して、少なくとも 1 つのエンティティを追加します。 公開するテーブルまたはビューごとに繰り返します。

    dab add Books \
      --source dbo.Books \
      --permissions "anonymous:read"
    
  4. 続行する前に、 dab-config.json を確認します。

カスタム コンテナー イメージをビルドしてプッシュする

dab-config.json/App/dab-config.jsonを含むイメージをビルドします。

  1. Azure Container Registry がまだない場合は作成します。

    az acr create \
      --resource-group <resource-group> \
      --name <registry-name> \
      --sku Basic \
      --admin-enabled true
    
  2. Dockerfileと同じディレクトリにdab-config.jsonを作成します。

    FROM mcr.microsoft.com/azure-databases/data-api-builder:latest
    COPY dab-config.json /App/dab-config.json
    
  3. ACR タスクを使用してイメージをビルドしてプッシュします。

    az acr build \
      --registry <registry-name> \
      --image dab:latest \
      .
    
  4. 完全な画像リファレンスに注意してください: <registry-name>.azurecr.io/dab:latest

AKS を ACR に接続する

AKS クラスターにレジストリへのプル アクセス権を付与します。

az aks update \
  --name <cluster-name> \
  --resource-group <resource-group> \
  --attach-acr <registry-name>

接続文字列を Kubernetes シークレットとして格納する

データベース接続文字列を Kubernetes シークレットとして格納し、マニフェスト ファイルに含めないようにします。

kubectl create secret generic dab-secrets \
  --from-literal=DATABASE_CONNECTION_STRING="<your-connection-string>"

Warnung

接続文字列を Kubernetes マニフェスト ファイルまたはコンテナー イメージに直接配置しないでください。 シークレットまたは Azure Key Vault を使用します。

Kubernetes マニフェストを作成する

次の内容を含む dab-deployment.yaml という名前のファイルを作成します。 <registry-name>を ACR 名に置き換えます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dab
  labels:
    app: dab
spec:
  replicas: 2
  selector:
    matchLabels:
      app: dab
  template:
    metadata:
      labels:
        app: dab
    spec:
      containers:
        - name: dab
          image: <registry-name>.azurecr.io/dab:latest
          ports:
            - containerPort: 5000
          env:
            - name: DATABASE_CONNECTION_STRING
              valueFrom:
                secretKeyRef:
                  name: dab-secrets
                  key: DATABASE_CONNECTION_STRING
          readinessProbe:
            httpGet:
              path: /health
              port: 5000
            initialDelaySeconds: 5
            periodSeconds: 10
          livenessProbe:
            httpGet:
              path: /health
              port: 5000
            initialDelaySeconds: 15
            periodSeconds: 20
---
apiVersion: v1
kind: Service
metadata:
  name: dab-service
spec:
  selector:
    app: dab
  ports:
    - protocol: TCP
      port: 80
      targetPort: 5000
  type: LoadBalancer

readinessProbelivenessProbeは、DAB /health エンドポイントを使用します。 詳細については、「 正常性チェック」を参照してください。

AKS にデプロイする

  1. クラスターの資格情報を取得します。

    az aks get-credentials \
      --resource-group <resource-group> \
      --name <cluster-name>
    
  2. マニフェストを適用します。

    kubectl apply -f dab-deployment.yaml
    
  3. ポッドの準備ができるまでロールアウトを監視します。

    kubectl rollout status deployment/dab
    
  4. サービスに割り当てられている外部 IP アドレスを取得します。

    kubectl get service dab-service
    

    EXTERNAL-IP列にパブリック IP アドレスが表示されます。 ロード バランサーのプロビジョニングを 1 分間待つ。

デプロイメントを確認する

  1. http://<external-ip>/health にアクセスしてください。 正常な応答は次のようになります。

    {
      "status": "healthy",
      "version": "2.0.0",
      "app-name": "dab_oss_2.0.0"
    }
    
  2. エンティティ エンドポイントをテストします。

    curl http://<external-ip>/api/Books
    

デプロイをスケーリングする

レプリカ数を水平方向にスケーリングするように変更します。

kubectl scale deployment/dab --replicas=4

または、spec.replicasdab-deployment.yamlを更新して再適用します。

リソースをクリーンアップする

不要になったら、デプロイとサービスを削除します。

kubectl delete -f dab-deployment.yaml
kubectl delete secret dab-secrets

AKS クラスターとレジストリを削除するには、リソース グループを削除します。

az group delete \
  --name <resource-group> \
  --yes --no-wait