IntelliJ IDEAでのTerraform開発を行う場合、
以下のプラグインを使うと便利ですが、設定に少し工夫が必要だったのでメモを残しておきます。

HashiCorp Terraform / HCL language support
https://plugins.jetbrains.com/plugin/7808-hashicorp-terraform--hcl-language-support

プラグインのインストール

IntelliJ IDEAからプラグインをインストールします。

メニューから「Preferences」を選び、
「Preferences」の左メニューから「Plugins」を選び、
「MarketPlace」タブに切り替えて、
「Terraform」「Watcher」等で検索して、次の2プラグインをインストールします。

HashiCorp Terraform / HCL language support | JetBrains Marketplace
https://plugins.jetbrains.com/plugin/7808-hashicorp-terraform--hcl-language-support

File Watchers | JetBrains Marketplace
https://plugins.jetbrains.com/plugin/7177-file-watchers

インストール後、再起動します。

自動フォーマットの設定

「*.tf」ファイル保存時に、フォーマット処理を実行するようにします。

FileWatcherの設定

「*.tf」ファイル保存時に「terraform fmt」を実行させます。

メニューから「Preferences」を選び、
「Preferences」の左メニューから「Tools -> File Watchers」を選び、
左下「+」ボタンから「terraform fmt」を追加します。

以上で「*.fmt」ファイル保存すると、自動でフォーマットされるようになります。

# Code Style -> Terraform Configで試行錯誤したのですが、
# 「terraform fmt」と同等の設定には出来なかったので。
# 「Formatting Option/Align properties」を「on equals」にすると、
# 似た感じにはなりますが、同じフォーマットでは無いです。

Save Actionsでの「*.tf」無効化

私の場合、普段は自動フォーマットに次のプラグインを使っています。

Save Actions | JetBrains Marketplace
https://plugins.jetbrains.com/plugin/7642-save-actions

terraformの開発プロジェクトの中には、
(awsのlambdaを適用する時など)JavaScriptやPython等のコードが含まれる場合があるため、
このプラグインも利用したいですが、
先ほどのFileWatcherの設定と二重に実行されると都合が悪いので除外設定しておきます。

メニューから「Preferences」を選び、
「Preferences」の左メニューから「Save Actions」を選び、
右下「File Path Exclusions」の「+」ボタンから「.*.tf」を追加します。

tflintの設定

terraformの設定ファイルをチェックするために、tflintを利用します。

tflint | GitHub
https://github.com/terraform-linters/tflint

tflintのインストール

tflintはhome brewなどでインストールします。

% brew install tflint

LanguageServerの設定 (2021.04時点ではNG)

tflintはLanguage Server Protocolに対応しているので、
LSP Supportプラグインで利用できそうなのですが、試したところダメでした。

おそらく次のissue絡みだと思います。
https://github.com/gtache/intellij-lsp/issues/94

現状上手く動かないのですが、以下に設定方法のメモだけ残しておきます。

「プラグインのインストール」と同様に、次のプラグインをインストールします。

LSP Support | JetBrains Marketplace
https://plugins.jetbrains.com/plugin/10209-lsp-support

メニューから「Preferences」を選び、
「Preferences」の左メニューから、
「Language & Frameworks -> Language Server Protocol -> Server Definitions」を選びます。

次のような指定で、サーバ定義を追加します。

  • Type: Executable
  • Extension: tf
  • Path: /usr/local/bin/tflint
  • Args: --langserver

以上。