Configurar o SQL do Azure no Edge

Importante

O SQL do Azure no Edge encerrou o suporte à plataforma ARM64.

O SQL do Azure no Edge dá suporte para a configuração por meio de uma destas duas opções:

  • Variáveis de ambiente
  • Um arquivo mssql.conf colocado na pasta /var/opt/mssql

Observação

A definição de variáveis de ambiente substitui as configurações especificadas no arquivo mssql.conf.

Configurar usando variáveis de ambiente

O SQL do Azure no Edge expõe várias variáveis de ambiente diferentes que podem ser usadas para configurar o contêiner do SQL no Edge. Essas variáveis de ambiente são um subconjunto das variáveis de ambiente disponíveis para SQL Server no Linux. Para obter mais informações sobre variáveis de ambiente do SQL Server no Linux, confira Variáveis de ambiente.

As novas variáveis de ambiente a seguir foram adicionadas ao Azure SQL Edge.

Variável de ambiente Descrição Valores
PlanId Especifica a SKU do SQL do Azure no Edge a ser usada durante a inicialização. Essa variável de ambiente só é necessária ao implantar o SQL do Azure no Edge usando o Azure IoT Edge. asde-developer-on-iot-edge ou asde-premium-on-iot-edge
MSSQL_TELEMETRY_ENABLED Habilitar ou desabilitar a coleta de dados de diagnóstico e de uso. TRUE ou FALSE
MSSQL_TELEMETRY_DIR Define o diretório de destino para os arquivos de auditoria de coleta de dados de uso e diagnóstico. Local da pasta no contêiner do SQL no Edge. Essa pasta pode ser mapeada para um volume de host usando pontos de montagem ou volumes de dados.
MSSQL_PACKAGE Especifica o local do pacote dacpac ou bacpac a ser implantado. Pasta, arquivo ou URL SAS que contém os pacotes dacpac ou bacpac. Para obter mais informações, consulte Implantar pacotes DACPAC e BACPAC do Banco de Dados SQL no SQL Edge.

As variáveis de ambiente do SQL Server em Linux a seguir não são compatíveis com o SQL do Azure no Edge. Se definida, essa variável de ambiente será ignorada durante a inicialização do contêiner.

Variável de ambiente Descrição
MSSQL_ENABLE_HADR Habilite o Grupo de Disponibilidade. Por exemplo, 1 está habilitado e 0 está desabilitado.

Importante

A variável de ambiente MSSQL_PID do SQL no Edge só aceita Premium e Developer como valores válidos. O SQL do Azure no Edge não é compatível com inicialização usando uma chave do produto.

Definir as variáveis de ambiente

Especifique as variáveis de ambiente para o SQL no Edge ao implantar o serviço por meio do portal do Azure. Você pode adicioná-los na seção de variáveis de ambiente da implantação do módulo ou como parte das Opções de criação do contêiner.

Adicione valores em variáveis de ambiente.

Screenshot of set by using environment variables list.

Adicione valores nas Opções de criação de contêiner.

Screenshot of set by using container create options.

Observação

No modo de implantação desconectado, as variáveis de ambiente podem ser especificadas usando a opção -e ou --env ou --env-file opção do comando docker run.

Configurar usando um arquivo mssql.conf

O SQL do Azure no Edge não inclui o Utilitário de configuração mssql-conf, como o SQL Server em Linux. Você precisa configurar manualmente o arquivo MSSQL.conf e colocá-lo na unidade de armazenamento persistente que é mapeada para a pasta/var/opt/MSSQL/no módulo SQL no Edge. Ao implantar o SQL no Edge pelo Azure Marketplace, esse mapeamento é especificado como a opção Mounts nas Opções de Criação de Contêiner.

{
  "Mounts": [
    {
      "Type": "volume",
      "Source": "sqlvolume",
      "Target": "/var/opt/mssql"
    }
  ]
}

As novas opções mssql.conf a seguir foram adicionadas para o SQL do Azure no Edge.

Opção Descrição
customerfeedback Escolha se o SQL Server enviará comentários à Microsoft. Para obter mais informações, consulte desabilitar o uso e coleta de dados de diagnóstico
userrequestedlocalauditdirectory Define o diretório de destino para os arquivos de auditoria de coleta de dados de uso e diagnóstico. Para obter mais informações, consulte auditoria local do uso e coleta de dados de diagnóstico

As opções de mssql.conf a seguir não se aplicam ao SQL no Edge:

Opção Descrição
Comentários do cliente Escolha se o SQL Server enviará comentários à Microsoft.
Perfil do Database Mail Definir o perfil padrão do Database Mail para o SQL Server em Linux.
Alta disponibilidade Habilitar grupos de disponibilidade.
Coordenador de Transações Distribuídas da Microsoft Configurar e solucionar problemas do MSDTC no Linux. As opções de configuração relacionadas a transações distribuídas adicionais também não são compatíveis com o SQL no Edge. Para obter mais informações sobre essas opções de configuração adicionais, consulte Configurar o MSDTC.
EULAs para Serviços de Machine Learning Aceitar os EULAs de R e Python para pacotes de Serviços de Azure Machine Learning. Aplica-se somente ao SQL Server 2019.
outboundnetworkaccess Habilitar o acesso à rede para extensões Java, R e Python dos Serviços de Machine Learning.

O seguinte arquivo de amostra mssql.conf funciona para o SQL no Edge. Para obter mais informações sobre o formato do arquivo mssql.conf, confira Formato mssql.conf.

[EULA]
accepteula = Y

[coredump]
captureminiandfull = true
coredumptype = full

[filelocation]
defaultbackupdir = /var/opt/mssql/backup/
defaultdatadir = /var/opt/mssql/data/
defaultdumpdir = /var/opt/mssql/data/
defaultlogdir = /var/opt/mssql/log/

[language]
lcid = 1033

[memory]
memorylimitmb = 6144

[sqlagent]
errorlogfile = /var/opt/mssql/log/sqlagentlog.log
errorlogginglevel = 7

[traceflag]
traceflag0 = 3604
traceflag1 = 3605
traceflag2 = 1204

Executar o SQL do Azure no Edge como um usuário não raiz

Por padrão, os contêineres do SQL do Azure no Edge são executados com um usuário/grupo não raiz. Quando implantados por meio do Azure Marketplace (ou usando docker run), a menos que um usuário/grupo diferente seja especificado, os contêineres do SQL Edge são iniciados como o usuário mssql (não raiz). Para especificar um usuário não raiz diferente durante a implantação, adicione o *"User": "<name|uid>[:<group|gid>]"* par chave-valor em opções de criação de contêiner. No exemplo a seguir, o SQL Edge é configurado para iniciar como o usuário *IoTAdmin*.

{
    ..
    ..
    ..
    "User": "IoTAdmin",
    "Env": [
        "MSSQL_AGENT_ENABLED=TRUE",
        "ClientTransportType=AMQP_TCP_Only",
        "MSSQL_PID=Premium"
    ]
}

Para permitir que o usuário não raiz acesse arquivos de banco de dados que estão em volumes montados, verifique se o usuário/grupo no qual você executa o contêiner tem permissões de gravação e leitura no armazenamento de arquivos persistente. No exemplo a seguir, definimos o usuário não root com user_id de 10001 como o proprietário dos arquivos.

chown -R 10001:0 <database file dir>

Atualização de versões anteriores do CTP

Os CTPs anteriores do Azure SQL Edge foram configurados para execução como os usuários raiz. As opções a seguir estão disponíveis ao atualizar de CTPs anteriores.

  • Continuar a usar o usuário raiz – para continuar usando o usuário raiz, adicione o par chave-valor *"User": "0:0"* em opções de criação de contêiner.

  • Use o usuário mssql padrão - Para usar o usuário mssql padrão, execute estas etapas:

    • Adicione um usuário chamado mssql no host do Docker. No exemplo a seguir, adicionamos um usuário MSSQL com a ID 10001. Esse usuário também é adicionado ao grupo raiz.

      sudo useradd -M -s /bin/bash -u 10001 -g 0 mssql
      
    • Alterar a permissão no volume de montagem/diretório no qual reside o arquivo de banco de dados

      sudo chgrp -R 0 /var/lib/docker/volumes/kafka_sqldata/
      sudo chmod -R g=u /var/lib/docker/volumes/kafka_sqldata/
      
  • Usar uma conta diferente de usuário não raiz-para usar uma conta de usuário diferente da raiz

    • Atualize as opções de criação do contêiner para adicionar o par chave-valor *"User": "user_name | user_id* em opções de criação de contêiner. Substitua user_name ou user_id por um user_name ou user_id real do host do Docker.
    • Altere as permissões no volume de montagem/diretório.

Manter seus dados

Sua configuração do SQL do Azure no Edge muda e os arquivos de banco de dados são mantidos no contêiner mesmo que você reinicie o contêiner com docker stop e docker start. No entanto, se você remover o contêiner com docker rm, tudo no contêiner será excluído, incluindo o SQL do Azure no Edge e seus bancos de dados. A seção a seguir explica como usar volumes de dados para persistir seus arquivos de banco de dados mesmo que os contêineres associados sejam excluídos.

Importante

Para o Azure SQL Edge, é fundamental que você entenda a persistência de dados no Docker. Além da discussão nesta seção, confira a documentação do Docker sobre como gerenciar dados em contêineres do Docker.

Montar um diretório de host como volume de dados

A primeira opção é montar um diretório em seu host como um volume de dados em seu contêiner. Para fazer isso, use o comando docker run com o sinalizador -v <host directory>:/var/opt/mssql. Isso permite que os dados sejam restaurados entre as execuções do contêiner.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v <host directory>/data:/var/opt/mssql/data -v <host directory>/log:/var/opt/mssql/log -v <host directory>/secrets:/var/opt/mssql/secrets -d mcr.microsoft.com/azure-sql-edge
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v <host directory>/data:/var/opt/mssql/data -v <host directory>/log:/var/opt/mssql/log -v <host directory>/secrets:/var/opt/mssql/secrets -d mcr.microsoft.com/azure-sql-edge

Essa técnica também permite que você compartilhe e exiba os arquivos no host fora do Docker.

Importante

No momento, o mapeamento de volume do host para o Docker no Windows não oferece suporte ao mapeamento do diretório completo /var/opt/mssql . No entanto, você pode mapear um subdiretório, como /var/opt/mssql/data para o computador host.

Importante

O mapeamento de volume de host para Docker no macOS com a imagem do SQL Edge do Azure não tem suporte no momento. Use contêineres de volume de dados em vez disso. Essa restrição é específica do diretório /var/opt/mssql. A leitura de um diretório montado funciona bem. Por exemplo, você pode montar um diretório de host usando -v no macOS e restaurar um backup de um .bak arquivo que reside no host.

Usar contêineres de volume de dados

A segunda opção é usar um contêiner de volume de dados. Você pode criar um contêiner de volume de dados especificando um nome de volume, em vez de um diretório de host com o parâmetro -v. O exemplo a seguir cria um volume de dados compartilhado chamado sqlvolume.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/azure-sql-edge
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/azure-sql-edge

Observação

Essa técnica para criar implicitamente um volume de dados no comando run não funciona com versões mais antigas do Docker. Nesse caso, use as etapas explícitas descritas na documentação do Docker, Como criar e montar um contêiner de volume de dados.

Mesmo que você pare e remova esse contêiner, o volume de dados persiste. Você pode exibi-lo com o comando docker volume ls.

docker volume ls

Se você criar outro contêiner com o mesmo nome de volume, o novo contêiner usará os mesmos dados do SQL do Azure no Edge contidos no volume.

Para remover um contêiner de volume de dados, use o comando docker volume rm.

Aviso

Se você excluir o contêiner do volume de dados, qualquer dado do SQL do Azure no Edge no contêiner será excluído permanentemente.

Próximas etapas