5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Terraform Cloud利用時のmodule参照エラーについて

Last updated at Posted at 2024-08-29

はじめに

どうも、@to-fmakです。最近Terraform Cloudを利用している際に発生したモジュール参照エラーについて、事象と対応方法をまとめました。同じような問題に直面した方の参考になれば幸いです。

事象

Terraform Cloudをバックエンドとして利用しているTerraformリポジトリがあり、以下のようなディレクトリ構成を採用しています。

sample-repo
├── modules
│   └── sample-module
└── pj1
    └── main.tf

この構成において、新しいモジュール (sample-module) を作成し、pj1ディレクトリ内のmain.tfからそのモジュールを参照する必要がありました。

main.tf
module "sample" {
  source  = "../modules/sample-module"

  ...
}

上記のように、相対パスを使用してモジュールのsourceを指定しましたが、terraform planを実行した際に以下の参照エラーが発生しました。

╷
│ Error: Unreadable module directory
│
│ Unable to evaluate directory symlink: lstat ../modules: no such file or
│ directory
╵

╷
│ Error: Failed to read module directory
│
│ Module directory  does not exist or cannot be read.

実際の環境では、pj1と同じ階層に複数のディレクトリが存在し、それぞれのディレクトリ内のtfファイルからこのモジュール(sample-module)を参照する必要がありました。
各参照先でTerraformのバージョンが一致していない場合もありますが、今回の事象はTerraformのバージョンには関係ないことが判明しています。

原因

この問題の原因は、Terraform Cloud上のデフォルトの作業ディレクトリ設定にあります。
Terraform Cloudでは、デフォルトではリポジトリのルートディレクトリが作業ディレクトリとして設定されています。そのため、pj1ディレクトリ内から相対パスでモジュールを参照しようとすると、Terraform Cloudはリポジトリのルートディレクトリからの相対パスとして解釈し、指定したパスが存在しないと判断してしまいます。

相対パス利用時の対応方法

この問題を解決するためには、Terraform Cloud上の該当するワークスペースの設定を変更する必要があります。
具体的には、該当ワークスペースの「Workspace Settings」→「General」→「Terraform Working Directory」にて、作業ディレクトリとして作業ディレクトリ(pj1)を指定する必要があります。
この設定を行うことで、main.tf内のmoduleブロックで相対パスを使用してモジュールを正しく参照できるようになります。

image.png

image.png

参考URL

エンジニア募集

Gakken LEAP では教育をアップデートしていきたいエンジニアを絶賛大募集しています!!
ぜひお気軽にカジュアル面談へお越しください!!

https://gakken-leap.co.jp/recruit/

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?