Azure Resource Manager テンプレートと Bicep を使用してデプロイを自動化する
データベースのデプロイの自動化は、信頼性が高く持続可能な開発プロセスを確立するための重要な機能です。 このモジュールでは、データベースのデプロイで ARM テンプレートと bicep ファイルを使用できるようにするための情報も示します。
ARM テンプレート
Azure Resource Manager (ARM) テンプレートは、Azure リソース グループにデプロイするリソースについて記述した JavaScript Object Notation (JSON) ドキュメントです。 ARM テンプレートは宣言型であり、これを使用すると、プログラミング コマンドの完全なシーケンスを記述しなくても、リソースとプロパティを指定できます。
ARM テンプレートを使用すると、宣言型フレームワークを使ってインフラストラクチャ全体を作成およびデプロイできます。 たとえば、仮想マシンだけでなく、そのネットワークとストレージの依存関係も 1 つのドキュメントでデプロイできます。 また、ARM テンプレートによって、相互依存リソースが正しい順序で作成されるようにデプロイを管理するオーケストレーションと、リソースのデプロイ後に PowerShell または Bash スクリプトを実行できる拡張性もサポートされます。
利点
ARM テンプレートには次の利点があります。
反復可能 – ARM テンプレートは "べき等" です。つまり、開発ライフサイクル全体にわたってインフラストラクチャを繰り返しデプロイし、リソースが一貫した方法でデプロイされるという確信を持つことができます。
オーケストレーション – ARM テンプレートを使用すると、デプロイの順序付け操作の複雑さが処理され、可能な場合はシリアルではなく並列でリソースがデプロイされるため、迅速なデプロイが実現します。
モジュール式 – ARM テンプレートは、必要に応じて分割および結合できるため、必要なデプロイを作成できます。
エクスポート可能なコード – テンプレート構文を学習する優れた方法は、現在のテンプレートをエクスポートすることです。 テンプレートをエクスポートすると、ディザスター リカバリーまたはドキュメント化の目的で環境を簡単に再作成できます。
オーサリング ツール – ARM テンプレートは、自由に使用できる Visual Studio Code とテンプレート ツール拡張機能を使用して作成できます。 それには、Intellisense、構文の強調表示、インライン ヘルプ、その他の多くの言語機能が用意されています。 Visual Studio Code に加えて、Visual Studio を使用することもできます。
PowerShell を使用して ARM テンプレートをデプロイする
PowerShell テンプレートと ARM テンプレートを使用する場合、デプロイのスコープにはいくつかのオプションがあります。 デプロイ先としては、リソース グループ、サブスクリプション、管理グループ (同じ Azure テンプレートに含まれるサブスクリプションのコレクションであり、一般に大規模なエンタープライズのデプロイで使用される)、またはテナントを指定できます。
SQL Database で 1 つのデータベースを作成する JSON ARM テンプレート定義を見てみましょう。
{
"$schema": "https://schema.management.azure.com/schemas/2021-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "17606057535442789180"
}
},
"parameters": {
"serverName": {
"type": "string",
"defaultValue": "[uniqueString('sql', resourceGroup().id)]",
"metadata": {
"description": "The name of the SQL logical server."
}
},
"sqlDBName": {
"type": "string",
"defaultValue": "SampleDB",
"metadata": {
"description": "The name of the SQL Database."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
},
"administratorLogin": {
"type": "string",
"metadata": {
"description": "The administrator username of the SQL logical server."
}
},
"administratorLoginPassword": {
"type": "secureString",
"metadata": {
"description": "The administrator password of the SQL logical server."
}
}
},
"resources": [
{
"type": "Microsoft.Sql/servers",
"apiVersion": "2022-02-01",
"name": "[parameters('serverName')]",
"location": "[parameters('location')]",
"properties": {
"administratorLogin": "[parameters('administratorLogin')]",
"administratorLoginPassword": "[parameters('administratorLoginPassword')]"
}
},
{
"type": "Microsoft.Sql/servers/databases",
"apiVersion": "2022-02-01",
"name": "[format('{0}/{1}', parameters('serverName'), parameters('sqlDBName'))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard",
"tier": "Standard"
},
"dependsOn": [
"[resourceId('Microsoft.Sql/servers', parameters('serverName'))]"
]
}
]
}
この例では、1 つのデータベースが 2 つの購入モデルのいずれかで定義されています。 データベースを作成するときは、データベースを管理するサーバーと、データベースが配置される Azure リージョンも指定します。
次の PowerShell の例に示すように、この構成は URI からデプロイできます。
$projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
$location = Read-Host -Prompt "Enter an Azure location (e.g., centralus)"
$adminUser = Read-Host -Prompt "Enter the SQL server administrator username"
$adminPassword = Read-Host -Prompt "Enter the SQL server administrator password" -AsSecureString
$resourceGroupName = "${projectName}rg"
# Create a new resource group
New-AzResourceGroup -Name $resourceGroupName -Location $location
# Deploy resources using an ARM template
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.sql/sql-database/azuredeploy.json" -administratorLogin $adminUser -administratorLoginPassword $adminPassword
このスクリプトは、プロジェクト名、Azure の場所、SQL サーバー管理者のユーザー名、およびパスワードの入力をユーザーに求めます。 次に、指定した場所に新しいリソース グループを作成し、指定された URI から Azure Resource Manager (ARM) テンプレートを使用してリソースをデプロイします。 ARM テンプレートは、指定された管理者資格情報を使用して SQL データベースを設定します。
Bicep
Azure Bicep は、Azure リソースをデプロイするために設計された宣言型言語です。 コードの再利用をサポートする簡潔で信頼性の高い作成エクスペリエンスが提供され、優れたコードとしてのインフラストラクチャ (IaC) ツールになります。
Bicep は、汎用プログラミング言語を意図したものではありません。 代わりに、Azure インフラストラクチャ リソースとそのプロパティを宣言するファイルを作成するための特殊なツールです。 このアプローチにより、開発ライフサイクル全体にわたって一貫したリソースデプロイが保証されます。
利点
次に、Bicep の利点をいくつか示します。
継続的な完全サポート – Bicep では、Azure サービスのすべてのリソースの種類と API バージョンがサポートされています。つまり、リソース プロバイダーが新しいリソースの種類と API バージョンを導入するとすぐに、ツールの更新を待たずに Bicep ファイルでそれらを使用できます。
単純な構文 – 同等の JSON ファイルと比較して、Bicep ファイルは簡潔で読みやすくなりました。
使いやすい: Bicep はプログラミング言語に関する事前の知識を必要とせず、書くのも理解するのも簡単です。

次の例では、Bicep ファイルと、同等の JSON テンプレートの違いを示します。 どちらの例でも、ストレージ アカウントをデプロイします。
{
"$schema": "https://schema.management.azure.com/schemas/2021-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"storageAccountName": {
"type": "string",
"defaultValue": "[format('toylaunch{0}', uniqueString(resourceGroup().id))]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
param location string = resourceGroup().location
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
Bicep と JSON
Bicep と JSON は両方とも、データベースをデプロイするために使用できます。 Bicep はより簡潔で、読みやすくなりました。 データベースをデプロイするための JSON ファイルの例を次に示します。
また、Visual Studio Code 用の Bicep 拡張機能をインストールして Bicep ファイルを作成することもできます。エディターには機能豊富な IntelliSense と、構文の検証機能が用意されています。
Bicep と PowerShell を使用して Azure SQL Database をデプロイする
Bicep と PowerShell を使用して Azure SQL Database を簡単に作成できます。 1 つのデータベースには、2 つの購入モデルのいずれかを使用できる、定義済みのコンピューティング、メモリ、IO、ストレージ リソースのセットが付属しています。 1 つのデータベースを設定する場合は、サーバーを管理し、選択したリージョンの Azure リソース グループ内に配置するサーバーも指定します。
このクイックスタートで使われている Bicep ファイルは、Azure クイックスタート テンプレートのものです。
@description('The name of the SQL logical server.')
param serverName string = uniqueString('sql', resourceGroup().id)
@description('The name of the SQL Database.')
param sqlDBName string = 'SampleDB'
@description('Location for all resources.')
param location string = resourceGroup().location
@description('The administrator username of the SQL logical server.')
param administratorLogin string
@description('The administrator password of the SQL logical server.')
@secure()
param administratorLoginPassword string
resource sqlServer 'Microsoft.Sql/servers@2022-02-01' = {
name: serverName
location: location
properties: {
administratorLogin: administratorLogin
administratorLoginPassword: administratorLoginPassword
}
}
resource sqlDB 'Microsoft.Sql/servers/databases@2022-02-01' = {
parent: sqlServer
name: sqlDBName
location: location
sku: {
name: 'Standard'
tier: 'Standard'
}
}
このファイルを展開するには、ローカル コンピューターに main.bicep として保存し、PowerShell で次のコマンドを実行します。
New-AzResourceGroup -Name exampleRG -Location eastus
New-AzResourceGroupDeployment -ResourceGroupName exampleRG -TemplateFile ./main.bicep -administratorLogin "<admin-login>"
テンプレートのソース管理
ARM テンプレートと Bicep ファイルは、コードとしてインフラストラクチャを例示します。 API の背後にハードウェア リソースが抽象化されると、インフラストラクチャ全体がアプリケーション コードの不可欠な部分になります。 アプリケーションまたはデータベース コードと同様に、このコードを保護してバージョン管理することが重要です。 テンプレート内の内部バージョン管理に加えて、ソース管理システムもテンプレートのバージョン管理を行う必要があります。
通常、データベース管理者はテンプレートをゼロから作成しません。 代わりに、Azure portal を使用してビルドすることも、GitHub 上の Microsoft が提供する クイックスタート テンプレートのテンプレート を使用することもできます。
SQL Database テンプレートの GitHub ページで [Azure にデプロイ] を選択すると、Azure portal に移動します。 テンプレートが読み込まれるので、リソース グループ、場所、管理者の資格情報など、いくつかの詳細を入力するだけで済みます。 その後、[ 確認と作成 ] を選択し、[ 作成 ] を選択してデプロイを開始します。 残りの部分はポータルで処理され、完了するまで状態が表示されます。