DP-300 試験対策 - Part.1 (データ プラットフォーム リソースの計画と実装 1)"

34 min read読了の目安(約31000字

この記事について

この記事は、2021/1/27 に更新された MCP (Microsoft Certified Program) 試験の DP-300 の試験対策記事です。
公式で公開されている試験スキルのアウトライン情報に基づき、各カテゴリ毎に出題範囲と思われる内容を学習した際の備忘録になります。

公開されている試験スキルのアウトラインは、英語での記載となっています。
非公式ですが、個人で日本語訳したものを以下のブログで公開しているので、英語が辛いという方は参考になさってください。

本ブログ、および日本語訳しているブログは、2021/1/27 以降に更新された DP-300 試験内容の情報を元にしています。
2021/1/27 以降に更新された試験内容については反映しない予定なので、情報の鮮度にはご注意ください。

今回は、Plan and Implement Data Platform Resources (データ プラットフォーム リソースの計画と実装) の手動の方法でリソースをデプロイするの部分について見ていきます。

Microsoft Learn

Microsoft が公式で提供している無料オンライン学習サービス Microsoft Learn で、DP-300 関連の学習コンテンツが案内されています。

また、ラーニングパスごとではなく、1 つのコレクションで全モジュールを確認したい方向けに、以下のコレクションを作成して公開しています。(非公式)

データ プラットフォーム リソースの計画と実装 (15-20%)

このカテゴリは、主に以下の内容に関する知識が問われるようになっています。

  • 手動の方法でリソースをデプロイする
  • 特定の要件に基づいて適切なデータベースの提供を推奨する
  • スケールとパフォーマンスのためのリソースを構成する
  • Azure に移行するための戦略を評価する
  • Azure に移行するための移行またはアップグレード戦略を実装する

関連する Microsoft Learn のモジュール/ラーニングパスとしては、以下が該当すると思います。

手動の方法でリソースをデプロイする

Azure 上で Azure SQL DatabaseAzure SQL Managed Instance のリソースをどのように手動でデプロイ(展開)するのかを押さえておく感じですね。
ここは、おそらく個人/業務で Azure を触ったことのある人、既に Azure SQL Database などのデプロイ経験がある人はそこまで難しくないと思います。

Microsoft Learn のモジュールにも、デプロイの演習できる内容があるので、未経験でも安心してください。
また、経験者も受験前に一度は Microsoft Learn のモジュールなどを活用して、デプロイの確認をすると良いと思います。

ここで押さえておく内容としては、スキルシートでは以下のように記載されています。

  • 選択したプラットフォームにデータベース製品をデプロイする
  • カスタマイズされたデプロイテンプレートを構成する
  • ハイブリッドおよび IaaS デプロイメントのためのパッチとアップデートの適用

選択したプラットフォームにデータベース製品をデプロイする

Azure SQL 関連のデータベースサービスをデプロイする時は、以下の内容をデプロイ前に決めておく必要があります。

  • デプロイ方法: Azure ポータル上 (GUI) または コマンド (CLI)
  • デプロイするサービスの種別:
    • 仮想マシン (VM)
    • Azure SQL Database
      • 単一データベース (Single)
      • エラスティックプール (Elastic pool)
    • Azure SQL Managed Instance
  • 購入モデル (Azure SQL Database のみ): 仮想コア または DTU
  • サービス レベル (サービス レベル目標): General Purpose、Business Critical、または Hyperscale
  • ハードウェア: Gen5 または何か新しいもの
  • コンピューティングとストレージ: 仮想コア数とデータ(ストレージ)の最大サイズ

Azure SQL Managed Instance pool については、プレビュー段階のため、2021/1/27 更新分では出題対象外です。
参考ドキュメント: Azure SQL Managed Instance プール (プレビュー) とは

また、Azure SQL Manages Instance と Azure SQL Database には、購入モデル、サービスレベル、仮想コア数 (または DTU) の違いによるリソース制限があります。
制限される代表的な内容は、以下の通りです。

  • 機能 (IOPS やインメモリ OLTP etc.)
  • メモリ
  • 最大ログサイズ
  • tempdb のサイズ
  • 最大同時 worker 数
  • バックアップ保持期間 など

Azure ポータル上でのデプロイ設定

基本的には、以下の内容を設定していくことになります。
ペインとは、ざっくり言うなら、デプロイにおける設定内容のカテゴリのようなものだと思ってください。
Azure ポータルの場合は、ペイン毎にデプロイ前の設定画面が表示されるようになっています。

ペイン 内容
基本 サブスクリプション
リソースグループ
管理インスタンス・サーバー名
データベース名
管理者ユーザー名とパスワード
リージョン
コンピューティングとストレージ
エラスティックプール設定 (Azure SQL DB のみ)
ネットワーク接続 パブリック/プライベートアクセス
VNet、ファイアウォール規則
接続種類 (Azure SQL MI のみ)
追加設定 データソース (Azure SQL DB のみ)
データベースの照合順序 (Azure SQL DB のみ)
サーバーの照合順序 (Azure SQL MI のみ)
タイムゾーン (Azure SQL MI のみ)
Advanced Data Security の設定
タグ
確認と作成 使用条件とプライバシー

仮想コア数やデータの最大サイズは、データベースを移行する場合は、通常、オンプレミスで使用しているものと同様のサイズを設定します。Data Migration Assistant SKU Recommender などを使い、最適値を見積もることもできます。
データの最大サイズとは、データベース内に保存することができるデータ量の最大値のことです。ログ領域のデータ量は、これには含まれません。
データの最大値に達すると、Azure SQL Database では メッセージ 1105、Azure SQL Managed Instance では メッセージ 1133 が表示されるようになります。
また、一般的な Azure SQL Database / Azure SQL Managed Instance では、ログ領域(トランザクションログ)の最大サイズは、常にデータの最大サイズの 30 % で設定されます。Azure SQL Database Hyperscale レベルのみ、他のレベルと異なり、この最大サイズの値は 1 TB 固定になります。

Azure SQL Database と Azure SQL Managed Instance では、ネットワークの選択肢が多少異なっています。
共通点としては、どちらもパブリック/プライベートのエンドポイントを設定できます。
Azure SQL Database は、ネットワーク設定の既定値はアクセスなしになっているので、これを変更する対応が出てきます。また、Azure サービスおよびリソースにこのサーバーへのアクセスを許可するオプションを設定すれば、Azure 上にリソースからも作成した SQL Database にアクセスができるようになります。またクライアント端末からアクセスできるようにするには、 現在のクライアント IP アドレスを追加するオプションの設定が必要になります。
また、データベースへの接続ルートについては、Azure SQL Database / Azure SQL Managed Instance 両方とも、既定で 外部からの接続に対してはプロキシ、Azure 内の接続に対してはリダイレクト の接続ポリシーが設定されています。(Azure SQL Database はデプロイ後、Azure SQL Managed Instance はデプロイ時に変更可能です)

最高レベルのプロキシモードでは、すべての接続がゲートウェイ経由でプロキシされます。 リダイレクトモードでは、接続が確立され、ゲートウェイ (上の図の redirect-find-db) が使用された後、Azure SQL Database または Azure SQL Managed Instance に直接接続できるようになります。
リダイレクト (直接接続) モードを使用すると、待機時間を短縮し、スループットを向上させることが可能です。ただし、受信および送信の通信を可能にするために、11000 から 11999 の範囲で追加のポートを開く必要が発生します。

データソース部分では、Azure SQL Database のみ、デプロイ時にサンプルデータベースの AdventureWorksLT をデプロイするか選択することができます。また、空のデータベースをデプロイしたり geo レプリケートされているバックアップからの復元に基づいてデータベースを作成することも可能です。

照合順序は、Azure SQL Database や Azure SQL Managed Instance を作成する際に非常に重要な設定項目です。
特定文字や言語の扱い方、データの並べ替え規則、大文字小文字の区別、アクセント区別などのプロパティ値は、照合順序によって決定されます。
Azure SQL Database では、サーバーの照合順序は SQL_Latin1_General_CP1_CI_AS が既定で変更ができません。データベースの照合順序は設定できるようになっており、リソース作成後は変更不可となります。
Azure SQL Managed Instance では、サーバーの照合順序はリソース作成時に設定可能です。
照合順序については、以下の内容が参考になります。

デプロイ後は、データを実際に読み込ませることが必要になると思います。
データ読み込みの詳細については、以下の Microsoft Learn モジュール内に記載があるオプションを読んでおくといいと思います。

Azure PowerShell でのデプロイ

Azure SQL Database および Azure SQL Managed Instance を Azure PowerShell で作成する時のコマンドを確認しておきます。

Azure Cloud Shell とは、Azure PowerShell や Azure CLI を Azure ポータル上で実行できる環境のことなので説明は割愛します。
また、Azure へのログインやリソースグループの作成などについても、この内容に関わらず Azure 操作の基本部分であるため、説明は割愛します。

Azure SQL Database を Azure PowerShell でデプロイ

Azure SQL Database を Azure PowerShell コマンドのみで作成する時は、論理サーバーの作成とファイアウォールルールの設定単一データベースまたはエラスティックプールの作成の 2 つを実施することになります。

syntaxpowershell
# 論理サーバーの作成
New-AzSqlServer
   -ServerName <String> # 新しい論理サーバーの名前を指定
   -SqlAdministratorCredentials <PSCredential> # 新しい論理サーバーにおけるサーバー管理者の資格情報を指定 (System.Management.Automation.PSCredential)
   -Location <String> # 新しい論理サーバーをデプロイするリージョンを指定
   [-Tags <Hashtable>]
   [-ServerVersion <String>] # 新しい論理サーバーのバージョンを指定 2.0 (v11) or 12.0 (v12)
   [-AssignIdentity] # Azure Key Vault などのキー管理サービスで使用するために、このサーバーの Azure AD Identity を生成して割り当てる
   [-PublicNetworkAccess <String>] # サーバーへのパブリックネットワークアクセスを許可するかどうかを指定する有効/無効のフラグを設定 無効=プライベートリンク接続のみとなる
   [-MinimalTlsVersion <String>] # 最小の TLS バージョンを指定
   [-AsJob] # バックグラウンドでコマンドレットを実行
   [-ResourceGroupName] <String> # 新しい論理サーバーのデプロイ先となるリソースグループ名を指定
   [-DefaultProfile <IAzureContextContainer>] # Azure との通信に使用される資格情報、アカウント、テナント、およびサブスクリプション情報を設定
   [-WhatIf] # コマンドレットを実行するとどうなるかを確認 (コマンドレット自体は実行されない)
   [-Confirm] # コマンドレット実行前に確認を求めるプロンプトを表示
   [<CommonParameters>]

# 論理サーバーのファイアウォールルール(IP制限設定時)を作成
New-AzSqlServerFirewallRule
   -FirewallRuleName <String> # 新しいファイアウォールルールの名前を指定
   -StartIpAddress <String> # ファイアウォールルールの IP アドレス範囲の開始値を指定
   -EndIpAddress <String> # ファイアウォールルールの IP アドレス範囲の終了値を指定
   [-ServerName] <String> # ファイアウォールルールを適用する論理サーバのサーバー名(DNS 名ではなくサーバー名) を指定
   [-ResourceGroupName] <String> # 論理サーバーが割り当てられているリソースグループ名を指定
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
# 論理サーバーのファイアウォールルール(Azure IP 全開放)を作成
New-AzSqlServerFirewallRule
   [-AllowAllAzureIPs] # すべての Azure IP アドレスに論理サーバーへのアクセスを許可
   [-ServerName] <String> # 論理サーバーが割り当てられているリソースグループ名を指定
   [-ResourceGroupName] <String> # ファイアウォールルールを適用する論理サーバのサーバー名(DNS 名ではなくサーバー名) を指定
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

# (エラスティックプール時のみ) SQL Database 用のエラスティックデータベースプールを作成 (仮想コア ver.)
New-AzSqlElasticPool
   [-ElasticPoolName] <String> # エラスティックプールの名前を指定
   -Edition <String> # エラスティックプールに使用される Azure SQL Database のエディションを指定 {None/Basic/Standard/Premium/DataWarehouse/Free/Stretch/GeneralPurpose/BusinessCritical}
   [-StorageMB <Int32>] # エラスティックプールのストレージ制限を MB 単位で指定 このパラメーターを指定しない場合は DTU パラメーターの値に依存する値を計算
   -VCore <Int32> # エラスティックプールの vCore の合計共有数を指定
   -ComputeGeneration <String> # 割り当てるコンピューティング世代を指定
   [-DatabaseVCoreMin <Double>] # プール内の単一データベースがプールで消費できる vCoreの最小数を指定
   [-DatabaseVCoreMax <Double>] # プール内の単一データベースがプールで消費できる vCoreの最大数を指定
   [-Tags <Hashtable>]
   [-ZoneRedundant] # エラスティックプールに関連付けるゾーン冗長性を指定
   [-LicenseType <String>] # Azure SQL Database のライセンス種別を指定
   [-AsJob]
   [-ServerName] <String> # エラスティックプールをホストするサーバーの名前を指定
   [-ResourceGroupName] <String> # エラスティックプールのデプロイ先となるリソースグループ名を指定
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
# (エラスティックプール時のみ) SQL Database 用のエラスティックデータベースプールを作成 (DTU ver.)
New-AzSqlElasticPool
   [-ElasticPoolName] <String> # エラスティックプールの名前を指定
   [-Edition <String>] # エラスティックプールに使用される Azure SQL Database のエディションを指定 {None/Basic/Standard/Premium/DataWarehouse/Free/Stretch/GeneralPurpose/BusinessCritical}
   [-Dtu <Int32>] # エラスティックプールの共有 DTU の総数を指定 (デフォルトは Basic=100 Standard=100 Premium=125)
   [-StorageMB <Int32>] # エラスティックプールのストレージ制限を MB 単位で指定 このパラメーターを指定しない場合は DTU パラメーターの値に依存する値を計算
   [-DatabaseDtuMin <Int32>] # エラスティックプールがプール内のすべてのデータベースに保証する DTU の最小数を指定 (デフォルトは 0)
   [-DatabaseDtuMax <Int32>] # プール内の単一データベースが消費できるデータベーススループットユニット (DTU) の最大数を指定 Basic=5 Standard=100 Premium=125
   [-Tags <Hashtable>]
   [-ZoneRedundant] # エラスティックプールに関連付けるゾーン冗長性を指定
   [-LicenseType <String>]
   [-AsJob]
   [-ServerName] <String> # エラスティックプールをホストするサーバーの名前を指定
   [-ResourceGroupName] <String> # エラスティックプールのデプロイ先となるリソースグループ名を指定
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

# 単一データベースを作成
New-AzSqlDatabase
   -DatabaseName <String> # データベース名を指定
   [-CollationName <String>] # データベースの照合順序を指定 (デフォルトは SQL_Latin1_General_CP1_CI_AS)
   [-CatalogCollation <String>] # カタログ照合の名前を指定
   [-MaxSizeBytes <Int64>] # データベースの最大サイズをバイト単位で指定
   -Edition <String> # データベースに割り当てるエディションを指定 {None/Basic/Standard/Premium/DataWarehouse/Free/Stretch/GeneralPurpose/BusinessCritical}
   [-ReadScale <DatabaseReadScale>] # (Premium および Business Critical 専用) 有効の場合、接続文字列でアプリケーションインテントが読み取り専用に設定されている接続は読み取り専用のセカンダリレプリカにルーティングされる場合がある
   [-Tags <Hashtable>]
   [-SampleName <String>] # (サンプルデータベース作成時のみ) スキーマ名を指定 {AdventureWorksLT}
   [-ZoneRedundant] # ゾーン冗長性を設定
   [-AsJob]
   [-Force] # ユーザーの確認を求めずにコマンドを強制的に実行
   -VCore <Int32> # データベースの vCore 数を指定
   -ComputeGeneration <String>
   [-LicenseType <String>] # データベースのライセンス種別を指定(Azure ハイブリット特典) {LicenseIncluded/BasePrice}
   [-ComputeModel <String>] # コンピューティングモデルを指定 {Serverless/Provisioned}
   [-AutoPauseDelayInMinutes <Int32>] # データベース (サーバーレスのみ) の自動一時停止遅延 (分単位) を設定 無効化する場合は -1 を指定
   [-MinimumCapacity <Double>] # (サーバレス専用) 一時停止しない場合でもデータベースが常に割り当てる最小容量 (vCore 数など) を指定
   [-HighAvailabilityReplicaCount <Int32>] # (HyperScale 専用) 読み取り専用アプリケーションインテント接続がルーティングされる可能性のあるデータベースに関連付けられている読み取り専用セカンダリレプリカの数を指定
   [-BackupStorageRedundancy <String>] # バックアップを保存するために使用されるバックアップストレージの冗長性を指定 {Local/Zone/Geo}
   [-SecondaryType <String>] # (セカンダリ作成時のみ) データベースのセカンダリ種別を指定 {Geo/Named}
   [-ServerName] <String> # データベースをホストする論理サーバー名を指定
   [-ResourceGroupName] <String> # 論理サーバーが割り当てられているリソースグループ名を指定
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
# エラスティックデータベースを作成
New-AzSqlDatabase
   -DatabaseName <String> # データベース名を指定
   [-CollationName <String>] # データベースの照合順序を指定 (デフォルトは SQL_Latin1_General_CP1_CI_AS)
   [-CatalogCollation <String>] # カタログ照合の名前を指定
   [-MaxSizeBytes <Int64>] # データベースの最大サイズをバイト単位で指定
   [-Edition <String>] # データベースに割り当てるエディションを指定 {None/Basic/Standard/Premium/DataWarehouse/Free/Stretch/GeneralPurpose/BusinessCritical}
   [-RequestedServiceObjectiveName <String>] # データベースに割り当てるサービス目標名を指定
   [-ElasticPoolName <String>] # データベースを配置するエラスティックプール名を指定
   [-ReadScale <DatabaseReadScale>] # (Premium および Business Critical 専用) 有効の場合、接続文字列でアプリケーションインテントが読み取り専用に設定されている接続は読み取り専用のセカンダリレプリカにルーティングされる場合がある
   [-Tags <Hashtable>]
   [-SampleName <String>] # (サンプルデータベース作成時のみ) スキーマ名を指定 {AdventureWorksLT}
   [-ZoneRedundant] # ゾーン冗長性を設定
   [-AsJob]
   [-Force] # ユーザーの確認を求めずにコマンドを強制的に実行
   [-LicenseType <String>] # データベースのライセンス種別を指定(Azure ハイブリット特典) {LicenseIncluded/BasePrice}
   [-AutoPauseDelayInMinutes <Int32>] # (サーバーレス専用) 自動一時停止遅延 (分単位) を設定 無効化する場合は -1 を指定
   [-MinimumCapacity <Double>] # (サーバレス専用) 一時停止しない場合でもデータベースが常に割り当てる最小容量 (vCore 数など) を指定
   [-HighAvailabilityReplicaCount <Int32>] # (HyperScale 専用) 読み取り専用アプリケーションインテント接続がルーティングされる可能性のあるデータベースに関連付けられている読み取り専用セカンダリレプリカの数を指定
   [-BackupStorageRedundancy <String>] # バックアップを保存するために使用されるバックアップストレージの冗長性を指定 {Local/Zone/Geo}
   [-SecondaryType <String>] # (セカンダリ作成時のみ) データベースのセカンダリ種別を指定 {Geo/Named}
   [-ServerName] <String> # データベースをホストする論理サーバー名を指定
   [-ResourceGroupName] <String> # 論理サーバーが割り当てられているリソースグループ名を指定
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

コマンド関連の詳細については、一度確認しておくと良いと思います。

Azure SQL Managed Instance を Azure PowerShell でデプロイ

Azure SQL Managed Instance を Azure PowerShell コマンドのみで作成する時は、大きく分けて 仮想ネットワーク (VNet) の作成サービス委任の作成Azure SQL Managed Instance の作成の 3 つを実施することになります。
仮想ネットワーク (VNet) の作成にあたっては、ネットワークセキュリティグループルートテーブルおよび専用サブネットを作成または設定が合わせて必要になります。

syntaxpowershell
# ネットワークセキュリティグループを作成
New-AzNetworkSecurityGroup
   -Name <String> # ネットワークセキュリティグループ (NSG) 名を指定
   -ResourceGroupName <String> # ネットワークセキュリティグループ (NSG) のデプロイ先となるリソースグループ名を指定
   -Location <String> # ネットワークセキュリティグループを作成するリージョンを指定
   [-SecurityRules <PSSecurityRule[]>] # ネットワークセキュリティグループ (NSG) に作成するネットワークセキュリティルールオブジェクトのリストを指定 New-AzNetworkSecurityRuleConfig
   [-Tag <Hashtable>]
   [-Force]
   [-AsJob]
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

# ネットワークセキュリティルール構成をネットワークセキュリティグループに追加 (パターン 1)
Add-AzNetworkSecurityRuleConfig
   -Name <String> # ネットワークセキュリティルール構成の名前を指定
   -NetworkSecurityGroup <PSNetworkSecurityGroup> # ネットワークセキュリティルール構成を追加する NetworkSecurityGroup オブジェクトを指定
   [-Description <String>] # ネットワークセキュリティルール構成の説明を指定
   [-Protocol <String>] # ルール構成が適用されるネットワークプロトコルを指定 {Tcp/Udp/両方に一致するワイルドカード文字 (*)}
   [-SourcePortRange <String[]>] # 送信元ポートまたは範囲を指定 {整数/0〜65535 の整数の範囲/任意の送信元ポートに一致するワイルドカード文字 (*)}
   [-DestinationPortRange <String[]>] # 宛先ポートまたは範囲を指定 {整数/0〜65535 の整数の範囲/任意の宛先ポートに一致するワイルドカード文字 (*)}
   [-SourceAddressPrefix <String[]>] # 送信元アドレスプレフィックスを指定 {クラスレスドメイン間ルーティング (CIDR) アドレス/送信元 IP アドレス範囲/任意の IP アドレスに一致するワイルドカード文字 (*) etc.}
   [-DestinationAddressPrefix <String[]>] # 宛先アドレスプレフィックスを指定 {クラスレスドメイン間ルーティング (CIDR) アドレス/宛先 IP アドレス範囲/任意の IP アドレスに一致するワイルドカード文字 (*) etc.}
   [-SourceApplicationSecurityGroup <PSApplicationSecurityGroup[]>] # (SourceAddressPrefix と同時利用不可) ルールの送信元として設定されたアプリケーションセキュリティグループオブジェクトを指定
   [-DestinationApplicationSecurityGroup <PSApplicationSecurityGroup[]>] # (DestinationAddressPrefix と同時利用不可) ルールの宛先として設定されたアプリケーションセキュリティグループを指定
   [-Access <String>] # ネットワークトラフィックを許可するか拒否するかを指定 {Allow/Deny}
   [-Priority <Int32>] # ルール構成の優先度を指定 {100 から 4096 までの整数}
   [-Direction <String>] # ルールを着信トラフィックと発信トラフィックのどちらで評価するかを指定 {Inbound/Outbound}
   [-DefaultProfile <IAzureContextContainer>]
   [<CommonParameters>]
# ネットワークセキュリティルール構成をネットワークセキュリティグループに追加 (パターン 2)
Add-AzNetworkSecurityRuleConfig
   -Name <String>=
   -NetworkSecurityGroup <PSNetworkSecurityGroup>
   [-Description <String>]
   [-Protocol <String>]
   [-SourcePortRange <String[]>]
   [-DestinationPortRange <String[]>]
   [-SourceAddressPrefix <String[]>]
   [-DestinationAddressPrefix <String[]>]
   [-SourceApplicationSecurityGroupId <String[]>] # (SourceAddressPrefix と同時利用不可) ルールの送信元として設定されたアプリケーションセキュリティグループの ID を指定
   [-DestinationApplicationSecurityGroupId <String[]>] # (DestinationAddressPrefix と同時利用不可) ルールの宛先として設定されたアプリケーションセキュリティグループの ID を指定
   [-Access <String>]
   [-Priority <Int32>]
   [-Direction <String>]
   [-DefaultProfile <IAzureContextContainer>]
   [<CommonParameters>]

# ルートテーブルを作成
New-AzRouteTable
   -ResourceGroupName <String> # ルートテーブルのデプロイ先となるリソースグループ名を指定
   -Name <String> # ルートテーブル名を指定
   [-DisableBgpRoutePropagation] # BGPルートの自動伝播を無効化
   -Location <String> # ルートテーブルを作成するリージョンを指定
   [-Tag <Hashtable>]
   [-Route <PSRoute[]>] # ルートテーブルに関連付ける Route オブジェクトの配列を指定 Microsoft.Azure.Commands.Network.Models.PSRoute
   [-Force]
   [-AsJob]
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

# 仮想ネットワーク (VNet) を作成
New-AzVirtualNetwork
   -Name <String> # 仮想ネットワーク (VNet) 名を指定
   -ResourceGroupName <String> # 仮想ネットワーク (VNet) のデプロイ先となるリソースグループ名を指定
   -Location <String> # 仮想ネットワーク (VNet) を作成するリージョンを指定
   -AddressPrefix <String[]> # IP アドレスの範囲 (サブネット) を指定
   [-DnsServer <String[]>] # サブネットの DNS サーバーを指定
   [-Subnet <PSSubnet[]>] # 仮想ネットワーク (VNet) に関連付けるサブネットのリストを指定
   [-BgpCommunity <String>] # ExpressRoute を介してアドバタイズされた BGP コミュニティ
   [-Tag <Hashtable>]
   [-EnableDdosProtection] # DDoS保護が有効化
   [-DdosProtectionPlanId <String>] # 仮想ネットワーク (VNet) に関連付けられた DDoS 保護計画リソースへの参照を指定
   [-IpAllocation <PSIpAllocation[]>] # 仮想ネットワーク (VNet) の IpAllocations を指定 New-AzIpAllocation
   [-Force]
   [-AsJob]
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

# サブネット構成を仮想ネットワーク (VNet) に追加 (パターン 1)
Add-AzVirtualNetworkSubnetConfig
   -Name <String> # 追加するサブネット構成の名前を指定
   -VirtualNetwork <PSVirtualNetwork> # サブネット構成を追加する仮想ネットワーク (VNet) オブジェクトを指定 New-AzVirtualNetwork
   -AddressPrefix <String[]> # サブネット構成のIPアドレスの範囲を指定
   [-NetworkSecurityGroup <PSNetworkSecurityGroup>] # PSNetworkSecurityGroup オブジェクトに仮想ネットワークサブネット構成を追加
   [-RouteTable <PSRouteTable>] # ルートテーブルのオブジェクトを指定 New-AzRouteTable
   [-InputObject <PSNatGateway>] # サブネット構成に関連付けられている NAT ゲートウェイを指定
   [-ServiceEndpoint <String[]>] # サービスエンドポイント値を指定
   [-ServiceEndpointPolicy <PSServiceEndpointPolicy[]>] # サービスエンドポイントポリシーのオブジェクトを指定
   [-Delegation <PSDelegation[]>] # このサブネットで操作を実行する権限を持つサービスのリストを指定
   [-PrivateEndpointNetworkPoliciesFlag <String>] # サブネット内のプライベートエンドポイントへのネットワークポリシーの適用の有効化/無効化を指定
   [-PrivateLinkServiceNetworkPoliciesFlag <String>] # サブネット内のプライベートリンクサービスへのネットワークポリシーの適用の有効化/無効化を指定
   [-IpAllocation <PSIpAllocation[]>] # サブネットの IpAllocations を指定 New-AzIpAllocation
   [-DefaultProfile <IAzureContextContainer>]
   [<CommonParameters>]
# サブネット構成を仮想ネットワーク (VNet) に追加 (パターン 2)
Add-AzVirtualNetworkSubnetConfig
   -Name <String>
   -VirtualNetwork <PSVirtualNetwork>
   -AddressPrefix <String[]>
   [-NetworkSecurityGroupId <String>] # ネットワークセキュリティグループのIDを指定
   [-RouteTableId <String>] # ルートテーブルの ID を指定
   [-ResourceId <String>] # サブネット構成に関連付けられた NAT ゲートウェイリソースの ID を指定
   [-ServiceEndpoint <String[]>]
   [-ServiceEndpointPolicy <PSServiceEndpointPolicy[]>]
   [-Delegation <PSDelegation[]>]
   [-PrivateEndpointNetworkPoliciesFlag <String>]
   [-PrivateLinkServiceNetworkPoliciesFlag <String>]
   [-IpAllocation <PSIpAllocation[]>]
   [-DefaultProfile <IAzureContextContainer>]
   [<CommonParameters>]

# サービス委任を作成
New-AzDelegation
   -Name <String> # 作成するサービス委任の名前を指定
   -ServiceName <String> # サブネットの委任先となるサービス名を指定
   [-DefaultProfile <IAzureContextContainer>]
   [<CommonParameters>]

# Azure SQL Managed Instance を作成 (コンピューティング世代指定 ver.)
New-AzSqlInstance
   [-Name] <String> # 新しい Azure SQL MI の名前を指定
   [-ResourceGroupName] <String> # 新しい Azure SQL MI のデプロイ先となるリソースグループ名を指定
   -AdministratorCredential <PSCredential> # SQL 認証の資格情報を指定 (System.Management.Automation.PSCredential)
   -Location <String> # 新しい Azure SQL MI をデプロイするリージョンを指定
   -SubnetId <String> # インスタンスの作成に使用するサブネット ID を指定
   [-LicenseType <String>] # 使用するライセンス種別を指定(Azure ハイブリット特典) {LicenseIncluded/BasePrice}
   [-StorageSizeInGB <Int32>] # Azure SQL MI のストレージサイズを GB 単位で指定
   -VCore <Int32> # Azure SQL MI の vCore の量を指定
   -Edition <String> # インスタンスのエディションを指定
   -ComputeGeneration <String> # インスタンスのコンピューティング世代を指定
   [-Collation <String>] # サーバーの照合順序を指定 (デフォルトは SQL_Latin1_General_CP1_CI_AS)
   [-PublicDataEndpointEnabled] # インスタンスに対してパブリックデータエンドポイントを有効化
   [-ProxyOverride <String>] # Azure SQL MI への接続に使用される接続種別を指定 {Proxy/Redirect}
   [-TimezoneId <String>] # Azure SQL MI のタイムゾーンを ID で指定 (sys.time_zone_info ビュー値参照)
   [-Tag <Hashtable>]
   [-AssignIdentity] # Azure Key Vault などのキー管理サービスで使用するために、このサーバーの Azure AD Identity を生成して割り当てる
   [-DnsZonePartner <String>] # 管理対象インスタンスの作成のために DnsZone プロパティを継承するパートナー管理対象サーバーのリソース ID を指定
   [-MinimalTlsVersion <String>] # 最小の TLS バージョンを指定
   [-BackupStorageRedundancy <String>] # バックアップを保存するために使用されるバックアップストレージの冗長性を指定 {Local/Zone/Geo}
   [-MaintenanceConfigurationId <String>] # メンテナンス構成 ID を指定
   [-AsJob]
   [-Force]
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
# Azure SQL Managed Instance を作成 (SKU 指定 ver.)
New-AzSqlInstance
   [-Name] <String>
   [-ResourceGroupName] <String>
   -AdministratorCredential <PSCredential>
   -Location <String>
   -SubnetId <String>
   [-LicenseType <String>]
   [-StorageSizeInGB <Int32>]
   -VCore <Int32>
   -SkuName <String> # インスタンスの SKU 名を指定 (ex. GP_Gen4, BC_Gen4)
   [-Collation <String>]
   [-PublicDataEndpointEnabled]
   [-ProxyOverride <String>]
   [-TimezoneId <String>]
   [-Tag <Hashtable>]
   [-AssignIdentity]
   [-DnsZonePartner <String>]
   [-MinimalTlsVersion <String>]
   [-BackupStorageRedundancy <String>]
   [-MaintenanceConfigurationId <String>]
   [-AsJob]
   [-Force]
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

コマンド関連の詳細については、一度確認しておくと良いと思います。

Azure CLI でのデプロイ

Azure SQL Database および Azure SQL Managed Instance 作成の流れは、Azure PowerShell の時と同様です。
それぞれ、関連コマンドとしてリンク先の内容を確認しておくといいと思います。

Azure SQL Database を Azure CLI でデプロイ

Azure SQL Database を Azure CLI でデプロイ

カスタマイズされたデプロイテンプレートを構成する

Azure PowerShell や Azure CLI で各リソースをコマンド入力しながら作成するのもありですが、より細かい設定や制御を行うには、ARM テンプレートを使用することになります。
ARM テンプレートで設定できる内容については、以下のリファレンスに記載されているので、確認してください。

また、ARM テンプレートについては、GitHub 上で Microsoft 公式のサンプルが公開されています。
まずはじめに見てみると良いと思います。

Azure Resource Manager テンプレートを使用して Azure PowerShell でデプロイ

Azure PowerShell では、New-AzResourceGroupDeployment コマンドを使用して、ARM テンプレートを使用したデプロイを実行できます。
詳細については、以下を確認してください。

Azure Resource Manager テンプレートを使用して Azure CLI でデプロイ

もちろん、Azure CLI でも、ARM テンプレートを使用して Azure SQL Database / Azure SQL Managed Instance をデプロイすることが可能です。
Azure CLI で ARM テンプレートを使用したデプロイを行う方法については、以下の内容を確認してください。

ハイブリッドおよび IaaS デプロイメントのためのパッチとアップデートの適用

オンプレミスの SQL Server から、Azure SQL Database や Azure SQL Managed Instance へ移行するにあたって、パッチの適用やバージョンの差分を確認しておく必要があります。
これは、Azure SQL Database のような、Azure 側で自動でパッチやアップデートが適用される環境に対して、オンプレミスのように塩漬けでパッチ適用をしていないような環境からの移行を行った場合、移行後の環境でサービスの動作に影響が出ないことを予め確認しておくためです。
また、(サポートが切れている) SQL Server のエディションや最新のパッチが適用されていない環境などは、移行前にオンプレミス環境のアップデートやパッチ適用が必要になる場合があります。

詳細については、以下の内容を確認すると良いと思います。

Part.1 まとめ

今回は、Plan and Implement Data Platform Resources (データ プラットフォーム リソースの計画と実装) の手動の方法でリソースをデプロイするの部分について、関連するであろう内容を確認しました。
次回は、データ プラットフォーム リソースの計画と実装の特定の要件に基づいて適切なデータベースの提供を推奨する以降の部分について見ていこうと思います。