初期セットアップ

プロバイダーの設定

Terraformでインフラストラクチャを管理するには、プロバイダーの設定が必要です。プロバイダーは、Terraformが特定のクラウドサービスやAPIと通信するためのプラグインです。
最終更新: 2026/2/17

プロバイダーの設定

Terraformでインフラストラクチャを管理するには、プロバイダーの設定が必要です。プロバイダーは、Terraformが特定のクラウドサービスやAPIと通信するためのプラグインです。

プロバイダーとは

プロバイダーは、Terraformとクラウドプラットフォームやサービスの間のインターフェースとして機能します。各プロバイダーは、そのプラットフォーム固有のリソースやデータソースを提供します。

主要なプロバイダー:

  • AWS (Amazon Web Services)
  • Azure (Microsoft Azure)
  • Google Cloud Platform (GCP)
  • Kubernetes
  • その他1000以上のプロバイダー
利用可能なプロバイダーの完全なリストは、Terraform Registryで確認できます。

プロバイダーの基本設定

Terraformブロック

プロバイダーを使用する前に、terraformブロックで必要なプロバイダーを宣言します。

terraform {
  required_version = ">= 1.0"
  
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

設定項目の説明:

  • required_version: 使用するTerraformのバージョン
  • required_providers: 必要なプロバイダーとそのバージョン
  • source: プロバイダーのソース(通常はhashicorp/プロバイダー名
  • version: プロバイダーのバージョン制約

バージョン制約の指定方法

# 特定のバージョン
version = "5.0.0"

# バージョン範囲
version = ">= 5.0.0, < 6.0.0"

# ペシミスティックバージョン制約(推奨)
version = "~> 5.0"  # 5.0.x の最新版を使用

AWS プロバイダーの設定

基本設定

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "ap-northeast-1"
}

認証方法

1. 環境変数を使用(推奨)

export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_DEFAULT_REGION="ap-northeast-1"

2. 共有認証情報ファイルを使用

provider "aws" {
  region                  = "ap-northeast-1"
  shared_credentials_files = ["~/.aws/credentials"]
  profile                 = "default"
}

3. IAMロールを使用(EC2インスタンス上で実行する場合)

provider "aws" {
  region = "ap-northeast-1"
  # IAMロールが自動的に使用されます
}

複数リージョンの設定

# デフォルトのプロバイダー
provider "aws" {
  region = "ap-northeast-1"
}

# 別リージョン用のプロバイダー
provider "aws" {
  alias  = "us_east"
  region = "us-east-1"
}

# 使用例
resource "aws_instance" "tokyo" {
  # デフォルトのプロバイダー(ap-northeast-1)を使用
  ami           = "ami-xxxxx"
  instance_type = "t2.micro"
}

resource "aws_instance" "virginia" {
  # us-east-1のプロバイダーを使用
  provider      = aws.us_east
  ami           = "ami-yyyyy"
  instance_type = "t2.micro"
}

Azure プロバイダーの設定

基本設定

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.0"
    }
  }
}

provider "azurerm" {
  features {}
}

認証方法

1. Azure CLIを使用(推奨)

# Azure CLIでログイン
az login

Terraformは自動的にAzure CLIの認証情報を使用します。

2. サービスプリンシパルを使用

export ARM_CLIENT_ID="your-client-id"
export ARM_CLIENT_SECRET="your-client-secret"
export ARM_SUBSCRIPTION_ID="your-subscription-id"
export ARM_TENANT_ID="your-tenant-id"

または、プロバイダーブロックで直接指定:

provider "azurerm" {
  features {}
  
  client_id       = var.client_id
  client_secret   = var.client_secret
  subscription_id = var.subscription_id
  tenant_id       = var.tenant_id
}
認証情報をコードに直接記述しないでください。変数や環境変数を使用してください。

Google Cloud プロバイダーの設定

基本設定

terraform {
  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "~> 5.0"
    }
  }
}

provider "google" {
  project = "my-project-id"
  region  = "asia-northeast1"
}

認証方法

1. サービスアカウントキーを使用

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-key.json"

2. gcloud CLIを使用

# gcloud CLIでログイン
gcloud auth application-default login

3. プロバイダーブロックで指定

provider "google" {
  credentials = file("/path/to/service-account-key.json")
  project     = "my-project-id"
  region      = "asia-northeast1"
}

プロバイダーの初期化

プロバイダーの設定を記述したら、terraform initコマンドでプロバイダーをダウンロードして初期化します。

terraform init

実行結果の例:

Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/aws versions matching "~> 5.0"...
- Installing hashicorp/aws v5.31.0...
- Installed hashicorp/aws v5.31.0 (signed by HashiCorp)

Terraform has been successfully initialized!

.terraform ディレクトリ

terraform initを実行すると、.terraformディレクトリが作成され、プロバイダーのバイナリがダウンロードされます。

.
├── .terraform/
│   └── providers/
│       └── registry.terraform.io/
│           └── hashicorp/
│               └── aws/
│                   └── 5.31.0/
├── main.tf
└── .terraform.lock.hcl
.terraformディレクトリはバージョン管理システム(Git)に含めないでください。.gitignoreに追加することをお勧めします。

ロックファイル

terraform initを実行すると、.terraform.lock.hclファイルが作成されます。このファイルは、使用しているプロバイダーの正確なバージョンを記録します。

# .terraform.lock.hcl
provider "registry.terraform.io/hashicorp/aws" {
  version     = "5.31.0"
  constraints = "~> 5.0"
  hashes = [
    "h1:...",
    "zh:...",
  ]
}

ロックファイルの役割:

  • チーム全体で同じプロバイダーバージョンを使用
  • 予期しないバージョンアップを防止
  • セキュリティとチェックサムの検証
.terraform.lock.hclはバージョン管理システムにコミットしてください。

プロバイダーのアップグレード

プロバイダーを最新バージョンにアップグレードするには:

# ロックファイルを更新
terraform init -upgrade

複数プロバイダーの使用

1つのTerraform設定で複数のプロバイダーを使用できます。

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.0"
    }
    google = {
      source  = "hashicorp/google"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "ap-northeast-1"
}

provider "azurerm" {
  features {}
}

provider "google" {
  project = "my-project"
  region  = "asia-northeast1"
}

ベストプラクティス

1. バージョン制約を明示的に指定

# 良い例
terraform {
  required_version = ">= 1.0"
  
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

# 悪い例(バージョン指定なし)
terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
    }
  }
}

2. 認証情報をコードに含めない

# 良い例(環境変数を使用)
provider "aws" {
  region = var.aws_region
}

# 悪い例(ハードコーディング)
provider "aws" {
  region     = "ap-northeast-1"
  access_key = "AKIAIOSFODNN7EXAMPLE"  # 絶対にしないでください!
  secret_key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"  # 絶対にしないでください!
}

3. プロバイダーの設定を分離

大規模なプロジェクトでは、プロバイダーの設定を別ファイルに分離します。

.
├── main.tf           # メインの設定
├── providers.tf      # プロバイダーの設定
├── variables.tf      # 変数の定義
└── outputs.tf        # 出力の定義

次のステップ

より高度なシークレット管理

本ガイドでは環境変数や認証情報ファイルを使用した基本的な認証方法を紹介しましたが、エンタープライズ環境では、より安全なシークレット管理が必要になる場合があります。

HashiCorp Vaultとの連携

HashiCorp Vaultを使用すると、以下のような高度なシークレット管理が可能になります:

主な機能:

  • 集中管理: すべての認証情報を一元管理
  • 動的シークレット: 必要な時に一時的な認証情報を生成
  • アクセス制御: きめ細かい権限管理とログ記録
  • 自動ローテーション: 定期的なシークレットの更新

使用例:

# Vaultから認証情報を取得
data "vault_kv_secret_v2" "aws_creds" {
  mount = "secret"
  name  = "aws/credentials"
}

provider "aws" {
  region     = "ap-northeast-1"
  access_key = data.vault_kv_secret_v2.aws_creds.data["access_key"]
  secret_key = data.vault_kv_secret_v2.aws_creds.data["secret_key"]
}
Vaultとの連携について詳しくは、HashiCorp Vaultとの連携をご覧ください。

プロバイダーの設定が完了したら、実際にリソースを管理する方法を学びましょう。

参考リンク

© 2026 IBM Corporation. Licensed under CC BY 4.0.