mcpField
T
terraform

terraform

github.com/alphaonedevクラウド・DevOps43 回インストール
リポジトリ

terraform について

Terraform は、宣言型 HCL ファイルでインフラを定義、構築するコマンドラインツールです。クラウドリソースを再現可能でバージョン管理された設定として扱うチーム向けで、プロバイダー、モジュール再利用、状態管理を備えています。

主な機能

  1. 01HCL による宣言型インフラ定義
  2. 02クラウドサービス向けプロバイダー
  3. 03ローカルまたはリモートの状態管理
  4. 04再利用可能な設定モジュール
  5. 05変数と組み込み関数

活用シーン

  1. 01設定ファイルからのクラウドリソース構築
  2. 02環境ごとのインフラ管理
  3. 03CI/CD でのインフラ変更の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill terraform

インストール後、Claude Code で/terraformを入力して読み込まれたか確認します。

詳細

terraform

目的

Terraform は、宣言型の HCL(HashiCorp Configuration Language)ファイルを使用して、コードとしてインフラストラクチャを定義し、プロビジョニングするためのコマンドラインツールです。クラウドリソースの作成、更新、削除を、再現可能でバージョン管理された方法で実行できます。

使用する場面

マルチクラウド環境の管理、インフラストラクチャのデプロイの自動化、または VM、ネットワーク、データベースなどのリソースに対するバージョン管理された IaC が必要な場合に Terraform を使用します。AWS、Azure、GCP のプロビジョニングを伴うシナリオ、特に動的なスケーリング、災害復旧の構成、CI/CD パイプラインで一貫性を確保する場合に適用します。

主な機能

  • リソースを定義するための宣言型 HCL 構文。例:resource "aws_instance" "example" { ami = "ami-123456" instance_type = "t2.micro" }。
  • 100 を超えるサービスのプロバイダーをサポート。provider "aws" { region = "us-west-2" } のようなブロックで構成します。
  • ローカルファイルまたはリモートバックエンド(例:S3)による状態管理で、リソースの変更を追跡します。
  • 構成を組み合わせるためのモジュール再利用。module "vpc" { source = "./modules/vpc" } でインポートします。
  • 変数の補間と関数。動的な構成には、ループ用の count や templatefile などを使用します。

使用パターン

Terraform を使用するには、まずリソースとプロバイダーを定義する HCL ファイル(例:main.tf)を作成します。terraform init でワークスペースを初期化し、terraform plan で変更を確認してから、terraform apply で適用します。自動化する場合は、コマンドをスクリプトでラップし、シークレットには環境変数を使用します。.tf ファイルは必ず Git でバージョン管理してください。複数の環境を設定する場合は、ワークスペースを使用します。terraform workspace new dev を実行してから、terraform workspace select dev で切り替えます。

主なコマンド/API

Terraform は CLI から実行します。主なコマンドは次のとおりです。

  • terraform init:プロバイダーとモジュールをダウンロードします。依存関係を更新するには -upgrade を使用します。
  • terraform plan -out=plan.tfplan -var="instance_type=t2.medium":実行計画を生成します。フラグまたはファイルで変数を指定します。
  • terraform apply plan.tfplan:計画を適用します。非対話型の実行では -auto-approve を追加します。
  • terraform destroy -target=aws_instance.example:特定のリソースを破棄します。-force は慎重に使用してください。 API と連携するには、Terraform のリモートバックエンドまたは Terraform Cloud API を使用します(実行には https://app.terraform.io/api/v2/runs への POST など)。ただし、認証には $TERRAFORM_TOKEN が必要です。プロバイダーの認証情報は、たとえば export AWS_ACCESS_KEY_ID=$AWS_API_KEY および export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_KEY のように環境変数として設定します。

統合に関する注意事項

ワークフロー YAML にステップを追加して、GitHub Actions や Jenkins などの CI/CD ツールと Terraform を統合します。例:

- name: Terraform Init
  run: terraform init
- name: Terraform Apply
  run: terraform apply -auto-approve

共同作業にはリモート状態バックエンドを使用します。たとえば、main.tf で terraform { backend "s3" { bucket = "my-terraform-state" key = "path/to/state" region = "us-west-2" } } を構成します。シークレットは環境変数(例:$AWS_ACCESS_KEY_ID)または Vault などのツールを通じて注入します。破壊的な変更を避けるため、.tf ファイルでプロバイダーのバージョンを固定してください。例:terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 4.0" } } }。

エラー処理

まず terraform validate を実行して HCL の構文を確認し、エラーに対処します。たとえば、括弧の不足や無効な属性を修正します。プロバイダーのエラーが発生した場合は、認証情報を確認し(例:$AWS_ACCESS_KEY_ID が設定されているか確認)、terraform plan -detailed-exitcode を使用して具体的なコード(例:エラーの場合は 2)を取得します。一般的な方法として、スクリプト内でコマンドを try-catch ブロックでラップします。例:

try {
  terraform apply
} catch {
  echo "Error: Apply failed; check logs for details"
}

TF_LOG=DEBUG terraform apply でデバッグしてプロバイダーとのやり取りをログに記録し、terraform state pull で状態ファイルを調べて不整合を確認します。

使用例

  1. AWS EC2 インスタンスを作成します。main.tf に resource "aws_instance" "web" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" tags = { Name = "web-server" } } と定義します。次に terraform init を実行し、その後 terraform apply -auto-approve を実行してプロビジョニングします。
  2. シンプルな VPC を管理します。main.tf に resource "aws_vpc" "main" { cidr_block = "10.0.0.0/16" } と resource "aws_subnet" "subnet1" { vpc_id = aws_vpc.main.id cidr_block = "10.0.1.0/24" } を追加します。terraform plan を実行して確認し、その後 terraform apply を実行してデプロイします。

グラフの関係

  • クラスターとの接続先:devops-sre
  • 関連タグ:terraform、iac、devops
  • 他のスキルへのリンク:devops-sre 経由(構成管理用の ansible など)、および代替のプロビジョニング方法として pulumi や cloudformation などの iac 関連ツール

コメント