Terraform 開発環境をローカルに構築する

IT

はじめに

本記事では Terraform 開発環境をローカルに構築する方法についてまとめます。
Terraform のインストールや開発を助けるツールのインストールを行います。
最後に VSCode を使用する場合の追加設定も記載します。

環境

Mac を使用します。

  • Apple M1
  • macOS Ventura 13.2

構築手順

Terraform

インストール

tfenv で Terraform をインストールします。
tfenv により複数プロジェクトで異なる Terraform のバージョンを使用している場合に対応できます。
また単一のプロジェクトでのみ使用する場合も、Terraform のバージョンをあげて動作検証する場合などに複数バージョン使用する必要があるため tfenv を使用して Terraform バージョン管理をすることをお勧めします。

Mac の場合のインストールコマンド

brew install tfenv
tfenv --version
tfenv install latest
tfenv use latest
tfenv list

.terraform-version 作成

.terraform-versionを特定のディレクトリに作成しておくことによって、そのディレクトリ配下のみ適用するバージョンを指定できます。
またtfenv installでインストールされるバージョンが.terraform-versionに記載されたバージョンになります。
さらに Terraform 実行時に、ローカルに.terraform-versionのバージョンがない場合は、自動でインストールされます。

.terraform-versionは以下のようにバージョンを記載するだけです。

1.3.9

TFLint

インストール

TFLintを用いることで、例えば存在しないインスタンスタイプの指定などterraform validateterraform planでは検知できないエラーを検知できます。
またカスタムルールを作成することで、命名規則など独自にルールを設定することも可能です。

こちらに記載があるように、TFLint は Terraform を内蔵しているので、環境にインストールしている Terraform のバージョンと TFLint が内蔵している Terraform のバージョンは一致させるのがベストプラクティスになります。Terraform のバージョンアップはある程度は後方互換性があるので、バージョンが違ってもすぐに問題が発生するわけではありません。ただし、この前提によっては誤検出が発生する可能性があることを念頭に置く必要があります。
(2023年2月時点で最新の TFLint は Terraform v1.1.0をバンドルしている)

Mac の場合のインストールコマンド

brew install tflint
tflint -v

実行方法

  • 対象の.tfファイルが存在するディレクトリに.tflint.hclを作成する(以下は AWS の RuleSet Plugin をインストールする例)
plugin "aws" {
    enabled = true
    version = "0.21.2"
    source  = "github.com/terraform-linters/tflint-ruleset-aws"
}
  • tflint --initを実行する
  • ターミナルでtflintを実行する

tfsec

インストール

tfファイルのセキュリティチェックツールとして tfsec を使用します。
VSCode 用の拡張もあります。
tfsecを利用することでセキュリティ推奨事項に沿った構築が可能です。

少し逸れますが、tfファイルへの機密情報のベタ書きなど行うとtfstateファイルに機密情報が残りセキュリティリスクになります。tfstateファイルのセキュリティについてはこちらの資料が非常に参考になります。
tfsecを利用することでこういったセキュリティリスクを未然に防ぐことができます。

Mac の場合のインストールコマンド

brew install tfsec
tfsec -v

実行方法

  • (CLIで実行する場合)対象のtfファイルが存在するディレクトリでtfsecを実行する
  • (VSCodeの拡張を使用する場合)は以下のように、アクティビティバーに tfsec のアイコンが追加され、こちらから結果を確認できる

terraform-docs

インストール

module のドキュメント出力には terraform-docs を使用します。
module の input や output を記載したドキュメントを自動で出力することができます。出力形式は yaml や markdown など選ぶことができます。

Mac の場合のインストールコマンド

brew install terraform-docs

VSCode を使用する場合の設定

Terraform Extension

開発に VSCode を使用する場合は拡張機能を入れておきましょう。
補完が効いたり、シンタックスハイライトが有効になります。

自動フォーマット

保存時に自動的にterraform fmtが実行されるようにsettings.jsonにeditor.formatOnSaveの設定を入れておくと良いです。

おわりに

本記事では2つのテーブル間で不一致のレコードを抽出する方法についてまとめました。
複数環境のデータ比較などの際に役立てていただければと思います。
この記事がどなたかの参考になれば幸いです。

参考

コメント