こんにちは。インフラの深淵を覗き込み、IaC(Infrastructure as Code)の美学を追求し続けるエンジニアです。
Terraformを書いているとき、「この書き方で本当に大丈夫だろうか?」「あとでトラブルにならないだろうか?」と不安になったことはありませんか? 実行してからエラーが出るのを待つのは、プロの仕事ではありません。
今日は、あなたのコードを「書いたその瞬間に」プロフェッショナルな品質へ引き上げる魔法のツール、TFLintについてお話しします。これを導入すれば、あなたのインフラはより堅牢に、そしてあなたの作業は驚くほど楽になります。
—
TFLintとは何か? なぜ「必須」なのか
Terraformの `terraform plan` は、クラウドのAPIと通信してリソースの状態を確認しますが、「コードそのものの不備」をすべて見抜けるわけではありません。
TFLintは、コードを実行する前に解析する「静的解析ツール」です。
- 非推奨の構文の指摘: 「その書き方はもう古いよ」と教えてくれる。
- クラウド特有のベストプラクティス: 「そのインスタンスタイプは、そのリージョンでは使えないよ」といった、APIを叩かないと分からないようなエラーを事前検知する。
- 設定ミス防止: セキュリティグループのポート指定ミスや、必須パラメータの欠落を即座に指摘する。
つまり、TFLintは「あなたの背後で常にコードをレビューしてくれる、超優秀なペアプログラマー」なのです。
—
ステップ1:インストールとセットアップ
まずは、あなたの環境に「監視の目」を入れましょう。MacであればHomebrewが最短です。
インストール
brew install tflint
バージョン確認
tflint –version
次に、プロジェクトのルートディレクトリに設定ファイル `.tflint.hcl` を作成します。これがTFLintの「憲法」になります。
.tflint.hcl
プラグインの自動ダウンロードを有効化
config {
call_module_type = “local”
}
AWSを利用する場合の必須設定(これがないと始まりません)
plugin “aws” {
enabled = true
version = “0.27.0” # 最新版を指定してください
source = “github.com/terraform-linters/tflint-ruleset-aws”
}
—
ステップ2:HelloWorld的な動作確認
それでは、わざとエラーが出るコードを書いて、TFLintの「鋭い指摘」を体感してみましょう。
`main.tf` を作成し、あえて「AWSで存在しないインスタンスタイプ」や「誤った設定」を記述します。
main.tf
resource “aws_instance” “web” {
# 存在しない無茶なインスタンスタイプ
instance_type = “t99.ultra_mega_expensive”
ami = “ami-0c55b159cbfafe1f0”
}
ここで、ターミナルから以下のコマンドを打ちます。
プラグインの初期化(初回のみ)
tflint –init
解析実行
tflint
結果はどうなりましたか?
おそらく、`Error: “t99.ultra_mega_expensive” is invalid instance type` といった真っ赤な警告が出たはずです。これがTFLintの真骨頂です。Terraformを実行して10分待ったあとに「エラーでした」と突き返される絶望を、この一瞬のコマンドが救ってくれるのです。
—
ステップ3:現場で震えるほど役立つ「おすすめルール」
TFLintを使いこなすなら、以下の設定を `.tflint.hcl` に追加してください。インフラの品質が格段に上がります。
.tflint.hcl に追加
1. 宣言したけど使っていない変数を警告する(コードの肥大化防止)
rule “terraform_unused_declarations” {
enabled = true
}
2. AWSリソースの非推奨プロパティをチェック
rule “aws_instance_invalid_type” {
enabled = true
}
3. 命名規則の強制(SREチームでの標準化に必須)
rule “terraform_naming_convention” {
enabled = true
}
—
未来へのステップ:CIへの統合
ローカルで直すだけでなく、GitHub ActionsなどのCI環境にもTFLintを組み込みましょう。
「TFLintがパスしないコードは、絶対に本番環境にマージさせない」というルールを徹底するのです。これにより、あなたのチームは「インフラの修正による事故」から解放されます。
CIでの設定例 (GitHub Actions)
- name: TFLint
run: |
tflint –init
tflint –format compact
—
最後に:エンジニアとして成長するために
TFLintのようなツールを導入することは、単なる「楽をするための手段」ではありません。「人間が犯しやすいミスを、機械に任せて排除する」というエンジニアリングの基本原則を実践することです。
あなたがルールを記述し、ツールがそれを守る。そのサイクルが確立されたとき、あなたは初めて、より複雑で、より創造的なインフラ設計に集中できるようになります。
さあ、今日からあなたのコードに、TFLintという「最強の監視者」を住まわせてみてください。きっと、数ヶ月後のあなたが、今の決断に感謝することになるはずですよ。
もし分からないことがあれば、いつでも聞いてください。インフラの荒波を乗り越えるための知恵を、惜しみなくお伝えします。