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

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

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

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

AWS(Amazon Web Services)

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

受付中

Terraform Moduleを使い別ディレクトリのリソースを参照させたい

Baloncesto
Baloncesto

総合スコア7

Terraform

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

AWS(Amazon Web Services)

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

1回答

0評価

3クリップ

188閲覧

投稿2022/06/30 03:44

編集2022/06/30 17:58

表題の件で確認させてください。

現在以下フォルダ構成の環境でTerraform環境を構築しております。

├─tf-common │ │ output.tf │ │ provider.tf │ │ sns.tf │ │ terraform.tfvars │ └─tf-tenant │ .terraform.lock.hcl │ cloudwatch.tf │ provider.tf │ route53.tf │ Tenant-0041.tfvars │ └─.terraform │ terraform.tfstate

tf-tenantフォルダ配下でterraform planを実行すると以下のようにエラーとなりました。
sns_topicが参照できない旨のエラーとなるのですが、解決できず困っております。

│ Error: Reference to undeclared resource │ │ on cloudwatch.tf line 23, in resource "aws_cloudwatch_metric_alarm" "healthcheck": │ 23: alarm_actions = ["${aws_sns_topic.topic.arn}"] │ │ A managed resource "aws_sns_topic" "topic" has not been declared in the root module.

調べてみると、moduleを利用することで別フォルダのリリースを参照できるとのことなのですが、
今ひとつ使い方がわからず、困っております。

この環境の場合、どういったmoduleを利用することでsnsのリソースを参照させることができるのでしょうか?

念のためですが、cloudwatch.tfとsns.tfのコードは以下となります。
cloudwatch.tf

6 resource "aws_cloudwatch_metric_alarm" "healthcheck" { 7 count = length(aws_route53_health_check.HealthCheck) 8 provider = aws.virginia 9 alarm_name = var.targets[count.index].alarm_name 10 comparison_operator = "LessThanThreshold" 11 evaluation_periods = "1" 12 metric_name = "HealthCheckStatus" 13 namespace = "AWS/Route53" 14 period = "60" 15 statistic = "Minimum" 16 threshold = "1" 17 18 dimensions = { 19 HealthCheckId = aws_route53_health_check.HealthCheck[count.index].id 20 } 21 alarm_description = "Send an alarm if ${var.environment} is down" 22 actions_enabled = "true" 23 alarm_actions = ["${aws_sns_topic.topic.arn}"] }

sns.tf

resource "aws_sns_topic" "topic" { # name = var.sns_topic name = var.service_name provider = aws.virginia delivery_policy = jsonencode({ "http" : { "defaultHealthyRetryPolicy" : { "minDelayTarget" : 20, "maxDelayTarget" : 20, "numRetries" : 3, "numMaxDelayRetries" : 0, "numNoDelayRetries" : 0, "numMinDelayRetries" : 0, "backoffFunction" : "linear" }, "disableSubscriptionOverrides" : false, "defaultThrottlePolicy" : { "maxReceivesPerSecond" : 1 } } }) } resource "aws_sns_topic_subscription" "default" { topic_arn = aws_sns_topic.topic.arn provider = aws.virginia protocol = "lambda" endpoint = aws_lambda_function.default.arn }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

68user

2022/06/30 06:28

その前に、common:tenant が 1対多でいいんですかね。 そして全体を 1つの tfstate にするのはOK? どちらも yes であるなら、 module-common/ module-tenant/ main.tf という構成にして、main.tf は module "common" { source = "./module-common" } module "tenant1" { source = "./module-tenant" sns_topic = common.aws_sns_topic } module "tenant2" { source = "./module-tenant" sns_topic = common.aws_sns_topic } とかそういう感じです。 まずは tfstate を分けるかどうかを決めましょう。module 化はキレイに整理するための手段なのでどっちでも (module 化したほうがよいとは思いますが)。
68user

2022/06/30 06:31

> 調べてみると、moduleを利用することで別フォルダのリリースを参照できるとのことなのですが、 module でそういうのできましたっけ。 別 tfstate を見るなら terraform_remote_state だと思います。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Terraform

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

AWS(Amazon Web Services)

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