Azure SQL Edge の構成

重要

Azure SQL Edge では、ARM64 プラットフォームがサポートされなくなりました。

Azure SQL Edge では、次の 2 つのオプションのいずれかを使用した構成がサポートされています。

  • 環境変数
  • /var/opt/mssql フォルダーに配置される mssql.conf フォルダー

Note

環境変数を設定すると、mssql.conf ファイルに指定した設定がオーバーライドされます。

環境変数を使用して構成する

Azure SQL Edge では、SQL Edge コンテナーの構成に使用できるいくつかの異なる環境変数が公開されています。 これらの環境変数は、SQL Server on Linux で使用できる環境変数のサブセットです。 SQL Server on Linux 環境変数の詳細については、環境変数に関する記事をご覧ください。

次の新しい環境変数が Azure SQL Edge に追加されました。

環境変数 説明
PlanId 初期化中に使用される Azure SQL Edge SKU を指定します。 この環境変数は、Azure IoT Edge を使用して Azure SQL Edge をデプロイする場合にのみ必要です。 sde-developer-on-iot-edge または asde-premium-on-iot-edge
MSSQL_TELEMETRY_ENABLED 使用状況および診断データの収集を有効または無効にします。 TRUE または FALSE
MSSQL_TELEMETRY_DIR 使用状況および診断データ コレクションの監査ファイルのターゲット ディレクトリを設定します。 SQL Edge コンテナー内のフォルダーの場所。 このフォルダーは、マウント ポイントまたはデータ ボリュームのいずれかを使用してホスト ボリュームにマップできます。
MSSQL_PACKAGE デプロイする dacpac または bacpac パッケージの場所を指定します。 dacpac パッケージまたは bacpac パッケージが格納されているフォルダー、ファイル、または SAS URL。 詳細については、「SQL Edge での SQL Database DACPAC および BACPAC パッケージ」を参照してください。

次の SQL Server on Linux 環境変数は、Azure SQL Edge ではサポートされていません。 この環境変数が定義されている場合でも、コンテナーの初期化中に無視されます。

環境変数 説明
MSSQL_ENABLE_HADR 可用性グループを有効にします。 たとえば、1 は有効、0 は無効です。

重要

SQL Edge の MSSQL_PID 環境変数には、有効な値として PremiumDeveloper のみを指定できます。 Azure SQL Edge では、プロダクト キーを使用した初期化はサポートされていません。

環境変数を指定する

Azure portal を使用してサービスをデプロイする場合は、SQL Edge 用の環境変数を指定します。 それらは、モジュールのデプロイの [環境変数] セクションに追加することも、[コンテナー作成オプション] の一部として追加することもできます。

[環境変数] に値を追加します。

Screenshot of set by using environment variables list.

[コンテナー作成オプション] に値を追加します。

Screenshot of set by using container create options.

Note

切断されたデプロイ モードでは、-e または --env、または docker run コマンドの --env-file オプションを使用して環境変数を指定できます。

mssql.conf ファイルを使用して構成する

Azure SQL Edge には、SQL Server on Linux に含まれているような mssql-conf 構成ユーティリティは含まれていません。 mssql.conf ファイルを手動で構成し、SQL Edge モジュールの /var/opt/mssql/ フォルダーにマップされている永続的なストレージ ドライブに配置する必要があります。 Azure Marketplace から SQL Edge をデプロイする場合、このマッピングは [コンテナー作成オプション][マウント] オプションとして指定されます。

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

次の新しい mssql.conf オプションが Azure SQL Edge 用に追加されました。

オプション 説明
customerfeedback SQL Server によって Microsoft にフィードバックが送信されるかどうかを選択します。 詳細については、「使用状況と診断データの収集を無効にする」を参照してください
userrequestedlocalauditdirectory 使用状況および診断データ コレクションの監査ファイルのターゲット ディレクトリを設定します。 詳細については、「使用状況と診断データの収集のローカル監査」を参照してください

次の mssql.conf のオプションは、SQL Edge には適用されません。

オプション 説明
カスタマー フィードバック SQL Server によって Microsoft にフィードバックが送信されるかどうかを選択します。
データベース メール プロファイル SQL Server on Linux の既定のデータベース メール プロファイルを設定します。
高可用性 可用性グループを有効にします。
Microsoft 分散トランザクション コーディネーター Linux で MSDTC の構成とトラブルシューティングを行います。 SQL Edge では、分散トランザクションに関連する追加の構成オプションはサポートされていません。 このような追加の構成オプションの詳細については、「MSDTC の構成」を参照してください。
ML サービスの EULA Azure Machine Learning パッケージ用の R および Python の EULA に同意します。 これは SQL Server 2019 のみに適用されます。
outboundnetworkaccess Machine Learning Services の R、Python、および Java 拡張機能の送信ネットワーク アクセスを有効にします。

SQL Edge では次の例の mssql.conf ファイルが機能します。 mssql.conf ファイルの形式の詳細については、、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

非ルート ユーザーとして Azure SQL Edge を実行する

既定では、Azure SQL Edge コンテナーは非ルート ユーザーまたはグループを使用して実行されます。 Azure Marketplace を通して (または docker run を使用して) デプロイされると、異なるユーザーやグループが指定されていない限り、SQL Edge コンテナーは mssql (非ルート) ユーザーとして起動されます。 デプロイ時に異なる非ルート ユーザーを指定するには、コンテナー作成オプションの下に、キーと値のペア *"User": "<name|uid>[:<group|gid>]"* を追加します。 下の例では、SQL Edge はユーザー *IoTAdmin* として起動するように構成されています。

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

マウントされたボリューム上にある DB ファイルへのアクセスを非ルート ユーザーに許可するには、コンテナーを実行するのに使用するユーザーまたはグループが、永続的なファイル ストレージに対する読み取りおよび書き込みアクセス許可を持っているようにします。 下の例では、ファイルの所有者として、user_id10001 である非ルート ユーザーを設定しています。

chown -R 10001:0 <database file dir>

以前の CTP リリースからのアップグレード

以前の CTP の Azure SQL Edge は、ルート ユーザーとして実行するように構成されていました。 以前の CTP からアップグレードする場合は、以下のオプションを使用できます

  • 引き続きルート ユーザーを使用する - ルート ユーザーを使用し続けるには、コンテナー作成オプションの下に、キーと値のペア *"User": "0:0"* を追加します。

  • 既定の mssql ユーザーを使用する - 既定の mssql ユーザーを使用するには、以下の手順に従います。

    • Docker ホストに mssql という名前のユーザーを追加します。 下の例では、ID が 10001 のユーザー mssql を追加しています。 このユーザーは、ルート グループにも追加されます。

      sudo useradd -M -s /bin/bash -u 10001 -g 0 mssql
      
    • データベース ファイルがあるディレクトリまたはマウント ボリュームに対するアクセス許可を変更します

      sudo chgrp -R 0 /var/lib/docker/volumes/kafka_sqldata/
      sudo chmod -R g=u /var/lib/docker/volumes/kafka_sqldata/
      
  • 異なる非ルート ユーザー アカウントを使用する - 異なる非ルート ユーザー アカウントを使用するには

    • コンテナー作成オプションの下にキーと値のペア *"User": "user_name | user_id* を追加することを指定するように、コンテナー作成オプションを更新します。 user_name または user_id は、Docker ホストの実際の user_name または user_id に置き換えてください。
    • ディレクトリまたはマウント ボリュームに対するアクセス許可を変更します。

データを保持する

docker stopdocker start を使用してコンテナーを再起動しても、Azure SQL Edge の構成変更とデータベース ファイルはコンテナーに保持されています。 一方、docker rm を使用してコンテナーを削除すると、Azure SQL Edge とデータベースを含め、コンテナーの内容がすべて削除されます。 次のセクションでは、関連付けられているコンテナーが削除された場合でも、データ ボリュームを使用してデータベース ファイルを保持する方法について説明します。

重要

Azure SQL Edge の場合、Docker 内でのデータの保持について理解しておくことが重要です。 このセクションの説明に加えて、Docker コンテナー内でデータを管理する方法については、Docker のドキュメントをご覧ください。

ホスト ディレクトリをデータ ボリュームとしてマウントする

1 つ目のオプションは、ホスト上のディレクトリをコンテナー内のデータ ボリュームとしてマウントすることです。 これを行うには、docker run コマンドを -v <host directory>:/var/opt/mssql フラグと共に使用します。 これにより、コンテナーの実行間でデータを復元できます。

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

この手法では、Docker の外部にあるホスト上のファイルを共有して表示することもできます。

重要

Windows 上の Docker のホスト ボリューム マッピングでは現在のところ、完全な /var/opt/mssql ディレクトリをマッピングできません。 ただし、/var/opt/mssql/data など、サブディレクトリをホスト コンピューターにマッピングできます。

重要

現時点では、Azure SQL Edge イメージを使用した macOS 上の Docker のホスト ボリューム マッピングはサポートされていません。 代わりにデータ ボリューム コンテナーを使用してください。 この制限は、/var/opt/mssql ディレクトリに固有のものです。 マウントされたディレクトリからの読み取りは正常に機能します。 たとえば、macOS 上で -v を使用してホスト ディレクトリをマウントし、ホスト上に存在する .bak ファイルからバックアップを復元することができます。

データ ボリューム コンテナーを使用する

2 つ目のオプションは、データ ボリューム コンテナーを使用することです。 -v パラメーターを使用してホスト ディレクトリではなくボリューム名を指定して、データ ボリューム コンテナーを作成できます。 次の例では、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

Note

実行コマンド内でデータ ボリュームを暗黙的に作成するこの手法は、以前のバージョンの Docker では機能しません。 その場合は、Docker のドキュメント、「データ ボリューム コンテナーの作成とマウント」に概説されている明示的な手順を使用します。

このコンテナーを停止して削除しても、データ ボリュームは保持されます。 docker volume ls コマンドを使用して表示できます。

docker volume ls

その後、同じボリューム名を持つ別のコンテナーを作成すると、新しいコンテナーでは、ボリュームに含まれているのと同じ Azure SQL Edge データが使用されます。

データ ボリューム コンテナーを削除するには、docker volume rm コマンドを使用します。

警告

データ ボリューム コンテナーを削除すると、コンテナー内のすべての Azure SQL Edge データが完全に削除されます。

次のステップ