Azure Container Instances に Azure ファイル共有をマウントする

完了

既定では、Azure Container Instances はステートレスです。 コンテナーがクラッシュまたは停止すると、すべての状態が失われます。 コンテナーの有効期間後も状態を保持するには、外部ストアからボリュームをマウントする必要があります。 このユニットで示すように、Azure Container Instances では、Azure Files を使って作成した Azure ファイル共有をマウントできます。 Azure Files はクラウドで、業界標準のサーバー メッセージ ブロック (SMB) プロトコルを介してアクセスできる、フル マネージドのファイル共有を提供します。 Azure Container Instances で Azure ファイル共有を使用することで、 Azure 仮想マシンで Azure ファイル共有を使用するのと同様のファイル共有機能を提供します。

制限事項

  • Azure Files 共有は、Linux コンテナーにのみマウントできます。
  • Azure ファイル共有ボリュームのマウントでは、Linux コンテナーを "ルート" として実行する必要があります。
  • Azure ファイル共有ボリュームのマウントは、CIFS サポートに限定されています。

コンテナーのデプロイとボリュームのマウント

Azure CLI を使って Azure ファイル共有をコンテナーのボリュームとしてマウントするには、az container create でコンテナーを作成するときに共有とボリューム マウント ポイントを指定します。 コマンドの例を次に示します。

az container create \
    --resource-group $ACI_PERS_RESOURCE_GROUP \
    --name hellofiles \
    --image mcr.microsoft.com/azuredocs/aci-hellofiles \
    --dns-name-label aci-demo \
    --ports 80 \
    --azure-file-volume-account-name $ACI_PERS_STORAGE_ACCOUNT_NAME \
    --azure-file-volume-account-key $STORAGE_KEY \
    --azure-file-volume-share-name $ACI_PERS_SHARE_NAME \
    --azure-file-volume-mount-path /aci/logs/

--dns-name-label 値は、コンテナー インスタンスを作成する Azure リージョン内で一意である必要があります。 コマンドを実行したときに DNS 名ラベルのエラー メッセージが表示された場合は、前述のコマンドの値を更新してください。

コンテナーのデプロイとボリュームのマウント - YAML

Azure CLI と YAML テンプレートを使用して、コンテナー グループをデプロイしてコンテナー内にボリュームをマウントすることもできます。 複数のコンテナーから成るコンテナー グループをデプロイするときは、YAML テンプレートによるデプロイ方法が推奨されます。

以下の YAML テンプレートは、aci-hellofiles イメージで作成されたコンテナーを 1 つ含むコンテナー グループを定義しています。 コンテナーでは、以前にボリュームとして作成された Azure ファイル共有 acishare がマウントされます。 YAML ファイルの例を次に示します。

apiVersion: '2019-12-01'
location: eastus
name: file-share-demo
properties:
  containers:
  - name: hellofiles
    properties:
      environmentVariables: []
      image: mcr.microsoft.com/azuredocs/aci-hellofiles
      ports:
      - port: 80
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
      volumeMounts:
      - mountPath: /aci/logs/
        name: filesharevolume
  osType: Linux
  restartPolicy: Always
  ipAddress:
    type: Public
    ports:
      - port: 80
    dnsNameLabel: aci-demo
  volumes:
  - name: filesharevolume
    azureFile:
      sharename: acishare
      storageAccountName: <Storage account name>
      storageAccountKey: <Storage account key>
tags: {}
type: Microsoft.ContainerInstance/containerGroups

複数ボリュームのマウント

コンテナー インスタンスに複数のボリュームをマウントするには、Azure Resource Manager テンプレートまたは YAML ファイルを使用してデプロイを行う必要があります。 テンプレートまたは YAML ファイルを使用するには、テンプレートの properties セクションで volumes 配列を設定することにより、共有の詳細を指定し、ボリュームを定義します。

たとえば、share1 および share2 という 2 つの Azure Files 共有をストレージ アカウント myStorageAccount に作成した場合、Resource Manager テンプレート内の volumes 配列は次のようになります。

"volumes": [{
  "name": "myvolume1",
  "azureFile": {
    "shareName": "share1",
    "storageAccountName": "myStorageAccount",
    "storageAccountKey": "<storage-account-key>"
  }
},
{
  "name": "myvolume2",
  "azureFile": {
    "shareName": "share2",
    "storageAccountName": "myStorageAccount",
    "storageAccountKey": "<storage-account-key>"
  }
}]

次に、ボリュームをマウントするコンテナー グループ内の各コンテナーに対して、コンテナー定義の properties セクションで volumeMounts 配列を設定します。 たとえば、以下は、前に定義した 2 つのボリューム myvolume1myvolume2 をマウントします。

"volumeMounts": [{
  "name": "myvolume1",
  "mountPath": "/mnt/share1/"
},
{
  "name": "myvolume2",
  "mountPath": "/mnt/share2/"
}]