在主输出中找不到模块源的 Terraform 输出

标签 terraform

这是我遇到的错误:

Error: Reference to undeclared resource

on outputs.tf line 2, in output "api-gateway-codedeploy-app-name":
2: value = "${api-gateway-codedeploy.app-name}"

A managed resource "api-gateway-codedeploy" "app-name" has not been declared in the root module.

我的 terraform 相关文件夹结构是

terraform
    |_ api-gatewy.tf
    |_ listing-service.tf
    |_ users-service.tf
    |_ outputs.tf
    |_ codedeploy
          |_ iam-instance-profiles.tf
          |_ main.tf
          |_ outputs.tf
          |_ s3.tf
          |_ variables.tf

主输出文件无法识别代码部署输出 即使 api-gateway 内的模块将 codedeploy-app 文件夹指向源。 用户/客户端服务也是如此,所以我只是附加了 api 模块作为示例

terraform/api-gateway.tf(api-gateway-codedeploy 模块)

    module "api-gateway-codedeploy" {
  source = "./codedeploy-app"

  app-name          = "api-gateway"
  ec2-instance-name = module.api-gateway.name

}

terraform/outputs.tf

output "api-gateway-codedeploy-app-name" {
  value = api-gateway-codedeploy.app-name
}

output "api-gateway-deployment-bucket-name" {
  value = api-gateway-codedeploy.deployment-bucket-name
}

output "api-gateway-private-ip" {
  value = module.api-gateway.private-ip
}

output "api-gateway-public-ip" {
  value = aws_eip.api-gateway-eip.public_ip
}


output "aws-region" {
  value = var.aws-region
}


output "listing-service-codedeploy-app-name" {
  value = listing-service-codedeploy.app-name
}

output "listing-service-deployment-bucket-name" {
  value = listing-service-codedeploy.deployment-bucket-name
}

output "listing-service-private-ip" {
  value = module.api-gateway.private-ip
}

output "listing-service-db-address" {
  value = module.listing-service-db.address
}


output "users-service-codedeploy-app-name" {
  value = users-service-codedeploy.app-name
}

output "users-service-deployment-bucket-name" {
  value = users-service-codedeploy.deployment-bucket-name
}

output "users-service-private-ip" {
  value = module.api-gateway.private-ip
}

output "users-service-db-address" {
  value = module.users-service-db.address
}

terraform/codedeploy/main.tf

resource "aws_iam_role" "codedeploy-role" {
  name = "${var.app-name}-codedeploy-role"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "codedeploy.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF
}

resource "aws_iam_role_policy_attachment" "aws-codedeploy-role" {
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSCodeDeployRole"
  role       = aws_iam_role.codedeploy-role.name
}


resource "aws_codedeploy_app" "default" {
  compute_platform = "Server"
  name             = var.app-name
}

resource "aws_codedeploy_deployment_group" "prod" {
  app_name              = aws_codedeploy_app.default.name
  deployment_group_name = "prod"
  service_role_arn      = aws_iam_role.codedeploy-role.arn

  ec2_tag_set {
    ec2_tag_filter {
      key   = "Name"
      type  = "KEY_AND_VALUE"
      value = var.ec2-instance-name
    }
  }
}

terraform/codedeploy/s3.tf

resource "aws_s3_bucket" "deploy-bucket" {
  bucket = "katoms-microservices-demo-${var.app-name}-deployment"

}

terraform/codedeploy/variables.tf

  variable "app-name" {
  type = string
}

variable "ec2-instance-name" {
  type = string
}

terraform/codedeploy/iam-instance-profiles.tf

resource "aws_iam_instance_profile" "ec2" {
  name = "${var.app-name}-ec2"
  role = aws_iam_role.ec2.name

terraform/codedeploy/outputs.tf

 output "app-name" {
  value = aws_codedeploy_app.default.name
}

output "deployment-bucket-name" {
  value = aws_s3_bucket.deploy-bucket.id
}

output "iam-instance-profile" {
  value = aws_iam_instance_profile.ec2.name
}

最佳答案

您将会遇到更多类似的错误。但要修复您提到的问题,请修复以下问题:

output "api-gateway-codedeploy-app-name" {
  value = api-gateway-codedeploy.app-name
}

指向引用模块的正确位置:

output "api-gateway-codedeploy-app-name" {
   value = module.api-gateway-codedeploy.app-name
}

关于在主输出中找不到模块源的 Terraform 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61128548/

相关文章:

azure - 如何在 Terraform 中使用日期进行计算

amazon-web-services - 使用 Terraform 从快照创建 RDS 实例

terraform v0.9 - s3 后端,语法问题

terraform - 资源定义移动到不同的模块会导致 'terraform apply' 删除并重新创建这些资源吗?

ansible - 当前从Terraform创建Ansible库存的最佳方法

azure - Terraform 设置 azure 存储帐户虚拟网络

amazon-web-services - Terraform:如何从 VPC id 获取 VPC CIDR?

json - 在 json 文件内的资源内使用 for_each 时出现 Terraform JSON 错误

amazon-web-services - Auto Scaling 组不会在启动配置更改时更新

terraform - 如何最好地处理使用通用 .tf 文件的多个 .tfvars 文件?