次の方法で共有


クイック スタート: Terraform を使用して Azure Batch アカウントを作成する

Azure Batch の使用を開始するには、Terraform を使用して、ストレージを含む Batch アカウントを作成します。 コンピューティング リソース (コンピューティング ノードのプール) や Batch ジョブを作成するには、Batch アカウントが必要です。 Azure Storage アカウントを Batch アカウントにリンクできます。 この組み合わせは、アプリケーションをデプロイし、ほとんどの実際のワークロードの入力データと出力データを格納するのに役立ちます。

このクイックスタートを完了すると、Batch サービスの主要な概念を理解し、より大規模でより現実的なワークロードで Batch を試せるようになります。

Terraformはクラウドインフラストラクチャの定義、プレビュー、そしてデプロイメントを可能にします。 Terraform を使用する際は、HCL 構文を使って構成ファイルを作成します。 HCL 構文を使用すると、クラウド プロバイダー (Azure など) とクラウド インフラストラクチャを構成する要素を指定できます。 あなたの設定ファイルを作成した後、実行計画を作成します。これにより、インフラストラクチャの変更をデプロイする前にプレビューすることができます。 変更を確認したら、実行プランを適用してインフラストラクチャをデプロイします。

この記事では、次の方法について説明します。

[前提条件]

Terraform コードを実装する

  1. サンプルの Terraform コードをテストして実行するディレクトリを作成し、それを現在のディレクトリにします。

  2. providers.tf という名前のファイルを作成し、次のコードを挿入します。

    terraform {
      required_version = ">=1.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    provider "azurerm" {
      features {}
    }
    
  3. main.tf という名前のファイルを作成し、次のコードを挿入します。

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "rg" {
      name     = random_pet.rg_name.id
      ___location = var.resource_group_location
    }
    
    resource "random_string" "azurerm_storage_account_name" {
      length  = 13
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "random_string" "azurerm_batch_account_name" {
      length  = 13
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_storage_account" "storage" {
      name                     = "storage${random_string.azurerm_storage_account_name.result}"
      resource_group_name      = azurerm_resource_group.rg.name
      ___location                 = azurerm_resource_group.rg.___location
      account_tier             = element(split("_", var.storage_account_type), 0)
      account_replication_type = element(split("_", var.storage_account_type), 1)
    }
    
    resource "azurerm_batch_account" "batch" {
      name                                = "batch${random_string.azurerm_batch_account_name.result}"
      resource_group_name                 = azurerm_resource_group.rg.name
      ___location                            = azurerm_resource_group.rg.___location
      storage_account_id                  = azurerm_storage_account.storage.id
      storage_account_authentication_mode = "StorageKeys"
    }
    
  4. variables.tf という名前のファイルを作成し、次のコードを挿入します。

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location for all resources."
    }
    
    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."
    }
    
    variable "storage_account_type" {
      type        = string
      default     = "Standard_LRS"
      description = "Azure Storage account type."
      validation {
        condition     = contains(["Premium_LRS", "Premium_ZRS", "Standard_GRS", "Standard_GZRS", "Standard_LRS", "Standard_RAGRS", "Standard_RAGZRS", "Standard_ZRS"], var.storage_account_type)
        error_message = "Invalid storage account type. The value should be one of the following: 'Premium_LRS','Premium_ZRS','Standard_GRS','Standard_GZRS','Standard_LRS','Standard_RAGRS','Standard_RAGZRS','Standard_ZRS'."
      }
    }
    
  5. outputs.tf という名前のファイルを作成し、次のコードを挿入します。

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "batch_name" {
      value = azurerm_batch_account.batch.name
    }
    
    output "storage_name" {
      value = azurerm_storage_account.storage.name
    }
    

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 を呼び出します。

結果を確認してください。

  1. Azure リソース グループ名を取得します。

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Batch アカウント名を取得します。

    batch_name=$(terraform output -raw batch_name)
    
  3. az batch account show を実行して、新しい Batch アカウントに関する情報を表示します。

    az batch account show \
        --resource-group $resource_group_name \
        --name $batch_name
    

リソースをクリーンアップする

Terraform を使用して作成されたリソースが不要になったら、次の手順を実行します。

  1. terraform plan を実行し、destroy フラグを指定してください。

    terraform plan -destroy -out main.destroy.tfplan
    

    重要なポイント:

    • terraform plan コマンドは実行プランを作成しますが、実行はしません。 代わりに、それは設定ファイルで指定された設定を作成するために必要な手順を決定します。 このパターンを使用すると、実際のリソースに変更を加える前に、実行プランが期待と一致するかどうかを確認できます。
    • 任意の-outパラメーターを使用すると、プランの出力ファイルを指定することができます。 -out パラメーターを使用すると、レビューしたプランがそのまま適用されることが保証されます。
  2. terraform applyを実行して、実行プランを適用します。

    terraform apply main.destroy.tfplan
    

Azure での Terraform のトラブルシューティング

Azure で Terraform を使用する際の一般的な問題をトラブルシュートする

次のステップ