Configurare SQL Edge di Azure

Importante

SQL Edge di Azure non supporta più la piattaforma ARM64.

SQL Edge di Azure supporta la configurazione tramite una delle due opzioni seguenti:

  • Variabili di ambiente
  • Un file mssql.conf presente nella cartella /var/opt/mssql

Nota

Le impostazioni relative alle variabili di ambiente sostituiscono le impostazioni specificate nel file mssql.conf.

Configurare con le variabili di ambiente

SQL Edge di Azure espone diverse variabili di ambiente con cui è possibile configurare il contenitore SQL Edge. Queste variabili di ambiente rappresentano, in realtà, un subset di quelle disponibili per SQL Server in Linux. Per altre informazioni sulle variabili di ambiente di SQL Server in Linux, vedere Variabili di ambiente.

In SQL Edge di Azure sono state aggiunte le nuove variabili di ambiente seguenti.

Variabile di ambiente Descrizione Valori
PlanId Specifica lo SKU di SQL Edge di Azure da usare durante l'inizializzazione. Questa variabile di ambiente è necessaria solo quando si distribuisce SQL Edge di Azure con Azure IoT Edge. asde-developer-on-iot-edge o asde-premium-on-iot-edge
MSSQL_TELEMETRY_ENABLED Consente di abilitare o disabilitare la raccolta di dati di diagnostica e utilizzo. TRUE o FALSE
MSSQL_TELEMETRY_DIR Imposta la directory di destinazione per i file di controllo di raccolta dati di utilizzo e diagnostica. Percorso della cartella all'interno del contenitore SQL Edge. È possibile eseguire il mapping di questa cartella a un volume host usando punti montaggio o volumi di dati.
MSSQL_PACKAGE Specifica il percorso del pacchetto dacpac o bacpac da distribuire. Cartella, file o URL di firma di accesso condiviso contenente i pacchetti dacpac o bacpac. Per altre informazioni, vedere Distribuire pacchetti DACPAC e BACPAC del database SQL in SQL Edge.

La variabile di ambiente di SQL Server in Linux seguente non è supportata per SQL Edge di Azure. Se definita, questa variabile di ambiente viene ignorata durante l'inizializzazione del contenitore.

Variabile di ambiente Descrizione
MSSQL_ENABLE_HADR Consente di abilitare un gruppo di disponibilità. Ad esempio, 1 è abilitato e 0 è disabilitato.

Importante

La variabile di ambiente MSSQL_PID per SQL Edge accetta solo Premium e Developer come valori validi. SQL Edge di Azure non supporta l'inizializzazione tramite un codice Product Key.

Specificare le variabili di ambiente

Specificare le variabili di ambiente per SQL Edge quando si distribuisce il servizio tramite il portale di Azure. È possibile aggiungerle nella sezione Variabili di ambiente della distribuzione del modulo o come parte delle Opzioni di creazione del contenitore.

Aggiungere valori in Variabili di ambiente.

Screenshot del set con l'elenco delle variabili di ambiente.

Aggiungere valori in Opzioni di creazione del contenitore.

Screenshot del set con le opzioni di creazione del contenitore.

Nota

Nella modalità di distribuzione disconnessa è possibile specificare variabili di ambiente usando l'opzione -e o --env o--env-file del comando docker run.

Configurare usando un file mssql.conf

A differenza di SQL Server in Linux, SQL Edge di Azure non include l'utilità di configurazione mssql-conf. È necessario configurare manualmente il file mssql.conf e inserirlo nell'unità di archiviazione persistente mappata alla cartella /var/opt/mssql/ nel modulo SQL Edge. Quando si distribuisce SQL Edge tramite l'hub IoT di Azure, questo mapping viene specificato come opzioneMontaggi in Opzioni di creazione del contenitore.

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

Sono state aggiunte le nuove opzioni di mssql.conf seguenti per SQL Edge di Azure.

Opzione Descrizione
customerfeedback Consente di scegliere se SQL Server invia feedback a Microsoft. Per altre informazioni, vedere Disabilitare la raccolta dati di diagnostica e utilizzo
userrequestedlocalauditdirectory Imposta la directory di destinazione per i file di controllo di raccolta dati di utilizzo e diagnostica. Per altre informazioni, vedere Controllo locale della raccolta dati di diagnostica e utilizzo

Le opzioni di mssql.conf seguenti non sono applicabili a SQL Edge:

Opzione Descrizione
Commenti e suggerimenti degli utenti Consente di scegliere se SQL Server invia feedback a Microsoft.
Profilo di posta elettronica database Impostare il profilo predefinito di Posta elettronica database per SQL Server in Linux.
Disponibilità elevata Abilitare i gruppi di disponibilità.
Microsoft Distributed Transaction Coordinator Configurare e risolvere i problemi relativi a MSDTC in Linux. Non sono inoltre supportate per SQL Edge le opzioni di configurazione aggiuntive relative alle transazioni distribuite. Per altre informazioni su queste opzioni di configurazione aggiuntive, vedere Configurare MSDTC
Contratti di licenza con l'utente finale di ML Services Accettare i contratti di licenza con l'utente finale di R e Python per i pacchetti di Azure Machine Learning. Si applica solo a SQL Server 2019.
outboundnetworkaccess Abilitare l'accesso alla rete in uscita per le estensioni R, Python e Java di Machine Learning Services.

Il file mssql.conf di esempio seguente funziona per SQL Edge. Per altre informazioni sul formato per un file mssql.conf, vedere Formato di 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

Eseguire SQL Edge di Azure come utente non radice

Per impostazione predefinita, i contenitori di SQL Edge di Azure vengono eseguiti con un utente/gruppo non radice. Quando vengono distribuiti tramite l'hub IoT di Azure (o usando docker run), a meno che non venga specificato un altro utente/gruppo, i contenitori di SQL Edge vengono avviati come utente mssql (non radice). Per specificare un utente non radice diverso durante la distribuzione, aggiungere la coppia chiave-valore *"User": "<name|uid>[:<group|gid>]"* nelle opzioni di creazione del contenitore. Nell'esempio seguente SQL Edge è configurato per l'avvio come utente *IoTAdmin*.

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

Per consentire all'utente non radice di accedere ai file di database in volumi montati, assicurarsi che l'utente o il gruppo con cui viene eseguito il contenitore abbia autorizzazioni di lettura e scrittura per l'archivio file permanente. Nell'esempio seguente l'utente non radice viene impostato con user_id di 10001 come proprietario dei file.

chown -R 10001:0 <database file dir>

Eseguire l'aggiornamento dalle versioni CTP precedenti

Le versioni CTP precedenti di SQL Edge di Azure erano configurate per l'esecuzione come utenti radice. Quando si esegue l'aggiornamento da versioni CTP precedenti, sono disponibili le opzioni seguenti.

  • Continuare a usare l'utente radice: per continuare a usare l'utente radice, aggiungere la coppia chiave-valore *"User": "0:0"* in Opzioni di creazione del contenitore.

  • Usare l'utente mssql predefinito : per usare l'utente mssql predefinito, seguire questa procedura:

    • Aggiungere un utente denominato mssql nell'host Docker. Nell'esempio seguente viene aggiunto un utente mssql con ID 10001. Questo utente viene aggiunto anche al gruppo radice.

      sudo useradd -M -s /bin/bash -u 10001 -g 0 mssql
      
    • Modificare l'autorizzazione per il volume di directory/montaggio in cui risiede il file di database

      sudo chgrp -R 0 /var/lib/docker/volumes/kafka_sqldata/
      sudo chmod -R g=u /var/lib/docker/volumes/kafka_sqldata/
      
  • Usare un account utente non radice diverso: per usare un account utente diverso non radice

    • Aggiornare le opzioni di creazione del contenitore per specificare l'aggiunta della coppia chiave-valore *"User": "user_name | user_id* nelle opzioni di creazione del contenitore. Sostituire user_name o user_id con un user_name o user_id effettivo dall'host Docker.
    • Modificare le autorizzazioni per il volume di directory/montaggio.

Rendere persistenti i dati

Le modifiche apportate alla configurazione di SQL Edge di Azure e i file di database vengono salvati in modo permanente nel contenitore anche se il contenitore viene riavviato con docker stop e docker start. Tuttavia, se si rimuove il contenitore con docker rm viene eliminato tutto il contenuto al suo interno, inclusi SQL Edge di Azure e i database. La sezione seguente illustra come usare i volumi di dati per rendere persistenti i file di database anche se vengono eliminati i contenitori associati.

Importante

Per SQL Edge di Azure, è fondamentale comprendere la persistenza dei dati in Docker. Oltre alle informazioni in questa sezione, vedere la documentazione di Docker su come gestire i dati nei contenitori Docker.

Montare una directory host come volume di dati

La prima opzione consiste nel montare una directory nell'host come volume di dati nel contenitore. A tale scopo, usare il comando docker run con il flag -v <host directory>:/var/opt/mssql. In questo modo è possibile ripristinare i dati tra le esecuzioni dei contenitori.

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

Questa tecnica consente anche di condividere e visualizzare i file nell'host all'esterno di Docker.

Importante

Il mapping del volume host per Docker in Windows non supporta attualmente il mapping della directory /var/opt/mssql completa. È tuttavia possibile eseguire il mapping di una sottodirectory, ad esempio /var/opt/mssql/data al computer host.

Importante

Il mapping del volume host per Docker in macOS con l'immagine di SQL Edge di Azure non è attualmente supportato. Usare invece i contenitori di volumi di dati. Questa restrizione è specifica per la directory /var/opt/mssql. La lettura da una directory montata funziona correttamente. Ad esempio, è possibile montare una directory host usando -v in macOS e ripristinare un backup da un file con estensione .bak che risiede nell'host.

Usare i contenitori di volumi di dati

La seconda opzione consiste nell'usare un contenitore di volumi di dati. È possibile creare un contenitore di volumi di dati specificando un nome di volume anziché una directory host con il parametro -v. Nell'esempio seguente viene creato un volume di dati condiviso denominato 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

Nota

Questa tecnica per la creazione implicita di un volume di dati nel comando run non funziona con le versioni precedenti di Docker. In tal caso, usare i passaggi espliciti descritti nella documentazione di Docker, in Creating and mounting a data volume container (Creazione e montaggio di un contenitore di volumi di dati).

Anche se si arresta e rimuove il contenitore, il volume di dati è persistente. È possibile visualizzarlo con il comando docker volume ls.

docker volume ls

Se successivamente si crea un altro contenitore con lo stesso nome di volume, il nuovo contenitore userà gli stessi dati di SQL Edge di Azure contenuti nel volume.

Per rimuovere un contenitore di volumi di dati, usare il comando docker volume rm.

Avviso

Se si elimina il contenitore del volume di dati, tutti i dati di SQL Edge di Azure nel contenitore verranno eliminati definitivamente.

Passaggi successivi