Esecuzione del montaggio di una condivisione file di Azure con Istanze di contenitore di AzureMount an Azure file share with Azure Container Instances

Per impostazione predefinita, Istanze di contenitore di Azure è senza stato.By default, Azure Container Instances are stateless. Se il contenitore si blocca o si arresta, lo stato viene perso.If the container crashes or stops, all of its state is lost. Per rendere persistente lo stato oltre la durata del contenitore, è necessario montare un volume da un archivio esterno.To persist state beyond the lifetime of the container, you must mount a volume from an external store. Questo articolo illustra come montare una condivisione file di Azure per l'uso con Istanze di contenitore di Azure.This article shows how to mount an Azure file share for use with Azure Container Instances.

Creare una condivisione file di AzureCreate an Azure file share

Prima di usare una condivisione file di Azure con Istanze di contenitore di Azure è necessario creare la condivisione.Before using an Azure file share with Azure Container Instances, you must create it. Eseguire questo script per creare un account di archiviazione per ospitare la condivisione file e la condivisione in sé.Run the following script to create a storage account to host the file share and the share itself. Il nome dell'account di archiviazione deve essere globalmente univoco, quindi lo script aggiunge un valore casuale alla stringa di base.The storage account name must be globally unique, so the script adds a random value to the base string.

# Change these four parameters
ACI_PERS_STORAGE_ACCOUNT_NAME=mystorageaccount$RANDOM
ACI_PERS_RESOURCE_GROUP=myResourceGroup
ACI_PERS_LOCATION=eastus
ACI_PERS_SHARE_NAME=acishare

# Create the storage account with the parameters
az storage account create -n $ACI_PERS_STORAGE_ACCOUNT_NAME -g $ACI_PERS_RESOURCE_GROUP -l $ACI_PERS_LOCATION --sku Standard_LRS

# Export the connection string as an environment variable, this is used when creating the Azure file share
export AZURE_STORAGE_CONNECTION_STRING=`az storage account show-connection-string -n $ACI_PERS_STORAGE_ACCOUNT_NAME -g $ACI_PERS_RESOURCE_GROUP -o tsv`

# Create the share
az storage share create -n $ACI_PERS_SHARE_NAME

Acquisire i dettagli di accesso dell'account di archiviazioneAcquire storage account access details

Per montare una condivisione file di Azure come volume in Istanze di contenitore di Azure sono necessari tre valori: il nome dell'account di archiviazione, il nome della condivisione e la chiave di accesso alle risorse di archiviazione.To mount an Azure file share as a volume in Azure Container Instances, you need three values: the storage account name, the share name, and the storage access key.

Se si usa lo script precedente, il nome dell'account di archiviazione viene creato con un valore casuale alla fine.If you used the script above, the storage account name was created with a random value at the end. Per eseguire una query sulla stringa finale (inclusa la parte casuale), usare i comandi seguenti:To query the final string (including the random portion), use the following commands:

STORAGE_ACCOUNT=$(az storage account list --resource-group $ACI_PERS_RESOURCE_GROUP --query "[?contains(name,'$ACI_PERS_STORAGE_ACCOUNT_NAME')].[name]" -o tsv)
echo $STORAGE_ACCOUNT

Il nome della condivisione è già noto (acishare nello script precedente), quindi resta da trovare solo la chiave dell'account di archiviazione, che può essere recuperata tramite il comando seguente:The share name is already known (it is acishare in the script above), so all that remains is the storage account key, which can be found using the following command:

STORAGE_KEY=$(az storage account keys list --resource-group $ACI_PERS_RESOURCE_GROUP --account-name $STORAGE_ACCOUNT --query "[0].value" -o tsv)
echo $STORAGE_KEY

Archiviare i dettagli di accesso dell'account di archiviazione con Azure Key VaultStore storage account access details with Azure Key Vault

Le chiavi dell'account di archiviazione proteggono l'accesso ai dati, quindi è consigliabile archiviarle in Azure Key Vault.Storage account keys protect access to your data, so we recommend storing them in an Azure key vault.

Creare un insieme di credenziali delle chiavi con l'interfaccia della riga di comando di Azure:Create a key vault with the Azure CLI:

KEYVAULT_NAME=aci-keyvault
az keyvault create -n $KEYVAULT_NAME --enabled-for-template-deployment -g $ACI_PERS_RESOURCE_GROUP

L'opzione enabled-for-template-deployment consente ad Azure Resource Manager di eseguire il pull dei segreti dall'insieme di credenziali delle chiavi al momento della distribuzione.The enabled-for-template-deployment switch allows Azure Resource Manager to pull secrets from your key vault at deployment time.

Archiviare la chiave dell'account di archiviazione come nuovo segreto nell'insieme di credenziali delle chiavi:Store the storage account key as a new secret in the key vault:

KEYVAULT_SECRET_NAME=azurefilesstoragekey
az keyvault secret set --vault-name $KEYVAULT_NAME --name $KEYVAULT_SECRET_NAME --value $STORAGE_KEY

Montare il volumeMount the volume

Il montaggio di una condivisione file di Azure come volume in un contenitore prevede due fasi.Mounting an Azure file share as a volume in a container is a two-step process. Si forniscono prima i dettagli della condivisione nell'ambito della definizione del gruppo di contenitori, quindi si specifica come montare il volume in uno o più contenitori del gruppo.First, you provide the details of the share as part of defining the container group, then you specify how you want the volume mounted within one or more of the containers in the group.

Per definire i volumi da rendere disponibili per il montaggio, aggiungere una matrice volumes alla definizione del gruppo di contenitori nel modello di Azure Resource Manager, quindi farvi riferimento nella definizione dei singoli contenitori.To define the volumes you want to make available for mounting, add a volumes array to the container group definition in the Azure Resource Manager template, then reference them in the definition of the individual containers.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageaccountname": {
      "type": "string"
    },
    "storageaccountkey": {
      "type": "securestring"
    }
  },
  "resources":[{
    "name": "hellofiles",
    "type": "Microsoft.ContainerInstance/containerGroups",
    "apiVersion": "2017-08-01-preview",
    "location": "[resourceGroup().location]",
    "properties": {
      "containers": [{
        "name": "hellofiles",
        "properties": {
          "image": "seanmckenna/aci-hellofiles",
          "resources": {
            "requests": {
              "cpu": 1,
              "memoryInGb": 1.5
            }
          },
          "ports": [{
            "port": 80
          }],
          "volumeMounts": [{
            "name": "myvolume",
            "mountPath": "/aci/logs/"
          }]
        }
      }],
      "osType": "Linux",
      "ipAddress": {
        "type": "Public",
        "ports": [{
          "protocol": "tcp",
          "port": "80"
        }]
      },
      "volumes": [{
        "name": "myvolume",
        "azureFile": {
          "shareName": "acishare",
          "storageAccountName": "[parameters('storageaccountname')]",
          "storageAccountKey": "[parameters('storageaccountkey')]"
        }
      }]
    }
  }]
}

Il modello include il nome dell'account di archiviazione e la chiave come parametri che possono essere forniti in un file di parametri separati.The template includes the storage account name and key as parameters, which can be provided in a separate parameters file. Per popolare il file dei parametri sono necessari tre valori: nome dell'account di archiviazione, ID risorsa di Azure Key Vault e nome del segreto dell'insieme di credenziali delle chiavi usato per archiviare la chiave di archiviazione.To populate the parameters file, you need three values: the storage account name, the resource ID of your Azure key vault, and the key vault secret name that you used to store the storage key. Se è stata seguita la procedura precedente, è possibile ottenere i valori con questo script:If you have followed the previous steps, you can get these values with the following script:

echo $STORAGE_ACCOUNT
echo $KEYVAULT_SECRET_NAME
az keyvault show --name $KEYVAULT_NAME --query [id] -o tsv

Inserire i valori nel file dei parametri:Insert the values into the parameters file:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageaccountname": {
      "value": "<my_storage_account_name>"
    },
   "storageaccountkey": {
      "reference": {
        "keyVault": {
          "id": "<my_keyvault_id>"
        },
        "secretName": "<my_storage_account_key_secret_name>"
      }
    }
  }
}

Distribuire il contenitore e gestire i fileDeploy the container and manage files

Con il modello definito, è possibile creare il contenitore e montarne il volume usando l'interfaccia della riga di comando di Azure.With the template defined, you can create the container and mount its volume using the Azure CLI. Supponendo che il file del modello sia denominato azuredeploy.json e che il file dei parametri sia denominato azuredeploy.parameters.json, la riga di comando sarà:Assuming that the template file is named azuredeploy.json and that the parameters file is named azuredeploy.parameters.json, then the command line is:

az group deployment create --name hellofilesdeployment --template-file azuredeploy.json --parameters @azuredeploy.parameters.json --resource-group $ACI_PERS_RESOURCE_GROUP

Dopo aver avviato il contenitore è possibile usare la semplice app Web distribuita tramite l'immagine seanmckenna/aci-hellofiles per gestire i file nella condivisione file di Azure nel percorso di montaggio specificato.Once the container starts up, you can use the simple web app deployed via the seanmckenna/aci-hellofiles image to manage the files in the Azure file share at the mount path you specified. Ottenere l'indirizzo IP per l'app Web con il comando az container show:Obtain the IP address for the web app with the az container show command:

az container show --resource-group $ACI_PERS_RESOURCE_GROUP --name hellofiles -o table

È possibile usare uno strumento come Microsoft Azure Storage Explorer per recuperare e ispezionare il file scritto nella condivisione file.You can use a tool like the Microsoft Azure Storage Explorer to retrieve and inspect the file written to the file share.

Nota

Per altre informazioni sull'uso dei modelli di Azure Resource Manager e dei file dei parametri e sulla distribuzione con l'interfaccia della riga di comando di Azure, vedere Distribuire le risorse con i modelli di Azure Resource Manager e l'interfaccia della riga di comando di Azure.To learn more about using Azure Resource Manager templates, parameter files, and deploying with the Azure CLI, see Deploy resources with Resource Manager templates and Azure CLI.

Passaggi successiviNext steps