terraform について
Terraform は、宣言型 HCL ファイルでインフラを定義、構築するコマンドラインツールです。クラウドリソースを再現可能でバージョン管理された設定として扱うチーム向けで、プロバイダー、モジュール再利用、状態管理を備えています。
主な機能
- 01HCL による宣言型インフラ定義
- 02クラウドサービス向けプロバイダー
- 03ローカルまたはリモートの状態管理
- 04再利用可能な設定モジュール
- 05変数と組み込み関数
活用シーン
- 01設定ファイルからのクラウドリソース構築
- 02環境ごとのインフラ管理
- 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 で状態ファイルを調べて不整合を確認します。
使用例
- 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を実行してプロビジョニングします。 - シンプルな 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 関連ツール