質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Terraform

Terraformは、インフラ構築のためのツールです。AWS/DigitalOcean/GoogleCloudといった様々なインフラに対応。インフラ構成のコード管理や変更の作業などの手間を自動化し、インフラ構築の効率化を図ることができます。

Q&A

1回答

1386閲覧

terraform 複数環境の構築 main.tf modules の使い方

GytaAmies

総合スコア12

Terraform

Terraformは、インフラ構築のためのツールです。AWS/DigitalOcean/GoogleCloudといった様々なインフラに対応。インフラ構成のコード管理や変更の作業などの手間を自動化し、インフラ構築の効率化を図ることができます。

0グッド

1クリップ

投稿2021/04/23 11:50

前提・実現したいこと

terraformでAWS環境を構築しています。

ディレクトリ構成
.(root)
|
|--app
| |--modules
| |--ec2.tf
| |--vpc.tf
| |--ecs
| |--codebuild
| |--...
| |--variables
|
|--aaadaigaku
| |--test
| | |--main.tf
| | |--app1-main.tf
| | |--app2-main.tf
| | |--app3-main.tf
| |
| |--prod
| |--stg
| |--...
|
|--bbbdaigaku
|--cccdaigaku
|--...

↓↓↓↓  app/modules/variables ↓↓↓↓

variable daigaku = {} variable env = {} variable vpc = {} variable subnet = {} . . variable cluster = {} variable image = {} . . .

↓↓↓↓↓↓  aaadaigaku/test/main.tf  ↓↓↓↓↓↓

module "test" source = "./app/modules" daigaku = "aaadaigaku" env = "test" vpc = "vpc-****" subnet = "subnet-****" . . .

↓↓↓↓↓↓  aaadaigaku/test/app1-main.tf ↓↓↓↓↓↓↓↓

module "app" source = "./app/modules" app_env = "app1" cluster = "arn::*******/app1_cluster" image = "arn://******/app1_image" . . .

aaadaigaku/test/main.tfでは、VPCやサブネットなどの定義をしています。
aaadaigaku/test/app1-main.tfでは、ECSのクラスター名やイメージを定義しています。
app2-main.tf,app3-main.tfも同様にそれぞれのクラスターやイメージを定義しています。

app1,app2,app3はどれも同じVPCやサブネットを使っています。
なので、aaadaigaku/test/main.tf で先にVPCなどを定義してあげて、app1,app2,app3はmain.tfを参照した(含めた)うえでapplyを行いたいです。
applyする場所は"test"です。
testでapplyすることにより、app1,app2,app3が同時に構築されるようにしたいです。

発生している問題・エラーメッセージ

:test$ terraform plan Error: Missing required argument on main.tf line 1, in module "test": 1: module "test" { The argument "cluster" is required, but no definition was found. Error: Missing required argument on main.tf line 1, in module "test": 1: module "test" { The argument "image" is required, but no definition was found. . . .

aaadaigaku/test/main.tfは上手くmodulesと連携してくれたのですが
aaadaigaku/test/app1-main.tfは反応しませんでした。
エラーにはちょうどapp1-main.tfで定義した値がエラー起こしていました。

おそらく、app/modules/variables は aaadaigaku/test/main.tf にしか反応しないらしいです。
同じディレクトリ内で複数のmain.tfファイルは不可能らしいです。

これを上手く解消して、構築できる方法はありますでしょうか??
ご教授お願い致しますm(__)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

エラーメッセージを拝見する限りでは
aaadaigaku/test/main.tfにて定義されている、
"test" moduleにてmoduleにinputするパラメータ定義が不足している為エラーが発生しているように見受けられます。

解決策としては3パターンあります。

  1. app/modules/variables にて定義されているvariableに定義されているパラメータを、各module設定内容にて定義不要なパラメータ項目をnull値等で埋める

  2. app/modules/variables にdefaultパラメータを追記し、各moduleの設定にて定義不要なパラメータ値の入力を不要にする

  3. terraform document

上記URLを参考に、app/modules/variablesで定義する input variableをoptionalにし、各パラメータ入力を必須(Required)ではなく選択制(Optional)に修正する(terraform 0.14.0以降のみ利用可能、実験的機能です)

投稿2021/07/15 04:55

fenethtool

総合スコア68

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問