チュートリアル: Azure Container Apps で Azure Files ボリューム マウントを作成する

Azure Files ストレージ マウントを使ってコンテナー アプリに永続的なストレージに書き込む方法について説明します。 ストレージ マウントの詳細については、「Azure Container Apps でのストレージ マウントの使用」を参照してください。

このチュートリアルでは、以下の内容を学習します。

  • Container Apps 環境を作成する
  • Azure Storage アカウントの作成
  • ストレージ アカウントでファイル共有を定義する
  • 環境をストレージ ファイル共有にリンクする
  • 個々のコンテナーでストレージ共有をマウントする
  • Web サイトのアクセス ログを表示してストレージのマウントを確認する

Note

Azure Container Apps では、SMB および NFS プロトコルを使用したファイル共有のマウントがサポートされています。 このチュートリアルでは、SMB プロトコルを使用して Azure Files 共有をマウントする方法を示します。 NFS 共有のマウントの詳細については、「Azure Container Apps でのストレージ マウントの使用」を参照してください。

前提条件

  • 最新バージョンの Azure CLI をインストールします。

環境をセットアップする

次のコマンドは、変数を定義し、Container Apps 拡張機能が最新であることを確認するのに役立ちます。

  1. Azure CLI にサインインします。

    az login
    
  2. 今後のさまざまなコマンドで使う環境変数を設定します。

    RESOURCE_GROUP="my-container-apps-group"
    ENVIRONMENT_NAME="my-storage-environment"
    LOCATION="canadacentral"
    
  3. Container Apps Azure CLI 拡張機能の最新バージョンがインストールされていることを確認します。

    az extension add -n containerapp --upgrade
    
  4. Microsoft.App 名前空間を登録します。

    az provider register --namespace Microsoft.App
    
  5. 以前に使ったことがない場合は、Azure Monitor Log Analytics ワークスペース用の Microsoft.OperationalInsights プロバイダーを登録します。

    az provider register --namespace Microsoft.OperationalInsights
    

環境の作成

次の手順では、リソース グループと Container Apps 環境を作成します。

  1. リソース グループを作成する。

    az group create \
      --name $RESOURCE_GROUP \
      --location $LOCATION \
      --query "properties.provisioningState"
    

    作成されると、コマンドから "Succeeded" メッセージが返されます。

    このチュートリアルを完了したら、このリソース グループを削除することで、この記事で作成したすべてのサービスを削除することができます。

  2. Container Apps 環境を作成します。

    az containerapp env create \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --location "$LOCATION" \
      --query "properties.provisioningState"
    

    作成されると、コマンドから "Succeeded" メッセージが返されます。

    ストレージ マウントは、Container Apps 環境に関連付けられ、個々のコンテナー アプリ内で構成されます。

ストレージ アカウントを設定する

次に、ストレージ アカウントを作成し、コンテナー アプリにマウントするファイル共有を確立します。

  1. ストレージ アカウント名を定義します。

    このコマンドを使うと、ストレージ アカウント名にランダムなサフィックスを生成して、一意性を確保することができます。

    STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
    
  2. Azure ストレージ アカウントを作成します。

    az storage account create \
      --resource-group $RESOURCE_GROUP \
      --name $STORAGE_ACCOUNT_NAME \
      --location "$LOCATION" \
      --kind StorageV2 \
      --sku Standard_LRS \
      --enable-large-file-share \
      --query provisioningState
    

    作成されると、コマンドから "Succeeded" メッセージが返されます。

  3. ファイル共有名を定義します。

    STORAGE_SHARE_NAME="myfileshare"
    
  4. Azure Storage ファイル共有を作成します。

    az storage share-rm create \
      --resource-group $RESOURCE_GROUP \
      --storage-account $STORAGE_ACCOUNT_NAME \
      --name $STORAGE_SHARE_NAME \
      --quota 1024 \
      --enabled-protocols SMB \
      --output table
    
  5. ストレージ アカウント キーを取得します。

    STORAGE_ACCOUNT_KEY=`az storage account keys list -n $STORAGE_ACCOUNT_NAME --query "[0].value" -o tsv`
    

    ストレージ アカウント キーは、Container Apps 環境でストレージ リンクを作成するために必要です。

  6. ストレージ マウント名を定義します。

    STORAGE_MOUNT_NAME="mystoragemount"
    

    この値は、Container Apps 環境から Azure Storage アカウントへのストレージ マウント リンクを定義するために使われる名前です。

ストレージ マウントを作成する

これで、コンテナー アプリの構成を更新し、ストレージ マウントをサポートできるようになりました。

  1. 環境内にストレージ リンクを作成します。

    az containerapp env storage set \
      --access-mode ReadWrite \
      --azure-file-account-name $STORAGE_ACCOUNT_NAME \
      --azure-file-account-key $STORAGE_ACCOUNT_KEY \
      --azure-file-share-name $STORAGE_SHARE_NAME \
      --storage-name $STORAGE_MOUNT_NAME \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --output table
    

    このコマンドを使って、コンテナー アプリ環境と、az storage share-rm コマンドを使って作成したファイル共有の間にリンクを作成します。

    これでストレージ アカウントと環境がリンクされたので、ストレージ マウントを使うコンテナー アプリを作成できます。

  2. コンテナー アプリ名を定義します。

    CONTAINER_APP_NAME="my-container-app"
    
  3. コンテナー アプリを作成します。

    az containerapp create \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --environment $ENVIRONMENT_NAME \
      --image nginx \
      --min-replicas 1 \
      --max-replicas 1 \
      --target-port 80 \
      --ingress external \
      --query properties.configuration.ingress.fqdn
    

    このコマンドを使って、新しいコンテナー アプリの URL を表示します。

  4. URL をコピーして Web ブラウザーに貼り付け、Web サイトに移動します。

    ページが読み込まれると、"Welcome to nginx!" (nginx へようこそ) というメッセージが表示されます。 このブラウザー タブは開いたままにしておきます。 ストレージ マウントの確認手順中に、この Web サイトに戻ります。

    コンテナー アプリが構成されていることが確認したら、ストレージ マウント定義を使ってアプリを更新できます。

  5. コンテナー アプリの構成をエクスポートします。

    az containerapp show \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --output yaml > app.yaml
    

    注意

    このアプリケーションにはシークレットはありませんが、多くのアプリケーションにはシークレット機能があります。 既定では、アプリの構成をエクスポートした場合、生成される YAML にシークレットの値は含まれません。

    シークレット値を変更する必要がない場合、secrets セクションを削除して、シークレットを変更しないことができます。 または、シークレットの値を変更する必要がある場合は、アプリを更新する前に、必ずファイル内のすべてのシークレットに対して namevalue の両方を指定します。 secrets セクションからシークレットを省略すると、シークレットは削除されます。

  6. コード エディターで app.yaml を開きます。

  7. template セクションの volumes: null 定義を、ストレージ ボリュームを参照する volumes: 定義に置き換えます。 template セクションは次のようになります。

    template:
      volumes:
      - name: my-azure-file-volume
        storageName: mystoragemount
        storageType: AzureFile
      containers:
      - image: nginx
        name: my-container-app
        volumeMounts:
        - volumeName: my-azure-file-volume
          mountPath: /var/log/nginx
        resources:
          cpu: 0.5
          ephemeralStorage: 3Gi
          memory: 1Gi
      initContainers: null
      revisionSuffix: ''
      scale:
        maxReplicas: 1
        minReplicas: 1
        rules: null
    

    この新しい template.volumes セクションには以下のプロパティが含まれています。

    プロパティ 説明
    name この値は、az containerapp env storage set コマンドを呼び出して作成されたボリュームと一致します。
    storageName この値を使って、環境内のコンテナーがストレージ ボリュームにアクセスするために使う名前を定義します。
    storageType この値によって、環境に定義されたストレージ ボリュームの種類が決まります。 この場合、Azure Files マウントが宣言されています。

    volumes セクションには、アプリケーション レベルのボリュームを定義します。これには、コンテナーに関連付けられた volumeMounts セクションを介してアプリケーション コンテナーまたはサイドカー コンテナーから参照できます。

  8. containers セクションの nginx コンテナーに volumeMounts セクションを追加します。

    containers:
      - image: nginx
        name: my-container-app
        volumeMounts:
        - volumeName: my-azure-file-volume
          mountPath: /var/log/nginx
    

    この新しい volumeMounts セクションには以下のプロパティが含まれています。

    プロパティ 説明
    volumeName この値は、volumes 定義に定義されている名前と一致する必要があります。
    mountPath この値を使って、ストレージをマウントするコンテナー内のパスを定義します。
  9. 新しいストレージ マウント構成を使ってコンテナー アプリを更新します。

    az containerapp update \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --yaml app.yaml \
      --output table
    

ストレージ マウントを確認する

ストレージ マウントが確立すると、コンテナーから Azure Storage 内のファイルを操作できるようになります。 次のコマンドを使って、稼働しているストレージ マウントを観察します。

  1. コンテナー アプリ内で対話型シェルを開き、稼働しているコンテナー内でコマンドを実行します。

    az containerapp exec \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP
    

    このコマンドでリモート シェルを開く場合、時間がかかることがあります。 シェルの準備ができたら、ファイル システム コマンドを使ってストレージ マウントを操作できます。

  2. nginx /var/log/nginx フォルダーに移動します。

    cd /var/log/nginx
    
  3. ブラウザーに戻り、Web サイトに移動して、ページを数回更新します。

    Web サイトに対するこれらの要求によって、一連のログ ストリーム エントリが作成されます。

  4. ターミナルに戻り、/var/log/nginx フォルダーの値を一覧表示します。

    このフォルダー内の access.logerror.log ファイルがどのように表示されるかに注目してください。 これらのファイルは、先ほどの手順で作成した Azure Storage 共有内の Azure Files マウントに書き込まれます。

  5. access.log ファイルの内容を確認します。

    cat access.log
    
  6. コンテナーの対話型シェルを終了し、ローカル ターミナル セッションに戻ります。

    exit
    
  7. これで、Azure portal でファイルを表示し、Azure Storage アカウント内に存在することを確認できます。 ランダムに生成されたストレージ アカウントの名前を出力します。

    echo $STORAGE_ACCOUNT_NAME
    
  8. Azure portal に移動し、この手順で作成したストレージ アカウントを開きます。

  9. [データ ストレージ][ファイル共有] を選びます。

  10. myshare を選び、access.logerror.log ファイルを表示します。

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

このアプリケーションの使用を継続しない場合は、次のコマンドを実行して、この記事で作成したすべてのリソースと共にリソース グループを削除します。

az group delete \
  --name $RESOURCE_GROUP

次の手順