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

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

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

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

2737閲覧

別ディレクトリのresouce_IDを取得したい

suzunashi

総合スコア16

Terraform

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/10/12 16:59

###問題
terraformにてmoduleを使用して構築をしております。
その際、別ディレクトリにあるVPC_IDを取得したいのですが、pathの指定が間違っているのか取得できません。

ディレクトリ構造

demo └modules  └vpc   └vpc.tf   └valiables.tf   └output.tf  └security_g   └sg.tf   └valiables.tf   └conf.tf main.tf conf.tf terraform.tfstate

コード

vpc/vpc.tf

HCL

1resource "aws_vpc" "sample_vpc" { 2 cidr_block = var.vpc_cider 3 instance_tenancy = "default" 4 enable_dns_support = true 5 enable_dns_hostnames= true 6 enable_classiclink_dns_support=false 7 8 tags={ 9 Environment="stage" 10 Name="${var.tag_name}-${var.tag_name_vpc}" 11 Service="vpc" 12 System="test" 13 } 14}

/vpc/output.tf

HCL

1output "vpc_id" { 2 value = aws_vpc.main_vpc.id 3}

/security_g/sg.tf

HCL

1data "terraform_remote_state" "dev_vpc_id"{ 2 backend="local" 3 config={ 4 path="../../terraform.tfstate" 5 } 6} 7 8 9resource "aws_security_group" "logs_sg"{ 10 name ="test" 11 description ="test" 12 vpc_id=data.terraform_remote_state.dev_vpc_id.outputs.vpc_id 13}

/security_g/conf.tf

HCL

1terraform{ 2 backend"local"{ 3 path="../../terraform.tfstate" 4 } 5}

demo/conf.tf

HCL

1terraform { 2 required_version = ">=0.13" 3 required_providers { 4 aws = { 5 source = "hashicorp/aws" 6 version = "~>3.0" 7 } 8 } 9} 10provider "aws" { 11 region = "ap-northeast-1" 12}

お願いしたい事

tfstateファイルはS3で保管ではなく、現状のディレクトリの状態で、別ディレクトリのリソースIDを取得する方法を教えて下さい。
コードのpathの指定に間違いがあれば指摘お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

わざわざvpcとsgを別モジュールにしているのだから、main.tfのほうでvpcモジュールのoutputをsgモジュールに変数として渡すようにしてやればよいのではないでしょうか?
main.tfはどのようにしていますか?

投稿2021/10/13 02:28

yu_1985

総合スコア7588

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

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

suzunashi

2021/10/13 04:03 編集

main.tfから渡す方法だと下記のような形でしょうか? 〇〇〇〇の部分をどう指定すれば良いのかがわかりません。 >>sg.tf resource "aws_security_group" "logs_sg"{ name ="test" description ="test" vpc_id=var.sample } >>main.tf module "network"{   source =".modules/vpc" . . . } output "sample_id" {   value=module.network.vpc_id } module "sg"{   source="./modules/sg"   sample=〇〇〇〇 }
yu_1985

2021/10/13 06:12

/vpc/output.tfに"vpc_id"を定義してますよね。 main.tfの方でvpcとsgをモジュールとして呼び出すかと思うので、vpcのoutputをそのままsgの変数に渡せばよいです。 ここにはコードブロックが使えないので見づらいですが以下のようなイメージでしょう(モジュール名は適当なので好きなようにリネームしてください) module "hogevpc" { source = "./modules/vpc" (中身は省略) } module "hogesg" { source ./modules/sg sample = module.hogevpc.vpc_id } sgの方に変数を定義しておけば、モジュールに変数としてoutputの値を渡せます。 ここにはvariables.tfの中身が書いてないのでどう定義しているかわかりませんが、必要な変数がなければ適当に追加してください。記載に倣って`sample` という変数がsgモジュール内で定義済みである前提で記載してます。 この辺の記事も参考にしてみてください https://dev.classmethod.jp/articles/terraform_module_coordination/
suzunashi

2021/10/13 06:59

解決できました!ありがとうございます。 同じ方法をやってもできなかったんですが、sample = module.hogevpc.vpc_idの記述方法がミスっていた様です。 丁寧にコードまで記載頂きありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問