Skip to content

Terraformの書き方

🧪 テイント (Taint) とアンテイント (Untaint)

Section titled “🧪 テイント (Taint) とアンテイント (Untaint)”

terraform taint コマンドは、特定のインフラリソースを**「テイント状態」**にします。これにより、次回の terraform apply 時にそのリソースが強制的に削除され、再作成されるようマークされます。リソースに予期せぬ問題が発生し、クリーンな状態から再構築したい場合に役立ちます。

  • 使用方法: terraform taint <リソースタイプ>.<リソース名>

一方で、terraform untaint コマンドは、テイント状態を解除します。taint を誤って実行した場合や、再作成が不要になった場合に利用します。

  • 注意: Terraform v0.15以降、terraform taint は非推奨となり、代わりに terraform apply -replace を使用することが推奨されています。

検証 (Validation) とフォーマット (Formatting) 📝

Section titled “検証 (Validation) とフォーマット (Formatting) 📝”

コードの品質と一貫性を保つための便利なコマンドです。

  • terraform validate: Terraformコードの構文が正しいかを検証します。apply を実行する前に必ず実行すべきです。
  • terraform fmt: Terraformコードを標準的なフォーマットに自動で整形します。これにより、チームメンバー間でコードのスタイルが一貫し、可読性が向上します。

これらのコマンドは、CI/CDパイプラインに組み込むことで、コードレビューの前に自動で品質チェックを行うことができます。

同じ種類のリソースを複数作成したい場合、for_eachcount を使って、動的にリソースを生成できます。

  • count: シンプルな整数の繰り返しでリソースを作成する場合に使用します。
resource "aws_instance" "app_server" {
count = 3 # 3つのインスタンスを作成
ami = "ami-0abcdef1234567890"
instance_type = "t2.micro"
}
  • for_each: より柔軟に、マップやセットの各要素に対してリソースを作成する場合に使用します。
variable "subnets" {
type = map(string)
default = {
"public" = "subnet-1a2b3c4d"
"private" = "subnet-5e6f7g8h"
}
}
resource "aws_network_acl_rule" "rule" {
for_each = var.subnets
subnet_id = each.value
rule_no = 100
protocol = "tcp"
}

テラグラント(Terragrunt): DRY原則の強化

Section titled “テラグラント(Terragrunt): DRY原則の強化”

Terragrunt は、Terraformをより効率的に扱うためのツールです。複数の環境で共通するコードを共有し、環境ごとの設定をDRY (Don’t Repeat Yourself) の原則に基づいて管理します。

  • DRY原則: terragrunt.hclファイルに環境固有の変数を定義することで、共通のTerraformコードを各環境で再利用できます。
  • 依存関係の管理: Terragruntは、複数のTerraformモジュール間の依存関係を明確に定義し、適切な順序で applydestroy を実行できます。
  • リモートステートの自動化: terragrunt.hclにバックエンド設定を記述することで、Terraformの.tfstateファイルを自動で管理し、環境ごとに適切なパスに保存できます。

IaCでは、認証情報やAPIキーといった機密情報をコードに含めないことが重要です。

  • 環境変数: TF_VAR_ プレフィックスをつけた環境変数として機密情報を設定できます。
  • Secrets Manager: AWS Secrets ManagerAzure Key VaultHashiCorp Vaultを利用し、Terraformのコード内でこれらのサービスから動的に機密情報を取得する仕組みを構築します。
  • .gitignore: .tfvarsファイルなどを.gitignoreファイルに追加し、機密情報がコミットされることを防ぎます。

リファレンスとドキュメンテーション

Section titled “リファレンスとドキュメンテーション”

Terraformは豊富なプロバイダーとリソースを提供しており、その全てを暗記するのは不可能です。公式ドキュメントを効率的に活用する方法についても言及します。

  • Terraform Registry: Terraform公式のプロバイダーとモジュールのレジストリです。利用したいプロバイダーやリソースのドキュメント、サンプルコードを検索できます。
  • HCLの学習リソース: HCLはシンプルですが、関数や式などの高度な機能も多数あります。公式ドキュメントやコミュニティのブログ、チュートリアルを通じて、より洗練されたコードを書くための方法を学べます。