次の方法で共有


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

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

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

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

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 Storage アカウントを作成します。

    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 環境でストレージ リンクを作成するには、ストレージ アカウント キーが必要です。 Container Apps では、Azure ファイル共有への ID ベースのアクセスはサポートされていません。

  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!" というメッセージが表示されます。 このブラウザー タブは開いたままにしておきます。 ストレージ マウントの検証手順中に 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. volumes: null セクションのtemplate定義を、ストレージ ボリュームを参照するvolumes:定義に置き換えます。 テンプレート セクションは次のようになります。

    template:
      containers:
      - image: nginx
        imageType: ContainerImage
        name: my-container-app
        resources:
          cpu: 0.5
          ephemeralStorage: 2Gi
          memory: 1Gi
        volumeMounts:
        - volumeName: my-azure-file-volume
          mountPath: /var/log/nginx
      initContainers: null
      revisionSuffix: ''
      scale:
        cooldownPeriod: 300
        maxReplicas: 1
        minReplicas: 1
        pollingInterval: 30
        rules: null
      serviceBinds: null
      terminationGracePeriodSeconds: null
      volumes:
      - name: my-azure-file-volume
        storageName: mystoragemount
        storageType: AzureFile
    

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

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

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

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

    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
    

    このコマンドは、リモート シェルを開くには少し時間がかかる場合があります。 シェルの準備ができたら、ファイル システム コマンドを使用してストレージ マウントを操作できます。 詳細については、「 Azure Container Apps でコンテナー コンソールに接続する」を参照してください。

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

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

    Web サイトに対して行われた要求により、一連のログ ストリーム エントリが作成されます。

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

    ls
    

    このフォルダーに access.log ファイルと error.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.logファイルとerror.log ファイルが表示されます。

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

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

az group delete \
  --name $RESOURCE_GROUP

次のステップ