このクイック スタートでは、Terraform を使用して Azure portal で Azure Bastion を自動的にデプロイする方法について説明します。 これを行うには、Azure Bastion ホストとそれに対応する Azure リソース (リソース グループ、仮想ネットワーク、Azure Bastion サブネット、パブリック IP が含まれる) を作成します。 このセットアップでは、セキュリティで保護されたプライベート ネットワーク環境を Azure サービス用に確保します。 次の図は、Azure Bastion デプロイの概要を示しています。
Azure Bastion をデプロイすると、RDP と SSH を使用して、Azure portal 内で仮想マシンにアクセスできます。 このサービスは、ご利用の仮想ネットワーク内に直接プロビジョニングされ、そこに存在するすべての仮想マシンをサポートします。これにより、パブリック ネットワーク接続への露出が軽減されます。 Bastion を自動的にデプロイする場合、Bastion は Standard SKU によってデプロイされます。 代わりに Bastion Developer を使用してデプロイするには、「 クイック スタート: Azure portal から Bastion をデプロイする」を参照してください。 Azure Bastion デプロイをカスタマイズする方法の詳細については、Azure Bastion デプロイ ガイダンスを参照してください。
Terraform を使用すると、クラウド インフラストラクチャの定義、プレビュー、およびデプロイを行うことができます。 Terraform を使用する際は、HCL 構文を使って構成ファイルを作成します。 HCL 構文では、Azure などのクラウド プロバイダーと、クラウド インフラストラクチャを構成する要素を指定できます。 構成ファイルを作成したら、"実行プラン" を作成します。これにより、インフラストラクチャの変更をデプロイ前にプレビューすることができます。 変更を確認したら、実行プランを適用してインフラストラクチャをデプロイします。
- 一意の名前を持つ Azure リソース グループを作成します。
- 名前とアドレスを指定して仮想ネットワークを確立します。
- 作成した仮想ネットワーク内に Azure Bastion 専用のサブネットを設定します。
- リソース グループ内で Azure Bastion に静的な標準パブリック IP を割り当てます。
- リソース グループ内で指定した IP 構成を使用して Azure Bastion ホストを構築します。
- リソース グループの名前と IP アドレスに加えて、Azure Bastion ホストを出力します。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウントを作成します。 無料でアカウントを作成できます。
Terraform をインストールおよび構成します。
Terraform コードを実装する
注意
この記事のサンプル コードは、Azure Terraform GitHub リポジトリにあります。 Terraform の現在および以前のバージョンのテスト結果を含むログ ファイルを表示できます。
Terraform を使用して Azure リソースを管理する方法を示すその他の記事とサンプル コードを参照してください。
サンプル Terraform コードをテストして実行するディレクトリを作成し、それを現在のディレクトリにします。
main.tfという名前のファイルを作成し、次のコードを挿入します。# Create Resource Group resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } # Create Virtual Network resource "azurerm_virtual_network" "vnet" { name = "example-network" address_space = ["10.0.0.0/16"] location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name } # Create Subnet for Azure Bastion resource "azurerm_subnet" "bastion_subnet" { name = "AzureBastionSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = ["10.0.1.0/24"] } # Create Public IP for Azure Bastion resource "azurerm_public_ip" "bastion_pip" { name = "example-pip" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name allocation_method = "Static" sku = "Standard" } # Create Azure Bastion Host resource "azurerm_bastion_host" "bastion" { name = "example-bastion" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name ip_configuration { name = "configuration" subnet_id = azurerm_subnet.bastion_subnet.id public_ip_address_id = azurerm_public_ip.bastion_pip.id } }outputs.tfという名前のファイルを作成し、次のコードを挿入します。output "resource_group_name" { value = azurerm_resource_group.rg.name } output "bastion_host_name" { value = azurerm_bastion_host.bastion.name } output "bastion_host_ip" { value = azurerm_public_ip.bastion_pip.ip_address }providers.tfという名前のファイルを作成し、次のコードを挿入します。terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }variables.tfという名前のファイルを作成し、次のコードを挿入します。variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." }
Terraform を初期化する
terraform init を実行して、Terraform のデプロイを初期化します。 このコマンドによって、Azure リソースを管理するために必要な Azure プロバイダーがダウンロードされます。
terraform init -upgrade
重要なポイント:
-
-upgradeパラメーターは、必要なプロバイダー プラグインを、構成のバージョン制約に準拠する最新バージョンにアップグレードします。
Terraform 実行プランを作成する
terraform plan を実行して、実行プランを作成します。
terraform plan -out main.tfplan
重要なポイント:
-
terraform planコマンドは、実行プランを作成しますが、実行はしません。 代わりに、構成ファイルに指定された構成を作成するために必要なアクションを決定します。 このパターンを使用すると、実際のリソースに変更を加える前に、実行プランが自分の想定と一致しているかどうかを確認できます。 - 省略可能な
-outパラメーターを使用すると、プランの出力ファイルを指定できます。-outパラメーターを使用すると、レビューしたプランが適用内容とまったく同じであることが確実になります。
Terraform 実行プランを適用する
terraform apply を実行して、クラウド インフラストラクチャに実行プランを適用します。
terraform apply main.tfplan
重要なポイント:
-
terraform applyコマンドの例は、以前にterraform plan -out main.tfplanが実行されたことを前提としています。 -
-outパラメーターに別のファイル名を指定した場合は、terraform applyの呼び出しで同じファイル名を使用します。 -
-outパラメーターを使用しなかった場合は、パラメーターを指定せずにterraform applyを呼び出します。
結果を確認する
Azure リソース グループ名を取得します。
resource_group_name=$(terraform output -raw resource_group_name)Azure Bastion ホスト名を取得します。
bastion_host_name=$(terraform output -raw bastion_host_name)Azure Bastion ホストの IP アドレスを取得します。
bastion_host_ip=$(terraform output -raw bastion_host_ip)az network bastion showを実行して、Azure Bastion ホストを表示します。az network bastion show --name $bastion_host_name --resource-group $resource_group_name
リソースをクリーンアップする
Terraform を使用して作成したリソースが不要になった場合は、次の手順を実行します。
terraform plan を実行して、
destroyフラグを指定します。terraform plan -destroy -out main.destroy.tfplan重要なポイント:
-
terraform planコマンドは、実行プランを作成しますが、実行はしません。 代わりに、構成ファイルに指定された構成を作成するために必要なアクションを決定します。 このパターンを使用すると、実際のリソースに変更を加える前に、実行プランが自分の想定と一致しているかどうかを確認できます。 - 省略可能な
-outパラメーターを使用すると、プランの出力ファイルを指定できます。-outパラメーターを使用すると、レビューしたプランが適用内容とまったく同じであることが確実になります。
-
terraform apply を実行して、実行プランを適用します。
terraform apply main.destroy.tfplan
Azure での Terraform のトラブルシューティング
Azure で Terraform を使用する場合の一般的な問題のトラブルシューティング。
次のステップ
このクイック スタートでは、Azure Bastion ホストを設定するために、Terraform を使用して Azure リソース グループとその他の補完的な Azure リソースを作成しました。 次に、Azure Bastion と Terraform の詳細については、次のリソースを参照してください。