Terraformを利用した構文チェックやVS CODEと連携した設定の仕方を解説
Contents
はじめに
こんにちは、久しぶりのブログ投稿になってしまいましたが皆さま、いかがお過ごしでしょうか。
今回は、 Windows 環境を対象に IaC ツールである terraform を題材として、 各種ツールの紹介から VS CODE との連携まで簡単にご紹介いたします。
それでは、早速、みていきましょう。
tfenv のセットアップ
rbenv にインスパイアされた Terraform のバージョンマネージャーである tfenv のセットアップをおこないます。
こちらを使うことにより、 terraform のバージョンを切り替えることが可能になります。
bash --version
GNU bash, version 5.2.15(1)-release (x86_64-pc-msys)
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
git clone https://github.com/tfutils/tfenv.git ~/.tfenv
echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
terraformバージョンにより、動作に影響する場合があるので任意のバージョンをインストールします。
インストール可能なバージョンの一覧を確認します。
tfenv list-remote | sort -n
・
・[中略]
・
1.4.1
1.4.2
1.4.3
1.4.4
1.4.5
1.4.6
1.5.0-alpha20230405
1.5.0-alpha20230504
1.5.0-beta1
今回は、terraform version 1.4.6 をインストールします。
インストール完了後、 tfenv use 1.4.6
しろと出ます。
tfenvで使用するバージョンを切り替えるコマンドとなり、今回、インストールしたバージョンを利用したいのでそのままコマンドを実行します。
tfenv install 1.4.6
Installing Terraform v1.4.6
Downloading release tarball from https://releases.hashicorp.com/terraform/1.4.6/terraform_1.4.6_windows_amd64.zip
######################################################################## 100.0%
Downloading SHA hash file from https://releases.hashicorp.com/terraform/1.4.6/terraform_1.4.6_SHA256SUMS
Not instructed to use Local PGP (/c/Users/***/.tfenv/use-{gpgv,gnupg}) & No keybase install found, skipping OpenPGP signature verification
Archive: /tmp/tfenv_download.uhBh60/terraform_1.4.6_windows_amd64.zip
inflating: /c/Users/***/.tfenv/versions/1.4.6/terraform.exe
Installation of terraform v1.4.6 successful. To make this your default version, run 'tfenv use 1.4.6'
tfenv use で指定したバージョンがデフォルトで選択され、環境変数「TFENV_TERRAFORM_VERSION」または、「.terraform-version」ファイルに指定されていればそちらのバージョンへ上書きされます。
tfenv use 1.4.6
Switching default version to v1.4.6
Default version (when not overridden by .terraform-version or TFENV_TERRAFORM_VERSION) is now: 1.4.6
tfenv list コマンドでインストール済 terraform バージョンを確認することが可能です。
tfenv list
* 1.4.6 (set by /c/Users/***/.tfenv/version)
tfenv の詳細な使い方は以下を参照してください。
terraform の自動補完機能を有効にします。
ただし、 terraform のバージョンが変更された際に再設定の必要があることに注意してください。
バージョンが変更された際にも対応可能な方法はありますがここでは割愛します。
terraform -install-autocomplete
source ~/.bashrc
cat ~/.bashrc
complete -C C:\Users\***\.tfenv\versions\1.4.6\terraform.exe terraform.exe
tflint のセットアップ
terraform validate や terraform plan で、検出できない構文不備を見つけることができる構文チェックツールをセットアップします。
各 OS 用にパッケージが用意されています、今回は、windows版をインストールします。
https://github.com/terraform-linters/tflint/releases/download/v0.46.1/tflint_windows_amd64.zip
各 OS のパッケージは以下、リンク先から確認可能です。
tfenv インストール先ディレクトリを作成します。
mkdir ~/.tfenv/tflint
ls -la ~/Downloads/tflint_windows_amd64.zip
-rw-r--r-- 1 *** 197121 9153139 May 21 01:16 /c/Users/***/Downloads/tflint_windows_amd64.zip
先ほど作成したディレクトリを指定した形で解凍します。
unzip ~/Downloads/tflint_windows_amd64.zip -d ~/.tfenv/tflint/
Archive: /c/Users/***/Downloads/tflint_windows_amd64.zip
inflating: /c/Users/***/.tfenv/tflint/tflint.exe
パスを知らせるため、 windows の環境変数に tflint のインストール先 C:\Users\***\.tfenv\tflint
を設定します。
- 設定手順
windows スタートメニューを右クリックし、「ファイル名を指定して実行」をクリック後、
sysdm.cpl
を入力し「OK」をクリックします。システムのプロパティ画面が出ますので、詳細設定タブを選択します。
環境変数ボタンをクリックし、ユーザーの環境変数より Path 項目をダブルクリックします。
新規ボタンをクリックし、 tflint をインストールしたパスを入力し「OK」ボタンをクリックします。
git bash を終了し、新規で再度、開き、 tflint --version
と入力し、コマンド結果が返ってくればインストール完了です。
tflint --version
TFLint version 0.46.1
+ ruleset.terraform (0.2.2-bundled)
tflint 構文チェック設定
terraform のプロジェクト直下へ、 tflint の設定ファイルを置く必要がありますので設定します。
「TFLint Ruleset for terraform-provider-aws」というAWSのルールセットが用意されていますのでこちらを利用します。
enabled
tflint のチェックを有効にするか否かです。
使用する場合、 true にします。deep_check
こちらはより詳細にチェックをおこなってくれるオプションとなり AWS へのより取りアクセス権限が必要になります。
tflint-ruleset-aws/deep_checking.md at 43f74503100953b1d88308698add6580166f9981 · terraform-linters/tflint-ruleset-aws · GitHubversion
以下、 tflint のリリースページにある、バージョン「v*.**.**
」の「*.**.**
」部分を指定します。
Releases · terraform-linters/tflint-ruleset-aws · GitHubsource
GitHub – terraform-linters/tflint-ruleset-aws: TFLint ruleset for terraform-provider-awsAWSリソースに関する起こりうるエラーやベストプラクティスに焦点を当てています。多くのルールはデフォルトで有効になっており、terraform applyを実行した際に失敗する可能性のあるコードや、明らかに推奨されていないコードに対して警告を発しています。
vi .tflint.hcl
plugin "aws" {
enabled = true
deep_check = true
version = "0.23.0"
source = "github.com/terraform-linters/tflint-ruleset-aws"
}
初期化
tflint –init コマンドを実行し、初期設定を適用します。
これにより、ルールセットがダウンロードされます。
terraform プロジェクト設定
terraform.tfvarsというファイルは特別なファイルとなり、自動的に読み込まれ、外に公開したくない認証情報などを記載しておくものとなりここに認証情報等を記載します。
vi terraform.tfvars
aws_access_key = "{アクセスキー}"
aws_secret_key = "{シークレットキー}"
※一般的に「credentials.csv」に認証情報が記述されています。(IAMユーザ作成の時にダウンロードしておくようにします。)
それぞれ「{アクセスキー}」、「{シークレットキー}」を各々のものにあわせてください。
main.tf
main.tfというファイルを作成し、プロバイダー情報や、AWSのIAMユーザに関すること記述します。
これは、Terraform 0.13以降の書き方となります。
required_version は terraform のバージョンとなります。
terraform –version コマンドで確認可能です。
required_providers 項目の version は AWS プロバイダーのバージョンとなります。
プロバイダーのバージョンは以下より確認可能です。
hashicorp/aws | Terraform Registry
vi main.tf
terraform {
required_version = "1.4.6"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.67.0"
}
}
}
variable "aws_access_key" {}
variable "aws_secret_key" {}
variable "region" {
default = "ap-northeast-1"
}
provider "aws" {
access_key = var.aws_access_key
secret_key = var.aws_secret_key
region = var.region
}
プロジェクト初期化
terraformのプロジェクト初期化およびプラグインダウンロードの為、 「terraform init」 コマンドを使用します。
「Terraform-provider-aws_v4.67.0」のダウンロードがなされ、「Terraform has been successfully initialized!」でプロジェクトの初期化が完了したことになります。
※terraformバックエンドやモジュールの変更を実施した場合、再初期化が必要となります。
動作確認
適当に AWS リソースを定義し、構文チェック等を実施します。
チェックは以下コマンドで実施可能です。
terraform fmt でフォーマットを整えてくれます。
terraform fmt
tflint
terraform validate
以下コマンドで、 デプロイ前のチェックおよびAWS 環境へデプロイが実施できます。
terraform plan -out=output.bin
terraform apply "output.bin"
Ex.
VS CODE に以下、拡張機能を導入することで、 Terraform の構文チェックや自動フォーマットを実施できます。
名前: HashiCorp Terraform
ID: hashicorp.terraform
説明: Syntax highlighting and autocompletion for Terraform
バージョン: 2.26.1
パブリッシャー: HashiCorp
VS Marketplace リンク: https://marketplace.visualstudio.com/items?itemName=HashiCorp.terraform
VS CODE の settings.json へ以下記述をすると便利です。
この設定は、拡張機能のページにも記載がありますので気になった方は、参考にしてください。
"terraform.experimentalFeatures.prefillRequiredFields": true,
"terraform.experimentalFeatures.validateOnSave": true,
"diffEditor.codeLens": true,
"terraform.codelens.referenceCount": true,
"[terraform]": {
"editor.defaultFormatter": "hashicorp.terraform",
"editor.formatOnSave": true,
"editor.formatOnSaveMode": "file",
"editor.suggest.preview": true,
"editor.codeActionsOnSave": {
"source.formatAll.terraform": true
}
},
"[terraform-vars]": {
"editor.defaultFormatter": "hashicorp.terraform",
"editor.formatOnSave": true,
"editor.formatOnSaveMode": "file",
"editor.suggest.preview": true,
"editor.codeActionsOnSave": {
"source.formatAll.terraform": true
}
},
"terraform.validation.enableEnhancedValidation": true,
"[terraform][terraform-vars]": {
"editor.codeActionsOnSave": {
"source.formatAll.terraform": "explicit"
}
}
まとめ
いかがでしたでしょうか、筆者の感想としてはよりすくない記述量で AWS リソースが定義でき、構文チェックや補助機能、各種参考文献が豊富にあり、とても使いやすい印象を受けました。
terraform がもっと普及しより便利になることを願い締めさせていただきます。
ディスカッション
コメント一覧
まだ、コメントがありません