Azure

Managed InstanceへのDB移行・アプリとの連携時の注意Point

そがひろです。
今回は、OnPremiseからAzure Managed InstanceへのDB移行時とApp Serviceとの連携についての注意ポイントを書いていこうと思います。

Azure Managed Instanceについて

Azure Managed Instanceは、Azureで提供されるフルマネージド(PaaS)のDatabase Engineの一つです。

ユーザの介入なしでUpgrade・修正Program適用などを処理してくれる他、

最新のSQL Server OnPremiseのDatabase Engineと100%に近い互換性を持つDatabaseを作成することができます。

以下の機能は提供されない為、別のPaaS等のサービスを使用する必要があります。(2020年5月27日現在)

・ 組み込み統合サービス(SSIS) 
→ Azure Data Factoryを使用

・ 組み込みAnalysis Service(SSAS)
→ Azure Analysis Serviceを使用

・ 組み込みReporting Service(SSRS)
→ Power BIの”Page分割されたReport”もしくは、Azure VMでSSRSをホスト

また、Azure仮想Networkへことによりセキュリティ面での懸念事項に対処できます。

Azure Managed InstanceとOnPremiseのSQL Serverの相違点

Azure Managed InstanceはOnPremiseのSQL Serverと高い互換性があり、
ほとんどの機能がサポートされていますが、構文や動作に複数相違点があります。
詳細はMS公式ドキュメントを参照頂ければと思いますが、
例えば以下のものがあります。(2020年5月27日現在)

・証明書
CREATE FROM/BACKUP TO ファイル
FILE/ASSEMBLYからのCREATE/BACKUP 証明書
→ Managed Instanceではファイル共有とWindows folderへのAccessが出来ない為、サポートされていない

・資格情報
Azure Key VaultとShared Access SignatureのIDのみサポート
Windows Userはサポートされていない

・分散Transaction
MSDTC・Elastic Transactionはサポートされていない

等…

OnPremiseからのDB移行の際は、既存のDBにて使用されている機能がManaged Instanceでも使えるか(代替方法有無)を考慮する必要があります。

接続の種類について

Azure Managed Instanceには以下2つの接続の種類があります。

1.Redirect(推奨) :

  • Client → DBをHostしているNodeへ直接接続(Private Network内の通信)
  • 1433と11000-11999ポートを使用
  • PacketがDBに直接送信される為、待機時間とスループットのパフォーマンスが向上
Redirect接続のイメージ図

2.Proxy(規定値) :

  • 全ての接続がProxy Gateway経由
  • Private Network内の通信では1433
  • パブリック接続(3342)はこちらの接続方式となる
  • Workloadの性質によって待機時間が長くなりスループットが低下する
Proxy接続のイメージ図

社内のNetworkポリシーにもよるかと思われますが、
11000-11999が使用可能であれば、Redirectでの接続を推奨しています。

再試行ロジックについて

Azure Managed Instanceでは、各種Workloadの負荷分散を行う為に
Resourceの瞬間的な切り替えが発生します。
この再構成にかかる時間はほとんどの場合1分以内で完了しますが、
切り替えの進行中にDBへの接続に問題が発生する場合があります。
その為、Application側ではこの再構成による一時Errorを想定した構築が必要となります。(再試行Logic)

~ 再試行の流れ
1.DB接続に問題がありErrorが発生
2.再試行する前に5秒以上待機(最大60秒)
(5秒未満の場合、Azure側に過負荷がかかる可能性がある)
3.接続再試行を実施
4.1-3を最大試行回数分実施

App Serviceとの接続に伴うNSG Rule追加について

これはManaged Instanceというより、App Serviceに関する情報となりますが
Managed InstanceとApp Service(VNET統合されているもの以外)で接続を有効にするには、

1.Managed InstanceにてPublic Endpoint機能を有効にする
2.Managed Instance側のNSGにて受信許可Ruleを追加する

という設定が発生します。

1については、
Managed InstanceのPublic Endpointを使用することで、
3342 Portを使用してApp Serviceなどの外部Networkからの接続も
待ち受ける、という設定です。

2についても、
App Serviceが送信時に使用するIPからの3342 Port接続を、
許可するNSG Ruleを追加するというシンプルな設定となりますが、
ここで注意点があります。

NSGで送信元として指定可能なServiceTagの”AppService”は、
App Serviceの受信用に使用しているIP群となる為、
ServiceTagで受信許可Ruleを追加しても接続ができません。

その為、対象のApp Serviceの[Properties]、
もしくは以下のCommand等を使用しApp Serviceで使用されている送信IP情報を確認した上で受信許可Ruleを追加する必要があります。

・Azure CLIの場合

az webapp show --resource-group <group_name> --name <app_name> --query possibleOutboundIpAddresses --output tsv

・Azure PowerShellの場合

(Get-AzWebApp -ResourceGroup <group_name> -name <app_name>).PossibleOutboundIpAddresses

最後に

以上、OnPremiseのSQL SeverからAzure Managed InstanceへのDB移行時とApp Serviceとの連携時の注意ポイントでした。
記載した内容以外にももっと注意点はあるかと思いますし、一筋縄ではいかないところもあるかもしれませんが、OnPremise環境のサーバをAzureなどのパブリッククラウドのPaaSで動かすことで、今まで時間を割いていた管理作業なども少なくなると思います。もし同じような移行作業を予定されている場合は是非参考にしてください。

最後まで読んで下さり有難うございました!

[参考]:
・Azure SQL Database Managed Instance とは
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-managed-instance

・マネージド インスタンス T-SQL の相違点と制限事項
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-managed-instance-transact-sql-information

・Azure SQL Database マネージド インスタンスの接続の種類
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-managed-instance-connection-type

・SQL Database への一時的な接続エラーのトラブルシューティング
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-connectivity-issues

・Azure App Service における受信 IP アドレスと送信 IP アドレス
https://docs.microsoft.com/ja-jp/azure/app-service/overview-inbound-outbound-ips

Azureクラシックリソース(Azure Service Management)VMの廃止について前のページ

AzureMonitorで作成できるアラートの種類と制限次のページ

関連記事

  1. Azure

    Azure ポイント対サイトの証明書作成

    ポイント対サイト VPN 接続を構成する際の証明書生成につい…

  2. Application Gateway

    L7負荷分散 Azure Application Gateway について:1回目

    はじめまして。Azure推進チーム構成員のヤモトと申します。…

  3. Appサービス

    Azure App Serviceを使ってみる

    1.はじめにこんにちは、Cloud Engineerの曽我で…

  4. Azure

    Azure料金に関する豆知識①

    こんにちは。新人クラウドエンジニアの三醍醐です。今回は、Az…

  5. Appサービス

    AppService周りをまとめてみる(Linux版)

    WebApp、OSがWindowsとLinuxで設定回りに差がある…

  6. Azure

    Azure Virtual Machineのリージョン間複製

    こんにちは。新人クラウドエンジニアの三醍醐です。今回は、管理…

関連記事

  1. Application Gateway

    L7 負荷分散 Azure Application Gateway について:2…
  2. Azure

    ARMテンプレートでインフラ構築する。
  3. Azure

    Azure Migrateを使ったIaaS移行
  4. Azure

    Azure Key Vaultでみんなしあわせ
  5. Appサービス

    AppService周りをまとめてみる(Windows版)
PAGE TOP