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 拡張機能が最新であることを確認します。
Azure CLI にサインインします。
az login
さまざまなコマンドで使用される環境変数を設定します。
RESOURCE_GROUP="my-container-apps-group" ENVIRONMENT_NAME="my-storage-environment" LOCATION="canadacentral"
最新バージョンの Container Apps Azure CLI 拡張機能があることを確認します。
az extension add -n containerapp --upgrade
Microsoft.App
名前空間を登録します。az provider register --namespace Microsoft.App
Azure Monitor Log Analytics ワークスペースの
Microsoft.OperationalInsights
プロバイダーを登録します (まだ使用していない場合)。az provider register --namespace Microsoft.OperationalInsights
環境を作成する
次の手順では、リソース グループと Container Apps 環境を作成します。
リソース グループを作成する。
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION \ --query "properties.provisioningState"
作成されると、コマンドは "Succeeded" メッセージを返します。
このチュートリアルの最後に、リソース グループを削除して、この記事で作成したすべてのサービスを削除できます。
Container Apps 環境を作成します。
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location "$LOCATION" \ --query "properties.provisioningState"
作成されると、コマンドは "Succeeded" メッセージを返します。
ストレージ マウントは Container Apps 環境に関連付けられ、個々のコンテナー アプリ内で構成されます。
ストレージ アカウントを設定する
次に、ストレージ アカウントを作成し、コンテナー アプリにマウントするファイル共有を確立します。
ストレージ アカウント名を定義します。
このコマンドは、一意性を確保するために、ストレージ アカウント名にランダムなサフィックスを生成します。
STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
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" メッセージを返します。
ファイル共有名を定義します。
STORAGE_SHARE_NAME="myfileshare"
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
ストレージ アカウント キーを取得します。
STORAGE_ACCOUNT_KEY=`az storage account keys list -n $STORAGE_ACCOUNT_NAME --query "[0].value" -o tsv`
Container Apps 環境でストレージ リンクを作成するには、ストレージ アカウント キーが必要です。 Container Apps では、Azure ファイル共有への ID ベースのアクセスはサポートされていません。
ストレージ マウント名を定義します。
STORAGE_MOUNT_NAME="mystoragemount"
この値は、Container Apps 環境から Azure Storage アカウントへのストレージ マウント リンクの定義に使用される名前です。
ストレージ マウントを作成する
これで、ストレージ マウントをサポートするようにコンテナー アプリの構成を更新できます。
環境にストレージ リンクを作成します。
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
コマンドで作成されたファイル共有の間にリンクを作成します。ストレージ アカウントと環境がリンクされたので、ストレージ マウントを使用するコンテナー アプリを作成できます。
コンテナー アプリ名を定義します。
CONTAINER_APP_NAME="my-container-app"
コンテナー アプリを作成します。
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 を表示します。
URL をコピーし、Web ブラウザーに貼り付けて Web サイトに移動します。
ページが読み込まれると、"Welcome to nginx!" というメッセージが表示されます。 このブラウザー タブは開いたままにしておきます。 ストレージ マウントの検証手順中に Web サイトに戻ります。
コンテナー アプリが構成されていることを確認したので、ストレージ マウント定義を使用してアプリを更新できます。
コンテナー アプリの構成をエクスポートします。
az containerapp show \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --output yaml > app.yaml
注
このアプリケーションにはシークレットはありませんが、多くのアプリで機能シークレットが行われます。 既定では、アプリの構成をエクスポートする場合、シークレットの値は生成された YAML には含まれません。
シークレットの値を変更する必要がない場合は、
secrets
セクションを削除しても、シークレットは変更されません。 または、シークレットの値を変更する必要がある場合は、アプリの更新を試みる前に、ファイル内のすべてのシークレットに対してname
とvalue
の両方を指定してください。secrets
セクションからシークレットを省略すると、シークレットが削除されます。コード エディターで app.yaml を開きます。
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
セクションを介して参照できる、アプリ レベルでボリュームを定義します。volumeMounts
セクションのnginx
コンテナーにcontainers
セクションを追加します。containers: - image: nginx name: my-container-app volumeMounts: - volumeName: my-azure-file-volume mountPath: /var/log/nginx
新しい
volumeMounts
セクションには、次のプロパティが含まれています。プロパティ 説明 volumeName
この値は、 volumes
定義で定義されている名前と一致する必要があります。mountPath
この値は、ストレージがマウントされているコンテナー内のパスを定義します。 新しいストレージ マウント構成でコンテナー アプリを更新します。
az containerapp update \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --yaml app.yaml \ --output table
ストレージ マウントを確認する
ストレージ マウントが確立されたので、コンテナーから Azure Storage 内のファイルを操作できます。 次のコマンドを使用して、作業中のストレージ マウントを確認します。
コンテナー アプリ内で対話型シェルを開き、実行中のコンテナー内でコマンドを実行します。
az containerapp exec \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP
このコマンドは、リモート シェルを開くには少し時間がかかる場合があります。 シェルの準備ができたら、ファイル システム コマンドを使用してストレージ マウントを操作できます。 詳細については、「 Azure Container Apps でコンテナー コンソールに接続する」を参照してください。
nginx /var/log/nginx フォルダーに移動します。
cd /var/log/nginx
ブラウザーに戻り、Web サイトに移動し、ページを数回更新します。
Web サイトに対して行われた要求により、一連のログ ストリーム エントリが作成されます。
ターミナルに戻り、
/var/log/nginx
フォルダーの値を一覧表示します。ls
このフォルダーに access.log ファイルと error.log ファイルがどのように表示されるかに注意してください。 これらのファイルは、前の手順で作成した Azure Storage 共有の Azure Files マウントに書き込まれます。
access.log ファイルの内容を表示します。
cat access.log
コンテナーの対話型シェルから終了して、ローカル ターミナル セッションに戻ります。
exit
これで、Azure portal でファイルを表示して、Azure Storage アカウントにファイルが存在することを確認できます。 ランダムに生成されたストレージ アカウントの名前を出力します。
echo $STORAGE_ACCOUNT_NAME
Azure portal に移動し、この手順で作成したストレージ アカウントを開きます。
[ データ ストレージ ] で [ ファイル共有] を選択します。
[myshare] を選択すると、access.logファイルとerror.log ファイルが表示されます。
リソースをクリーンアップする
このアプリケーションを引き続き使用しない場合は、次のコマンドを実行して、この記事で作成したすべてのリソースと共にリソース グループを削除します。
az group delete \
--name $RESOURCE_GROUP