Tutorial: criar uma montagem de volume de Arquivos do Azure nos Aplicativos de Contêiner do Azure

Aprenda a gravar no armazenamento permanente em um aplicativo de contêiner usando uma montagem de armazenamento dos Arquivos do Azure. Para obter mais informações sobre montagens de armazenamento, consulte Usar montagens de armazenamento em Aplicativos de Contêiner do Azure.

Este tutorial utiliza autenticação de identidade gerenciada (prévia), que recomendamos para novas montagens de arquivos SMB. A identidade gerenciada pertence ao ambiente Container Apps. Você não precisa recuperar, armazenar ou girar uma chave de conta de armazenamento para montar o compartilhamento.

Neste tutorial, você aprenderá como:

  • Crie um ambiente de Aplicativos do Contêiner
  • Criar uma conta de Armazenamento do Azure
  • Definir um compartilhamento de arquivo na conta de armazenamento
  • Conceda o acesso da identidade gerenciada do ambiente ao compartilhamento de arquivos
  • Vincular o ambiente ao compartilhamento de arquivos de armazenamento
  • Montar o compartilhamento de armazenamento em um contêiner individual
  • Verificar a montagem de armazenamento exibindo o log de acesso do site

Observação

Os Aplicativos de Contêiner do Azure dão suporte à montagem de compartilhamentos de arquivos por meio dos protocolos SMB e NFS. Este tutorial demonstra a montagem de um compartilhamento de Arquivos do Azure usando o protocolo SMB. Para saber mais sobre como montar compartilhamentos NFS, consulte Usar montagens de armazenamento em Aplicativos de Contêiner do Azure.

Pré-requisitos

  • Instale a versão mais recente da CLI do Azure.
  • Use uma assinatura do Azure com permissões para criar recursos e atribuir funções do controle de acesso baseado em função do Azure (RBAC do Azure). Para atribuir funções, você precisa da permissão Microsoft.Authorization/roleAssignments/write no escopo da conta de armazenamento.

Configurar o ambiente

Os comandos a seguir definem variáveis de ambiente e garantem que sua extensão de Aplicativos de Contêiner esteja atualizada.

  1. Entre na CLI do Azure.

    az login
    
  2. Configure variáveis de ambiente usadas em vários comandos a seguir.

    RESOURCE_GROUP="my-container-apps-group"
    ENVIRONMENT_NAME="my-storage-environment"
    LOCATION="canadacentral"
    
  3. Verifique se você tem a versão mais recente da extensão da CLI do Azure de Aplicativos de Contêiner.

    az extension add -n containerapp --upgrade
    
  4. Remova o namespace Microsoft.App.

    az provider register --namespace Microsoft.App
    
  5. Registre o provedor Microsoft.OperationalInsights para o workspace do Azure Monitor Log Analytics se você não o tiver usado antes.

    az provider register --namespace Microsoft.OperationalInsights
    

Criar um ambiente

As etapas a seguir criam um grupo de recursos e um ambiente de Aplicativos de Contêiner.

  1. Crie um grupo de recursos.

    az group create \
      --name $RESOURCE_GROUP \
      --location $LOCATION \
      --query "properties.provisioningState"
    

    Depois de criado, o comando retorna uma mensagem "Succeeded".

    Ao final deste tutorial, você pode excluir o grupo de recursos para remover todos os serviços criados durante este artigo.

  2. Criar um ambiente do Container Apps.

    az containerapp env create \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --location "$LOCATION" \
      --mi-system-assigned \
      --query "properties.provisioningState"
    

    Depois de criado, o comando retorna uma mensagem "Êxito".

    Use o sinalizador --mi-system-assigned para ativar a identidade gerenciada atribuída pelo sistema do ambiente. Em etapas posteriores, você concede a essa identidade acesso ao compartilhamento de arquivos.

    As montagens de armazenamento são associadas a um ambiente de Aplicativos de Contêiner e são configuradas em cada aplicativo de contêiner individual.

Configurar uma conta de armazenamento

Em seguida, crie uma conta de armazenamento e estabeleça um compartilhamento de arquivos para montar no aplicativo de contêiner.

  1. Defina um nome de conta de armazenamento.

    Esse comando gera um sufixo aleatório para o nome da conta de armazenamento para garantir a exclusividade.

    STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
    
  2. Crie uma conta de armazenamento do Azure.

    az storage account create \
      --resource-group $RESOURCE_GROUP \
      --name $STORAGE_ACCOUNT_NAME \
      --location "$LOCATION" \
      --kind StorageV2 \
      --sku Standard_LRS \
      --enable-large-file-share \
      --enable-smb-oauth true \
      --query provisioningState
    

    Depois de criado, o comando retorna uma mensagem "Succeeded".

    O sinalizador --enable-smb-oauth true habilita a Identidade Gerenciada para SMB (SMBOAuth) na conta de armazenamento. Se você usa uma conta de armazenamento existente, habilite essa configuração antes de criar a montagem. Para obter instruções, consulte Configurar a propriedade acesso da identidade gerenciada na sua conta de armazenamento.

    As configurações de segurança SMB da conta de armazenamento também devem permitir a autenticação Kerberos. Se você usa um perfil de segurança SMB personalizado, veja configurações de segurança SMB.

  3. Defina um nome de compartilhamento de arquivo.

    STORAGE_SHARE_NAME="myfileshare"
    
  4. Crie o compartilhamento de arquivos do Armazenamento do Azure.

    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. Defina o nome da montagem de armazenamento.

    STORAGE_MOUNT_NAME="mystoragemount"
    

    Esse valor é o nome usado para definir o link de montagem de armazenamento do seu ambiente de Aplicativos de Contêiner para sua conta de Armazenamento do Azure.

Conceda à identidade gerenciada o acesso

Atribua a função Storage File Data SMB MI Admin à identidade gerenciada do ambiente no escopo da conta de armazenamento. Essa função autoriza a identidade a acessar arquivos e diretórios no compartilhamento SMB.

ENVIRONMENT_PRINCIPAL_ID=$(az containerapp env show \
  --name $ENVIRONMENT_NAME \
  --resource-group $RESOURCE_GROUP \
  --query identity.principalId \
  --output tsv)

STORAGE_ACCOUNT_ID=$(az storage account show \
  --name $STORAGE_ACCOUNT_NAME \
  --resource-group $RESOURCE_GROUP \
  --query id \
  --output tsv)

az role assignment create \
  --assignee-object-id "$ENVIRONMENT_PRINCIPAL_ID" \
  --assignee-principal-type ServicePrincipal \
  --role "Storage File Data SMB MI Admin" \
  --scope "$STORAGE_ACCOUNT_ID"

Permita tempo para que a atribuição de função se propague antes de criar a montagem de armazenamento. Para atribuir a função no portal Azure, veja Atribuir uma função RBAC embutida à identidade gerenciada.

Criar a montagem de armazenamento

Agora você pode atualizar a configuração do aplicativo de contêiner para dar suporte à montagem de armazenamento.

  1. Crie o link de armazenamento no ambiente.

    az containerapp env storage set \
      --access-mode ReadWrite \
      --storage-type AzureFile \
      --azure-file-account-name $STORAGE_ACCOUNT_NAME \
      --azure-file-identity system \
      --azure-file-share-name $STORAGE_SHARE_NAME \
      --storage-name $STORAGE_MOUNT_NAME \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --output table
    

    Esse comando cria um link entre o ambiente Container Apps e o compartilhamento de arquivos criado com o az storage share-rm comando. A opção --azure-file-identity system autentica-se no Arquivos do Azure usando a identidade gerenciada atribuída ao sistema do ambiente.

    Para uma identidade gerenciada atribuída pelo usuário, atribua a identidade ao ambiente e use seu ID de recurso completo em vez de system. A autenticação de chave de conta de armazenamento continua sendo suportada como alternativa. Não combine --azure-file-identity com --azure-file-account-key ou --azure-file-key-vault-secret-url. Para ver exemplos, consulte Usar montagens de armazenamento nos Aplicativos de Contêiner do Azure.

    Agora que a conta de armazenamento e o ambiente estão vinculados, você pode criar um aplicativo de contêiner que usa a montagem de armazenamento.

  2. Defina o nome do aplicativo de contêiner.

    CONTAINER_APP_NAME="my-container-app"
    
  3. Crie o aplicativo de contêineres.

    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
    

    Esse comando exibe a URL do novo aplicativo de contêiner.

  4. Copie a URL e cole no navegador da Web para navegar até o site.

    Depois que a página for carregada, você verá a mensagem "Bem-vindo ao nginx!". Deixe esta guia do navegador aberta. Você retornará ao site durante as etapas de verificação de montagem de armazenamento.

    Agora que você confirmou que o aplicativo de contêiner está configurado, você pode atualizar o aplicativo para incluir uma definição de ponto de montagem de armazenamento.

  5. Exporte a configuração do aplicativo de contêiner.

    az containerapp show \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --output yaml > app.yaml
    

    Observação

    Embora este aplicativo não tenha segredos, muitos aplicativos têm segredos. Por padrão, quando você exporta a configuração de um aplicativo, os valores dos segredos não são incluídos no YAML gerado.

    Se você não precisar alterar valores secretos, poderá remover a secrets seção e seus segredos permanecerão sem alterações. Alternativamente, se você precisar alterar o valor de um segredo, certifique-se de fornecer tanto name quanto value para todos os segredos no arquivo antes de tentar atualizar o aplicativo. Omitir um segredo da secrets seção exclui o segredo.

  6. Abra app.yaml em um editor de código.

  7. Substitua a volumes: null definição na template seção por uma volumes: definição que referencia o volume de armazenamento. A seção de modelo deve ser semelhante à seguinte:

    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
    

    A nova template.volumes seção inclui as propriedades a seguir.

    Propriedade Descrição
    name Esse valor identifica o volume em nível de aplicativo e é referenciado por volumeName na montagem de volume do contêiner.
    storageName Esse valor corresponde ao nome da definição de armazenamento criado ao chamar o az containerapp env storage set comando.
    storageType Esse valor determina o tipo de volume de armazenamento definido para o ambiente. Nesse caso, uma montagem de Arquivos do Azure é declarada.

    A seção volumes define volumes no nível do aplicativo que os contêineres de sidecar ou contêineres de sidecar do aplicativo podem referenciar por meio de uma seção volumeMounts associada a um contêiner.

    A autenticação de identidade gerenciada não altera a configuração de volumes em nível de app. Continue usando storageType: AzureFile para montagens de SMB.

  8. Adicione uma volumeMounts seção ao nginx contêiner na containers seção.

    containers:
      - image: nginx
        name: my-container-app
        volumeMounts:
        - volumeName: my-azure-file-volume
          mountPath: /var/log/nginx
    

    A nova volumeMounts seção inclui as seguintes propriedades:

    Propriedade Descrição
    volumeName Esse valor deve corresponder ao nome definido na volumes definição.
    mountPath Esse valor define o caminho no contêiner em que o armazenamento está montado.
  9. Atualize o aplicativo de contêiner com a nova configuração de montagem de armazenamento.

    az containerapp update \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --yaml app.yaml \
      --output table
    

Verificar a montagem de armazenamento

Agora que a montagem de armazenamento está estabelecida, você pode manipular arquivos no Armazenamento do Azure do seu contêiner. Use os comandos a seguir para observar a montagem de armazenamento no trabalho.

  1. Abra um shell interativo dentro do aplicativo de contêiner para executar comandos dentro do contêiner em execução.

    az containerapp exec \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP
    

    Esse comando pode demorar um pouco para abrir o shell remoto. Quando o shell estiver pronto, você poderá interagir com a montagem de armazenamento por meio de comandos do sistema de arquivos. Para obter mais informações, consulte Conectar-se a um console de contêiner nos Aplicativos de Contêiner do Azure.

  2. Altere para a pasta nginx /var/log/nginx.

    cd /var/log/nginx
    
  3. Retorne ao navegador e navegue até o site e atualize a página algumas vezes.

    As solicitações feitas ao site criam uma série de entradas de fluxo de log.

  4. Retorne ao terminal e liste os valores da /var/log/nginx pasta.

    ls
    

    Observe como os arquivos access.log e error.log aparecem nesta pasta. Esses arquivos são gravados na montagem dos Arquivos do Azure no compartilhamento de Armazenamento do Azure criado nas etapas anteriores.

  5. Exiba o conteúdo do arquivo access.log .

    cat access.log
    
  6. Saia do shell interativo do contêiner para retornar à sessão do terminal local.

    exit
    
  7. Agora, você pode exibir os arquivos no portal do Azure para verificar se eles existem em sua conta de Armazenamento do Azure. Imprima o nome da sua conta de armazenamento gerada aleatoriamente.

    echo $STORAGE_ACCOUNT_NAME
    
  8. Navegue até o portal do Azure e abra a conta de armazenamento criada neste procedimento.

  9. Em Armazenamento de Dados , selecione Compartilhamentos de arquivos.

  10. Selecione myfileshare para visualizar os arquivos access.log e error.log .

Limpar os recursos

Se você não quiser continuar a usar esse aplicativo, execute o comando a seguir para excluir o grupo de recursos junto com todos os recursos criados neste artigo.

az group delete \
  --name $RESOURCE_GROUP

Próximas etapas