Azure Container Apps でストレージ マウントを使用する
コンテナー アプリは、さまざまな種類のストレージにアクセスできます。 必要に応じて、1 つのアプリで複数の種類のストレージを利用できます。
ストレージの種類 | 説明 | 使用例 |
---|---|---|
コンテナー ファイル システム | 環境にスコープ設定された一時ストレージ | ローカル アプリ キャッシュを作成する。 |
一時ストレージ | 個々のレプリカにスコープ設定された一時ストレージ | レプリカ内のコンテナー間でファイルを共有する。 たとえば、メインのアプリ コンテナーは、サイドカー コンテナーによって処理されるログ ファイルを作成できます。 |
Azure Files | 永続的なストレージ | ファイル共有にファイルを書き込んで、他のシステムからデータにアクセスできるようにする。 |
注意
Azure Container Apps のボリューム マウント機能はプレビュー段階です。
コンテナー ファイル システム
コンテナーは、独自のファイル システムに書き込むことができます。
コンテナー ファイル システムのストレージには、次の特性があります。
- ストレージは一時的であり、コンテナーがシャットダウンまたは再起動されると消失します。
- このストレージに書き込まれるファイルは、現在のコンテナーで実行されているプロセスにのみ表示されます。
- 容量の保証はありません。 使用可能なストレージは、コンテナーで使用可能なディスク領域の量によって異なります。
一時ストレージ
Kubernetes で emptyDir と同等のエフェメラル ボリュームをマウントできます。 一時ストレージは、単一のレプリカにスコープ設定されています。
一時ストレージには、次の特性があります。
- ファイルはレプリカの有効期間中保持されます。
- レプリカ内のコンテナーが再起動された場合、ボリューム内のファイルはそのまま残されます。
- レプリカ内のすべてのコンテナーは、同じボリュームをマウントできます。
- コンテナーは、複数の一時ボリュームをマウントできます。
- 容量の保証はありません。 使用可能なストレージは、レプリカで使用可能なディスク領域の量によって異なります。
一時ストレージを構成するには、まずリビジョンで EmptyDir
ボリュームを定義します。 次に、リビジョン内の 1 つ以上のコンテナーでボリューム マウントを定義します。
前提条件
要件 | 手順 |
---|---|
Azure アカウント | お持ちでない場合は、無料のアカウントを作成してください。 |
Azure Container Apps 環境 | コンテナー アプリ環境を作成します。 |
構成
一時ストレージを使用する場合は、Azure CLI を YAML 定義とともに使用して、コンテナー アプリを作成または更新する必要があります。
一時ストレージを使用するように既存のコンテナー アプリを更新するには、app.yaml という名前の YAML ファイルにアプリの仕様をエクスポートします。
az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
コンテナー アプリの仕様に次の変更を加えます。
- コンテナー アプリ定義の
template
セクションにvolumes
配列を追加して、ボリュームを定義します。name
はボリュームの識別子です。EmptyDir
をstorageType
として使用します。
- 一時ストレージをマウントするテンプレート内のコンテナーごとに、
volumeMounts
配列をコンテナー定義に追加し、ボリューム マウントを定義します。volumeName
は、volumes
配列で定義されている名前です。mountPath
は、ボリュームをマウントするコンテナー内のパスです。
properties: managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME> configuration: activeRevisionsMode: Single template: containers: - image: <IMAGE_NAME> name: my-container volumeMounts: - mountPath: /myempty volumeName: myempty volumes: - name: myempty storageType: EmptyDir
- コンテナー アプリ定義の
YAML ファイルを使用して、コンテナー アプリを更新します。
az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \ --yaml app.yaml
一時ボリュームを作成してコンテナーにマウントするには、ARM テンプレートのコンテナー アプリ リソースに次の変更を加えます。
- コンテナー アプリ定義の
template
セクションにvolumes
配列を追加して、ボリュームを定義します。name
はボリュームの識別子です。EmptyDir
をstorageType
として使用します。
- 一時ストレージをマウントするテンプレート内のコンテナーごとに、
volumeMounts
配列をコンテナー定義に追加し、ボリューム マウントを定義します。volumeName
は、volumes
配列で定義されている名前です。mountPath
は、ボリュームをマウントするコンテナー内のパスです。
ARM テンプレート スニペットの例:
{
"apiVersion": "2022-03-01",
"type": "Microsoft.App/containerApps",
"name": "[parameters('containerappName')]",
"location": "[parameters('location')]",
"properties": {
...
"template": {
"revisionSuffix": "myrevision",
"containers": [
{
"name": "main",
"image": "[parameters('container_image')]",
"resources": {
"cpu": 0.5,
"memory": "1Gi"
},
"volumeMounts": [
{
"mountPath": "/myempty",
"volumeName": "myempty"
}
]
}
],
"scale": {
"minReplicas": 1,
"maxReplicas": 3
},
"volumes": [
{
"name": "myempty",
"storageType": "EmptyDir"
}
]
}
}
}
完全な例については、ARM テンプレートの API 仕様に関する記事を参照してください。
Azure Files
コンテナー内のボリュームとして Azure Files から共有ファイルをマウントできます。
Azure Files ストレージには、次の特性があります。
- マウント場所の下に書き込まれたファイルは、ファイル共有に永続化されます。
- 共有内のファイルは、マウントの場所から使用できます。
- 複数のコンテナーで同じファイル共有をマウントできます。これには、別のレプリカ、リビジョン、またはコンテナー アプリにあるものも含まれます。
- 共有をマウントするすべてのコンテナーは、他のコンテナーまたはメソッドによって書き込まれたファイルにアクセスできます。
- 1 つのコンテナーに複数のAzure Files ボリュームをマウントできます。
コンテナー内で Azure Filesストレージを有効にするには、次の方法でコンテナーを設定する必要があります。
- Container Apps 環境で種類
AzureFile
のストレージ定義を作成します。 - リビジョン内のストレージ ボリュームを定義します。
- リビジョン内の 1 つ以上のコンテナーでボリューム マウントを定義します。
前提条件
要件 | 手順 |
---|---|
Azure アカウント | お持ちでない場合は、無料のアカウントを作成してください。 |
Azure ストレージ アカウント | ストレージ アカウントの作成。 |
Azure Container Apps 環境 | コンテナー アプリ環境を作成します。 |
構成
Azure Files を使用する場合は、Azure CLI を YAML 定義とともに使用して、コンテナー アプリを作成または更新する必要があります。
Container Apps 環境に種類
AzureFile
のストレージ定義を追加します。az containerapp env storage set --name my-env --resource-group my-group \ --storage-name mystorage \ --azure-file-account-name <STORAGE_ACCOUNT_NAME> \ --azure-file-account-key <STORAGE_ACCOUNT_KEY> \ --azure-file-share-name <STORAGE_SHARE_NAME> \ --access-mode ReadWrite
<STORAGE_ACCOUNT_NAME>
と<STORAGE_ACCOUNT_KEY>
を、ストレージ アカウントの名前とキーに置き換えます。<STORAGE_SHARE_NAME>
を、ストレージ アカウント内のファイル共有の名前に置き換えます。--access-mode
の有効な値は、ReadWrite
とReadOnly
です。ファイル共有をマウントするように既存のコンテナー アプリを更新するには、app.yaml という名前の YAML ファイルにアプリの仕様をエクスポートします。
az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
コンテナー アプリの仕様に次の変更を加えます。
- コンテナー アプリ定義の
template
セクションにvolumes
配列を追加して、ボリュームを定義します。name
はボリュームの識別子です。storageType
ではAzureFile
を使用します。storageName
では、環境内で定義したストレージの名前を使用します。
- Azure Files ストレージをマウントするテンプレート内のコンテナーごとに、
volumeMounts
配列をコンテナー定義に追加し、ボリューム マウントを定義します。volumeName
は、volumes
配列で定義されている名前です。mountPath
は、ボリュームをマウントするコンテナー内のパスです。
properties: managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME> configuration: template: containers: - image: <IMAGE_NAME> name: my-container volumeMounts: - volumeName: azure-files-volume mountPath: /my-files volumes: - name: azure-files-volume storageType: AzureFile storageName: mystorage
- コンテナー アプリ定義の
YAML ファイルを使用して、コンテナー アプリを更新します。
az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \ --yaml my-app.yaml
次の ARM テンプレート スニペットは、Container Apps 環境に Azure Files 共有を追加して、コンテナー アプリで使用する方法を示しています。
storages
子リソースを Container Apps 環境に追加します。{ "type": "Microsoft.App/managedEnvironments", "apiVersion": "2022-03-01", "name": "[parameters('environment_name')]", "location": "[parameters('location')]", "properties": { "daprAIInstrumentationKey": "[parameters('dapr_ai_instrumentation_key')]", "appLogsConfiguration": { "destination": "log-analytics", "logAnalyticsConfiguration": { "customerId": "[parameters('log_analytics_customer_id')]", "sharedKey": "[parameters('log_analytics_shared_key')]" } } }, "resources": [ { "type": "storages", "name": "myazurefiles", "apiVersion": "2022-03-01", "dependsOn": [ "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]" ], "properties": { "azureFile": { "accountName": "[parameters('storage_account_name')]", "accountKey": "[parameters('storage_account_key')]", "shareName": "[parameters('storage_share_name')]", "accessMode": "ReadWrite" } } } ] }
コンテナー アプリ リソースを更新して、ボリュームとボリューム マウントを追加します。
{ "apiVersion": "2022-03-01", "type": "Microsoft.App/containerApps", "name": "[parameters('containerappName')]", "location": "[parameters('location')]", "properties": { ... "template": { "revisionSuffix": "myrevision", "containers": [ { "name": "main", "image": "[parameters('container_image')]", "resources": { "cpu": 0.5, "memory": "1Gi" }, "volumeMounts": [ { "mountPath": "/myfiles", "volumeName": "azure-files-volume" } ] } ], "scale": { "minReplicas": 1, "maxReplicas": 3 }, "volumes": [ { "name": "azure-files-volume", "storageType": "AzureFile", "storageName": "myazurefiles" } ] } } }
- コンテナー アプリ定義の
template
セクションにvolumes
配列を追加して、ボリュームを定義します。name
はボリュームの識別子です。storageType
ではAzureFile
を使用します。storageName
では、環境内で定義したストレージの名前を使用します。
- Azure Files ストレージをマウントするテンプレート内のコンテナーごとに、
volumeMounts
配列をコンテナー定義に追加し、ボリューム マウントを定義します。volumeName
は、volumes
配列で定義されている名前です。mountPath
は、ボリュームをマウントするコンテナー内のパスです。
- コンテナー アプリ定義の
完全な例については、ARM テンプレートの API 仕様に関する記事を参照してください。