コンテンツにスキップ

2. Azureの概要と基本概念

2.1. Azureの概要

Microsoft Azureはマイクロソフトの管理するデータセンタを通じてアプリやーびすを構築/デプロイ/管理できるクラウドサービスのこと。

2.1.1. Azureの地理的概念

Azureは2024年現在140過酷異常で利用可能で、世界中の60を超えるデータセンター、リージョンのユーザにサービスを提供している。

ジオ

Azureのサービスが使える地域の総称

リージョン

データセンターが存在する地域のこと

リージョンペア

同じジオ内に複数のリージョンが存在する場合にリージョンペアが構成される。 リージョン障害に対応する

可用性ゾーン

リージョン内の物理的な場所のグループ。 それぞれ独立した1つまたは複数のデータセンターで構成される。

2.1.2. Azureの提供サービス

Microsoft Azureでは以下サービスを提供する。

  • コンピューティングサービス
    • Virtual Machine
    • App Service
    • Azure Functions
    • Kubernetes Service
    • など
  • ストレージサービス
    • Azure Blob Storage
    • Azure Files
    • Azure Disk Storage
  • ネットワークサービス
    • 仮想ネットワーク(Vnet)
    • Azureロードバランサ
    • アプリケーションゲートウェイ
    • Azure VPNゲートウェイ
  • データベース
    • Azure SQL Database
    • Azure COSMOS DB
    • Azure Database
  • ID/アクセス管理
    • Microsoft Entra ID
  • セキュリティ/コンプライアンス
    • Microsoft Defender for Cloud
    • Azure Key Vault
    • Azure Policy
  • AIと機械学習
    • Azure Machine Learning
    • Azure Cognitive Services
    • Azure AI Bot Services
    • Azure OpenAI
  • IoT
    • Azure Iot Suite
    • Azure Iot Hub
    • Azure Iot Central
    • Azure IoT Edge
  • Analytics/ビックデータ解析
    • Azure Synapse Analytics
    • Azure HDInsight
    • Azure Data Lake Storage
  • 開発者/運用者用ツール
    • Azure DevOps
    • Azure Monitor

2.2. Azure Resource Manager

Azure Resource Manager(ARM)はAzureのデプロイ/管理用のフレームワーク。 ARMではリソースグループと呼ばれるグループに対しリソースを定義/管理する。 特徴は以下の通り。

  • JSONテンプレートの使用によりリソースを一貫性をもってデプロイできる (IaC)
  • ロールベースアクセス制御(RBAC)に対応
  • 分類のためのタグ付けとリソースレベルのポリシーなど設定可能
  • 依存関係の追跡が容易

ARMはリソース管理を簡素化し、デプロイの一貫性強化とガバナンス向上、リソースの効率管理を可能にする。

2.2.1. ARMの利点

  • リソースをリソースグループと呼ばれる論理グループに整理でき、リソースの管理監視が容易になる
  • 宣言型テンプレート(JsonまたはYaml)を使用してリソースを定義できるためIaCが実現できる
  • リソースグループレベルでガバナンスポリシー、アクセス制御、リソースのタグ付けを適用できる
  • アクセス制御の管理の簡素化により、リソースグループに対してアクションを実行できるユーザを制御しやすい

2.2.2. ARMリソースに関連する用語

リソース/リソースグループ

リソースはAzureにより管理されるエンティティで、仮想マシンや仮想ネットワーク、ストレージアカウントなどが該当する。 各リソースは必ずリソースグループに所属している必要がある。

リソースグループはリソースをライフサイクルとセキュリティに基づいて管理できるように複数のリソースを関連付けるコンテナのこと。 1リソースあたり1リソースグループまでしか所属できなく、またリソースグループの子にリソースグループは作成できない。

リソースプロバイダ

Azureリソースを提供するサービスのこと。

宣言型構文

宣言型構文では目的や結果/状態が定義された構文のこと。 目的を達成するための段階的な指示や手順は指定しない。

2.2.3. ARMを使用したリソース制御のフロー

Azure

2.2.4. ARMを使用したリソース管理

リソースグループの作成

リソースグループの作成手順は以下の通り。

  1. Azure Portalへログインする
  2. 「リソースグループ」より「作成」を選択
  3. 「サブスクリプション」を選択
  4. 「リソースグループ」に新規の名前を入力
  5. 「リージョン」にリソースグループ情報を格納する場所を指定
  6. 「確認及び作成」で検証し作成する

リソースのロック

リソースのロックを行うとAzureリソースを誤って削除や変更を防止できる。 ロックの種類は削除読み取り専用がある。 リソースのロックは以下の3つのスコープに設定できる。

  • サブスクリプション
  • リソースグループ
  • リソース

またリソースロックは上位スコープでロックを適用するとスコープ内のすべてのリソースに同じロックを継承する。 継承されたロックが複数ある場合は厳しいロックが優先して継承される。

リソースロックの作成手順は以下の通り。

  1. ロックするリソースグループを選択
  2. 「ロック」を左メニューより選択し、「追加」を押す
  3. 「ロック名」「ロックの種類」を設定する
  4. 削除または読み取り専用でロックする

リソースグループの削除

リソースグループを削除するとその中に含まれるリソースはすべて削除される。 リソースグループの削除手順は以下の通り。

  1. Azure Portalへログインする
  2. 「リソースグループ」を選択
  3. 「リソースグループの削除」を選択
  4. 削除するリソースグループ名を入力し削除する

リソースにタグをつける

タグはリソースに適用できるメタデータラベルで、Azureリソースの整理や分類に役立つ名前と値のペア。 タグはは以下の3つのスコープに設定できる。

  • サブスクリプション
  • リソースグループ
  • リソース

タグは上位スコープに定義されたものを継承しないため、1つ1つの設定する必要がある。 なおAzureポリシーを用いることで継承を利用できる。

タグを設定する手順は以下の通り。

  1. Azure Portalへログインする
  2. 「リソースグループ」を選択
  3. 「タグを追加するにはここをクリック」を選択
  4. 名前と値を入力し「保存」を選択

2.3. Azure PowerShell

Azure PowerShellはAzureと対話するためのCLIの1つ。 この機能によりユーザはAzureリソースの効率的管理や自動化ができるスクリプトを用いることができる。

AZ PowerShellはPowerShellスクリプトを利用し、コマンドレットとAPIへのアクセスを提供する。

2.3.1. Azure PowerShellの利点

  • 自動化
    • Azure環境内の様々なタスクとワークフローを自動化できる
  • スクリプト環境
    • スクリプト環境の提供により複雑な操作の自動化や反復的タスクの実行、スクリプトの作成が行える
  • リソース管理
    • リソースの削除/編集/作成、アクセス制御の設定、リソースの監視をコマンドラインから行える
  • 統合
    • Azure powerShellスクリプトを他のAzureサービス(DevOpsなど)と組み合わせて、自動化及びデプロイパイプラインの作成ができる
  • 拡張性
    • モジュールとコマンドレットを通じてAzure powerShellの機能を拡張できる
  • クロスプラットフォーム対応
    • Windows/MacOS/Linuxに対応している

2.3.2. Azure PowerShellの活用法

Azure PowerShellの利用には以下の2つの方法がある。

  • Azure PortalのCloud Shellから実行する
  • ローカルコンピュータにインストールして使用する

2.3.3. Azure PowerShellを用いたAzureリソースのデプロイ

サブスクリプションへの接続

PowerShellを立ち上げ、Azureコマンドを実行するには初めに認証する必要がある。

# ログイン
Connect-AzAccount
# サブスクリプションの確認
Get-AzContext
# サブスクリプションの指定
Set-AzContext-Subscription 'サブスクリプションのID'

リソースグループの作成

# サブスクリプション上のすべてのリソースグループをリスト
Get-AzResourceGroup
# 新しいリソースグループの作成
New-AzResourceGroup-NameRG-new-Location "Japan East"
# リソースグループ作成の確認
Get-AzResourceGroup

仮想マシンの作成

下記コマンド入力後、ユーザ名とパスワードを入力する。

New-AzVm
    - ResourceGroupName 'RG' `
    - Name 'NewVM' `
    - Location 'northeurope' `
    - Image UbuntuLTS

# 仮想マシンの状態確認
Get-AzVm=Status

2.3.4. PowerShellスクリプトを利用したデプロイの自動化

PowerShellスクリプトは拡張子が「.ps1」のテキストファイルで記述する。 このスクリプトでは関数や制御構文などを含めて処理を記述できる。

自動化のサンプルファイルは以下の通り。

param([string]$resourceGroup)

$Credential = Get-Credential

For ($i = 1; $i -le 3; $i++)
{
    $vmName = "newVM" + $i
    Write-Host "Create VM ...:" $vmName
    New-AzVm
    - Name $vmName `
    - Location 'northeurope' `
    - Credential $Credential `
    - Image UbuntuLTS
}

上記スクリプトの存在するフォルダ内で以下のように実行する。

./vm-deploy.ps1 RG-new

2.4. Azure CLI

Azure CLIはAzureと対話するためのCLIの1つ。 この機能によりユーザはAzureリソースの効率的管理や自動化ができるスクリプトを用いることができる。

Azure CLIの利用でAzureリソースの作成や管理、アプリケーションのデプロイ、ネットワーク構成、アクセス制御の管理、リソースの監視などのタスクを実行できる。

2.4.1. Azure CLIの利点

  • コマンド対応
  • スクリプトによる自動化
  • DevOpsとの統合
  • ARMのサポート
  • クロスプラットフォームサポート
  • Azure Cloud Shellで使用可能

2.3.2. Azure CLIの活用法

Azure CLIの利用には以下の2つの方法がある。

  • Azure PortalのCloud Shellから実行する
  • ローカルコンピュータにインストールして使用する

2.3.3. Azure CLIを用いたAzureリソースのデプロイ

サブスクリプションへの接続

コマンドラインを立ち上げ、Azureコマンドを実行するには初めに認証する必要がある。

# ログイン
az login
# サブスクリプションの確認
az account show
# サブスクリプションの指定
az account set --subscription 'サブスクリプションのID'

リソースグループの作成

# サブスクリプション上のすべてのリソースグループをリスト
az group list --output table
# 新しいリソースグループの作成
az group create --name RG-service --location japaneast
# リソースグループ作成の確認
az group list --output table

2.5. ARMテンプレート

ARMテンプレートは宣言型の方法でAzureリソースを定義/デプロイするためのJSONファイルのこと。 ARMテンプレートはパラメータ、変数、リソース、出力などのセクションで構成される。

2.5.1. ARMテンプレートのメリット

  • オーケストレーション
  • 冪等性
  • デプロイメントのトレーサビリティ

2.5.2. ARMテンプレートの構成要素

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "",
  "apiProfile": "",
  "parameters": {  },
  "variables": {  },
  "functions": [  ],
  "resources": [  ],
  "outputs": {  }
}

$schema (必須)

ARMテンプレートのスキーマファイルの場所を定義する。 以下の4つのレベルで定義可能。

  • リソースグループ
  • サブスクリプション
  • 管理グループ
  • テナント

contentVersion (必須)

テンプレートのバージョン管理とコンテンツに対する変更の追跡に使用される。 任意の値を指定できる。

parameters (任意)

デプロイ中のパラメータを定義できる。

variables (任意)

テンプレートで再利用可能な変数を定義できる。

resources (必須)

Azure上に構築するリソースの定義ができる。

outputs (任意)

デプロイ処理後の出力を定義し、リソースのURLや接続文字列などのデプロイ結果の情報を取得することができる。

2.5.3. ARMテンプレートの作成

ARMテンプレートを作成する方法は以下の2通りがある。

  • フルスクラッチで作成する方法
  • Azure Portalからエクスポートして作成する方法

2.5.4. ARMテンプレートを使用したリソースデプロイ

ARMテンプレートをデプロイするための方法は以下の通り。

  • Azure Portal
  • Azure PowerShell
  • Azure CLI
  • REST API
  • Azure Cloud Shell
  • パイプライン(Azure DevOps,Github)

Azure Portalでのデプロイ

  1. Azure Portalにログイン
  2. 「カスタムテンプレートのデプロイ」を選択
  3. 「エディタで独自のテンプレートを作成する」を選択
  4. 「ファイルの読み込み」よりARMテンプレートをアップロードする
  5. 「確認と作成」を選択

Azure PowerShellでのデプロイ

Azure PowerShellでデプロイするにはAzure PowerShellモジュールがインストールされていることとConnect-AzAccountを使用してAzureに接続していることとデプロイを行うリソースグループが作成されていることが条件にある。

ARMテンプレートのデプロイにはNew-AzResourceGroupDeploymentコマンドレットを使用して行う。

New-AzResourceGroupDeployment
    -Name <デプロイメント名> `
    -ResourceGroupName <リソースグループ名> `
    -TemplateFile <ARMテンプレートのファイルパス>

なおデプロイを行うスコープによりコマンドレットは変わる。

スコープ コマンドレット
リソースグループ New-AzResourceGroupDeployment
サブスクリプション New-AzSubscriptionDeployment
管理グループ New-AzManagementGroupDeployment
テナント New-AzTenantDeployment

Azure CLIでのデプロイ

Azure CLIでデプロイするにはAzure CLIモジュールがインストールされていることとaz loginを使用してAzureに接続していることとデプロイを行うリソースグループが作成されていることが条件にある。

ARMテンプレートのデプロイにはaz deployment group createコマンドを使用して行う。

az deployment group create `
    --name <デプロイメント名> `
    -resource-group <リソースグループ名> `
    --template-file <ARMテンプレートのファイルパス>

なおデプロイを行うスコープによりコマンドは変わる。

スコープ コマンドレット
リソースグループ az deployment group create
サブスクリプション az deployment sub create
管理グループ az deployment mg create
テナント az deployment tenant create

2.6. Bicep

BicepはAzureリソースのデプロイに使用される新しい高レベルの宣言型構文のこと。 BicepはJSON構文を使用する従来のARMテンプレートと比較して読みやすくリソースの定義が可能。 Biceoの方がARMテンプレート(JSON)よりもコードが短くて済む。

内部的にBicepはARMテンプレートにトランスパイルされ、ARMテンプレートと互換性が確保される。

2.6.1. Bicepのメリット

  • 簡潔で読みやすい構文
  • 生産性の向上
  • 実行環境の統合
  • ARMテンプレートとの互換性
  • 保守が容易

2.6.2. Bicepの利用方法

Bicepの利用にはBicep CLIをインストールする必要がある

  • Azure PowerShellの場合
    • 手動でインストールする必要がある
  • Azure CLIの場合
    • 自動でインストールされる、もしくはaz bicep installにより対応可能

2.6.3. Bicepの構成要素

metadata <メタデータ名> = <任意>
targetscope = '<デプロイスコープ>'
@<decorator>(<値>)
param <パラメータ名><パラメータデータ型> = <規定値>
var <変数名> = <変数値>

resource <リソースシンボル名> '<リソースタイプ>@<APIバージョン>' = {
    <リソースプロパティ>
}

output <アウトプット名><アウトプットデータ型> = <アウトプット値>

metadata (任意)

タイトルや説明、バージョンなどの追加情報をテンプレートに追加できる。

metadata description = 'hogehoge'
metadata version = '1.0.1'

targetscope (任意)

Bicepテンプレートのスコープを定義する。 管理グループ、サブスクリプション、リソースグループ、テナントのいずれかを指定できる。

  • resourceGroup
  • subscription
  • managementGroup
  • tenant

param/decorator

paramブロックはテンプレートの入力パラメータを定義するために使用される。 具体的にはデプロイ時に値を受け取り、テンプレートの柔軟性と再利用性を高めるために使用できる。

decoratorはparamの値を制約するために使用される。 (既定値、許可される値など)

var (任意)

varブロックでは値または式を格納するためにテンプレート内で使用できる変数を定義できる。

resourc (必須)

resourceブロックはAzureリソースを定義するために使用される。

output (任意)

outputブロックはデプロイ後に特定の情報をキャプチャ表示するのに役立つ出力血を定義できる。

2.6.4. Bicepテンプレートの作成

Bicepテンプレートを作成する方法は以下の2通りがある。

  • フルスクラッチで作成する方法
  • ARMテンプレートからBicepテンプレートに逆コンパイルする方法

2.6.5. Bicepテンプレートを使用したリソースデプロイ

Bicepテンプレートをデプロイするための方法は以下の通り。

  • Azure PowerShell
  • Azure CLI

なお既存のBicepテンプレートに変更を適用してデプロイする場合モードを意識する必要がある

  • 完全モード: リソースグループに存在するがテンプレートに指定されていないリソースを削除する
  • 増分モード(既定のモード): リソースグループに存在するがテンプレートに指定されていないリソースを変更せずにそのまま残す

これらの特徴からテンプレートとの完全一致を目指す場合は完全モードを使用するのが良い。 また、リソースの種類に応じて削除動作が異なるのでwhat-ifオプションでデプロイ前に想定される動作を検証すると良い。

Azure PowerShellでのデプロイ

Azure PowerShellでデプロイするにはAzure PowerShellモジュールがインストールされていることとConnect-AzAccountを使用してAzureに接続していることとデプロイを行うリソースグループが作成されていることが条件にある。

BicepテンプレートのデプロイにはNew-AzResourceGroupDeploymentコマンドレットを使用して行う。

New-AzResourceGroupDeployment
    -Mode Complete `
    -Name <デプロイメント名> `
    -ResourceGroupName <リソースグループ名> `
    -TemplateFile <ARMテンプレートのファイルパス>

なおデプロイを行うスコープによりコマンドレットは変わる。

スコープ コマンドレット
リソースグループ New-AzResourceGroupDeployment
サブスクリプション New-AzSubscriptionDeployment
管理グループ New-AzManagementGroupDeployment
テナント New-AzTenantDeployment

Azure CLIでのデプロイ

Azure CLIでデプロイするにはAzure CLIモジュールがインストールされていることとaz loginを使用してAzureに接続していることとデプロイを行うリソースグループが作成されていることが条件にある。

ARMテンプレートのデプロイにはaz deployment group createコマンドを使用して行う。

az deployment group create `
    --mode Complete `
    --name <デプロイメント名> `
    -resource-group <リソースグループ名> `
    --template-file <ARMテンプレートのファイルパス>

なおデプロイを行うスコープによりコマンドは変わる。

スコープ コマンドレット
リソースグループ az deployment group create
サブスクリプション az deployment sub create
管理グループ az deployment mg create
テナント az deployment tenant create

2.7. Azure Cloud Shell

Azure Cloud ShellはWebベースのCLIツール。 Azure Portal等から使用でき、Azure PowerShell, Azure CLIに対応している。

なおAzure Cloud Shellを利用するにはストレージアカウントが必要になる