PowerShellでAzure SQL Databaseを作成する方法

SQLデータベースに変更を加える必要がある場合、SQL Server Management Studioを開いて少し操作することで実現できます。しかし、自動化スクリプトでAzure SQLデータベースを10回または100回作成する場合はどうなるでしょうか?それにはPowerShellを使用する必要があります!

このチュートリアルでは、PowerShellを使用してAzure SQLデータベースとSQLサーバーファイアウォールルールを作成する方法を学びます!

さあ、始めましょう!

前提条件

このチュートリアルのデモに従うために、次のものが必要です:

  • A computer to run PowerShell – This tutorial uses Windows 10 using PowerShell v7.1.
  • A code editor like Visual Studio (VS) Code.
  • Az PowerShellモジュール – このチュートリアルではv5.9.0を使用します。
  • dbatools PowerShellモジュール – このチュートリアルではv1.0.145を使用します。
  • Azureリソースグループ – このチュートリアルでは、westeuropeリージョンのrg-dbaautomationというリソースグループを使用します。
  • PowerShellでAzureに認証されています。

Azure SQLサーバーの作成

Azure SQLデータベースを作成する前に、それをホストするためのAzure SQLサーバーを作成する必要があります。既にAzureに認証されていると仮定します:

ローカルコンピュータでPowerShellを開き、Azure SQLデータベースをホストするAzure SQLサーバーを作成してください。

以下のコマンドは、前提となるリソースグループでsqlestateという名前のAzure SQLサーバーを作成し、SQL管理者のユーザー名をSqlAdministrator、パスワードをAVeryStrongP@ssword0に設定しています。コマンドは、後で作成されたサーバーの属性を使用するためにNew-AzSqlServerコマンドレットの出力を保存しています。

データベースの要件を満たす限り、SQL管理者のユーザー名とパスワードを任意で作成することができます。

SQLサーバー名はグローバルにユニークである必要があります。

## パスワードを安全な文字列に変換する(PSCredentialの作成に必要)
## オブジェクトの作成が必要です
$pw = ConvertTo-SecureString -String 'AVeryStrongP@ssword0' -AsPlainText -Force

## New-AzSqlServerコマンドレットに渡すPSCredentialオブジェクトを作成する
$credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList 'SqlAdministrator',$pw 

## Azure SQL Serverを作成する
$azSqlServer = New-AzSqlServer `
	-ServerName 'sqlestate123' `
	-ResourceGroupName 'rg-dbaautomation' `
	-Location 'westeurope' `
	-SqlAdministratorCredentials $credential

Azure SQL Serverファイアウォールルールの作成

Azure SQL Serverはデフォルトで外部エンティティへのアクセスを許可しません。サーバーに接続するには、まずサーバーファイアウォールルールを作成して、ローカルマシンからSQL Serverにアクセスする必要があります。

サーバーファイアウォールルールを作成するには、ローカルコンピュータのパブリックIPアドレスを見つけ、New-AzSqlServerFirewallRuleコマンドレットを呼び出してルールを作成します。

以下のコマンドは、ウェブサイトhttp://ipinfo.ioを使用してコンピュータのパブリックIPアドレスを見つけ、rg-dbaautomationリソースグループでFirewallRule_Accessという名前のファイアウォールルールを作成し、そのIPアドレスをすべてのIP範囲に指定しています。

## ウェブサイトをクエリしてローカルのパブリックIPアドレスを見つける
$ip = Invoke-RestMethod <https://ipinfo.io/json> | Select-Object -ExpandProperty IP

## パブリックIPアドレスを使用してサーバーファイアウォールルールを作成する
New-AzSqlServerFirewallRule -ResourceGroupName 'rg-dbaautomation' -ServerName $azSqlServer.ServerName -FirewallRuleName 'FirewallRule_Access' -StartIpAddress $ip -EndIpAddress $ip
Creating the Azure SQL Server firewall rule

Azure SQL データベースの作成方法

最後に、Azure SQL サーバーとファイアウォールのルールを作成したら、New-AzSqlDatabase コマンドレットを使用してデータベースを作成します

以下のコマンドは、作成したサーバーにホストされるBasic エディションの Azure SQL データベースEstateを作成します。

使用可能なすべてのエディションを確認するには、Get-AzSqlServerServiceObjective PowerShell コマンドレットを実行します

New-AzSqlDatabase -ResourceGroupName 'rg-dbaautomation' -ServerName $azSqlServer.ServerName -DatabaseName 'Estate' -Edition 'Basic'
Creating the Azure SQL database

Azure SQL データベースへの接続

Azure サブスクリプションで実行されている Azure SQL データベースに接続できるようになりました。次に、以下のコードを使用してデータベースに接続できるか確認します。Connect-DbaInstance PowerShell コマンドレットを使用します。

以前に作成した Azure SQL サーバーの FQDN、データベースの名前、および SQL 管理者資格情報を使用して、データベースへの接続をテストします。

## インスタンスに接続のテスト
Connect-DbaInstance -SqlInstance $azSqlServer.FullyQualifiedDomainName -Database $azSqlDatabase.DatabaseName -SqlCredential $credential

データベースに接続できた場合、次の出力が表示されます:

Running Connect-DbaInstance

まとめ

上記の手順をすべて含む単一の PowerShell スクリプトに保存したい場合、新しい PowerShell スクリプトを作成し、以下のスニペットをコピーして貼り付けます。

$rg = New-AzResourceGroup -Name 'rg-dbaautomation' -Location 'westeurope'

## パスワードを安全な文字列に変換して、PSCredential を作成する
## オブジェクトが必要です
$pw = ConvertTo-SecureString -String 'AVeryStrongP@ssword0' -AsPlainText -Force

## New-AzSqlServer コマンドレットに渡す PSCredential オブジェクトを作成する
$credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList 'SqlAdministrator',$pw 

## Azure SQL Server を作成する
$azSqlServer = New-AzSqlServer `
	-ServerName 'sqlestate123' `
	-ResourceGroupName $rg.ResourceGroupName `
	-Location $rg.Location `
	-SqlAdministratorCredentials $credential

## ウェブサイトをクエリしてローカルのパブリック IP アドレスを見つける
$ip = Invoke-RestMethod <https://ipinfo.io/json> | Select-Object -ExpandProperty IP

## パブリック IP アドレスを使用してサーバーのファイアウォール ルールを作成する
New-AzSqlServerFirewallRule -ResourceGroupName $rg.ResourceGroupName -ServerName $azSqlServer.ServerName -FirewallRuleName 'FirewallRule_Access' -StartIpAddress $ip -EndIpAddress $ip

New-AzSqlDatabase -ResourceGroupName $rg.ResourceGroupName -ServerName $azSqlServer.ServerName -DatabaseName 'Estate' -Edition 'Basic'

## インスタンスに接続をテストする
Connect-DbaInstance -SqlInstance $azSqlServer.FullyQualifiedDomainName -Database $azSqlDatabase.DatabaseName -SqlCredential $credential

Conclusion

PowerShell を使用して Azure SQL データベースを作成することで、Azure Portal を使用するよりもプロセスがスムーズになります。PowerShell を使用すると、Azure SQL サーバーとデータベースを迅速に作成するためのプロセスを自動化できます。

あなたの新しい能力を使って、PowerShell を使用して Azure SQL データベースを作成することが、日常のルーチンにどのように適合するかをどこで見ていますか?

Source:
https://adamtheautomator.com/create-azure-sql-database/