> ## Documentation Index
> Fetch the complete documentation index at: https://docs.casebender.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Azureへのデプロイ

> Microsoft AzureにCaseBenderをデプロイする

## 概要

このガイドでは、Azure Container Appsとマネージドサービスを使用して、事前に構築されたDockerイメージでCaseBenderをAzureにデプロイする方法を説明します。

## 前提条件

1. [Azureアカウント](https://azure.microsoft.com/)
2. [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli)がインストールされていること
3. [Docker](https://docs.docker.com/get-docker/)がインストールされていること

## ステップ1: 初期設定

### Azure CLIのインストールと設定

<CodeGroup>
  ```bash macOS theme={null}
  # Homebrewを使用
  brew install azure-cli

  # Azureにログイン

  az login

  # ACR用のDockerの設定

  az acr login --name casebenderacr

  ```

  ```bash Linux theme={null}
  # Azure CLIのインストール
  curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

  # Azureにログイン
  az login

  # ACR用のDockerの設定
  az acr login --name casebenderacr
  ```

  ```powershell Windows theme={null}
  # wingetを使用
  winget install -e --id Microsoft.AzureCLI

  # Azureにログイン
  az login

  # ACR用のDockerの設定
  az acr login --name casebenderacr
  ```
</CodeGroup>

### プロジェクトの初期化

```bash theme={null}
# 変数の設定
RESOURCE_GROUP="casebender-rg"
LOCATION="eastus"

# リソースグループの作成
az group create --name $RESOURCE_GROUP --location $LOCATION

# 必要なサービスの有効化
az provider register --namespace Microsoft.ContainerRegistry
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.Storage
```

## ステップ2: Azureインフラストラクチャの設定

### ストレージアカウントの作成

```bash theme={null}
# ストレージアカウントの作成
az storage account create \
  --name casebenderstorage \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --sku Standard_LRS \
  --encryption-services blob

# Blobコンテナの作成
az storage container create \
  --name casebender \
  --account-name casebenderstorage \
  --auth-mode key \
  --public-access off

# ストレージアカウントキーの取得
STORAGE_KEY=$(az storage account keys list \
  --account-name casebenderstorage \
  --resource-group $RESOURCE_GROUP \
  --query '[0].value' -o tsv)

# ストレージアクセス用のマネージドIDの作成
az identity create \
  --name casebender-storage-identity \
  --resource-group $RESOURCE_GROUP

# マネージドIDの取得
IDENTITY_ID=$(az identity show \
  --name casebender-storage-identity \
  --resource-group $RESOURCE_GROUP \
  --query id -o tsv)

# Storage Blob Data Contributorロールの割り当て
az role assignment create \
  --assignee-object-id $(az identity show --name casebender-storage-identity --resource-group $RESOURCE_GROUP --query principalId -o tsv) \
  --role "Storage Blob Data Contributor" \
  --scope $(az storage account show --name casebenderstorage --resource-group $RESOURCE_GROUP --query id -o tsv)
```

### Azure Database for PostgreSQLのセットアップ

```bash theme={null}
# PostgreSQLサーバーの作成
az postgres flexible-server create \
  --resource-group $RESOURCE_GROUP \
  --name casebender-db \
  --admin-user superadmin \
  --admin-password <your-secure-password> \
  --sku-name Standard_B2s \
  --storage-size 32 \
  --version 14

# データベースの作成
az postgres flexible-server db create \
  --resource-group $RESOURCE_GROUP \
  --server-name casebender-db \
  --database-name casebender
```

### Azure Cache for Redisのセットアップ

```bash theme={null}
# Redisキャッシュの作成
az redis create \
  --resource-group $RESOURCE_GROUP \
  --name casebender-redis \
  --sku Basic \
  --vm-size c0 \
  --location $LOCATION
```

## ステップ3: コンテナレジストリの作成と設定

```bash theme={null}
# Azure Container Registryの作成
az acr create \
  --resource-group $RESOURCE_GROUP \
  --name casebenderacr \
  --sku Standard \
  --admin-enabled true

# レジストリの認証情報の取得
ACR_USERNAME=$(az acr credential show --name casebenderacr --query username -o tsv)
ACR_PASSWORD=$(az acr credential show --name casebenderacr --query "passwords[0].value" -o tsv)

# CaseBenderイメージのプル
docker pull casebender/casebender:latest
docker pull casebender/workflow-processor:latest
docker pull casebender/misp-processor:latest

# ACR用のイメージのタグ付け
docker tag casebender/casebender:latest casebenderacr.azurecr.io/casebender/app:latest
docker tag casebender/workflow-processor:latest casebenderacr.azurecr.io/casebender/workflow-processor:latest
docker tag casebender/misp-processor:latest casebenderacr.azurecr.io/casebender/misp-processor:latest

# イメージをACRにプッシュ
docker push casebenderacr.azurecr.io/casebender/app:latest
docker push casebenderacr.azurecr.io/casebender/workflow-processor:latest
docker push casebenderacr.azurecr.io/casebender/misp-processor:latest
```

## ステップ4: サービスのデプロイ

### Container Apps環境の作成

```bash theme={null}
# Container Apps環境の作成
az containerapp env create \
  --name casebender-env \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION

# メインアプリケーションの作成
az containerapp create \
  --name casebender-app \
  --resource-group $RESOURCE_GROUP \
  --environment casebender-env \
  --image casebenderacr.azurecr.io/casebender/app:latest \
  --target-port 3000 \
  --ingress external \
  --registry-server casebenderacr.azurecr.io \
  --registry-username $ACR_USERNAME \
  --registry-password $ACR_PASSWORD \
  --user-assigned-identity $IDENTITY_ID \
  --env-vars \
    AUTH_SECRET=<your-auth-secret> \
    AUTH_SALT=<your-auth-salt> \
    POSTGRES_PRISMA_URL="postgresql://superadmin:<password>@casebender-db.postgres.database.azure.com:5432/casebender" \
    REDIS_URL="redis://casebender-redis.redis.cache.windows.net:6380?ssl=true&password=<redis-key>" \
    AZURE_STORAGE_ACCOUNT="casebenderstorage" \
    AZURE_STORAGE_CONTAINER="casebender" \
    AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;AccountName=casebenderstorage;AccountKey=${STORAGE_KEY};EndpointSuffix=core.windows.net"

# ワークフロープロセッサーの作成
az containerapp create \
  --name workflow-processor \
  --resource-group $RESOURCE_GROUP \
  --environment casebender-env \
  --image casebenderacr.azurecr.io/casebender/workflow-processor:latest \
  --registry-server casebenderacr.azurecr.io \
  --registry-username $ACR_USERNAME \
  --registry-password $ACR_PASSWORD \
  --min-replicas 1 \
  --max-replicas 1 \
  --env-vars \
    POSTGRES_PRISMA_URL="postgresql://superadmin:<password>@casebender-db.postgres.database.azure.com:5432/casebender" \
    REDIS_URL="redis://casebender-redis.redis.cache.windows.net:6380?ssl=true&password=<redis-key>"

# MISPプロセッサーの作成
az containerapp create \
  --name misp-processor \
  --resource-group $RESOURCE_GROUP \
  --environment casebender-env \
  --image casebenderacr.azurecr.io/casebender/misp-processor:latest \
  --registry-server casebenderacr.azurecr.io \
  --registry-username $ACR_USERNAME \
  --registry-password $ACR_PASSWORD \
  --min-replicas 1 \
  --max-replicas 1 \
  --env-vars \
    POSTGRES_PRISMA_URL="postgresql://superadmin:<password>@casebender-db.postgres.database.azure.com:5432/casebender" \
    REDIS_URL="redis://casebender-redis.redis.cache.windows.net:6380?ssl=true&password=<redis-key>"
```

## ステップ5: Azure Front Doorの設定

```bash theme={null}
# Front Doorプロファイルの作成
az afd profile create \
  --profile-name casebender-afd \
  --resource-group $RESOURCE_GROUP \
  --sku Standard_AzureFrontDoor

# エンドポイントの作成
az afd endpoint create \
  --endpoint-name casebender \
  --profile-name casebender-afd \
  --resource-group $RESOURCE_GROUP

# オリジングループの作成
az afd origin-group create \
  --origin-group-name casebender-origin-group \
  --profile-name casebender-afd \
  --resource-group $RESOURCE_GROUP \
  --probe-path "/" \
  --probe-protocol Http \
  --probe-request-type GET

# オリジンの追加
az afd origin create \
  --origin-group-name casebender-origin-group \
  --origin-name casebender-origin \
  --profile-name casebender-afd \
  --resource-group $RESOURCE_GROUP \
  --host-name <your-container-app-url> \
  --origin-host-header <your-container-app-url> \
  --priority 1 \
  --weight 1000 \
  --enabled-state Enabled
```

## ステップ6: カスタムドメインの設定（オプション）

```bash theme={null}
# Front Doorにカスタムドメインを追加
az afd custom-domain create \
  --custom-domain-name casebender-domain \
  --host-name your-domain.com \
  --profile-name casebender-afd \
  --resource-group $RESOURCE_GROUP \
  --minimum-tls-version TLS12

# HTTPSの有効化
az afd custom-domain enable-https \
  --custom-domain-name casebender-domain \
  --profile-name casebender-afd \
  --resource-group $RESOURCE_GROUP
```

## モニタリングとメンテナンス

### Application Insightsの設定

```bash theme={null}
# Application Insightsの作成
az monitor app-insights component create \
  --app casebender-insights \
  --location $LOCATION \
  --resource-group $RESOURCE_GROUP \
  --application-type web

# インストルメンテーションキーの取得
az monitor app-insights component show \
  --app casebender-insights \
  --resource-group $RESOURCE_GROUP \
  --query instrumentationKey \
  --output tsv
```

### アラートの設定

```bash theme={null}
# アクショングループの作成
az monitor action-group create \
  --name casebender-alerts \
  --resource-group $RESOURCE_GROUP \
  --action email admin email@yourdomain.com

# アラートルールの作成
az monitor metrics alert create \
  --name "high-cpu-usage" \
  --resource-group $RESOURCE_GROUP \
  --scopes <container-app-resource-id> \
  --condition "avg CPU > 80" \
  --window-size 5m \
  --evaluation-frequency 1m \
  --action <action-group-id>
```

### ログの表示

```bash theme={null}
# コンテナアプリのログの表示
az containerapp logs show \
  --name casebender-app \
  --resource-group $RESOURCE_GROUP \
  --follow
```

## スケーリング設定

```bash theme={null}
# スケーリングルールの設定
az containerapp update \
  --name casebender-app \
  --resource-group $RESOURCE_GROUP \
  --min-replicas 1 \
  --max-replicas 10 \
  --scale-rule-name http-rule \
  --scale-rule-type http \
  --scale-rule-http-concurrency 50
```

## バックアップと災害復旧

### データベースバックアップの設定

```bash theme={null}
# 自動バックアップの有効化
az postgres flexible-server update \
  --resource-group $RESOURCE_GROUP \
  --name casebender-db \
  --backup-retention 7
```

### 地理レプリケーションの設定

```bash theme={null}
# セカンダリリージョンリソースの作成
az postgres flexible-server replica create \
  --name casebender-db-secondary \
  --source-server casebender-db \
  --resource-group $RESOURCE_GROUP \
  --location westus
```

## セキュリティのベストプラクティス

1. すべてのサービスでAzure Defenderを有効化
2. Azure Private Linkの実装
3. マネージドIDの使用
4. 定期的なセキュリティ評価
5. 診断ログの有効化

## コスト最適化

1. Container Appsの消費プランを使用
2. 自動スケーリングルールの実装
3. 適切なサービスティアの選択
4. 使用パターンのモニタリング
5. Azure Reserved Instancesの使用

## 次のステップ

* Azure DevOpsでCI/CDを設定
* 包括的なモニタリングの実装
* 災害復旧の設定
* セキュリティコンプライアンスの確認
