Terragrunt - 更有效地重用模块

Terragrunt - reusing modules more effectively

我一直在尝试以一种可以重复使用的方式重组我的 Terraform 模块。 我在这里试图解决的问题是避免创建只有一两个用于特定设置的新属性的新 tf 模块。

当前结构:

├── services
│   ├── ec2
│   │   └── terragrunt.hcl
│   ├── ec2_with_fixed_ip
│   │   └── terragrunt.hcl (2)
│   └── terragrunt.hcl (1)
├── tf_moodules
    └── ec2
    │   └── main.tf
    └── ec2_with_fixed_ip
    │   └── main.tf
    └── ec2_with_root_block_device
        └── main.tf

我也一直在考虑使用 terraform-aws-ec2-instance git 存储库作为我的 terragrunt 脚本的来源。这样,我就完全不必管理 tf 模块了。但我不确定我应该如何编写 terragrunt.hcl 以指向 GitHub 存储库并与特定版本挂钩。

这是推荐的处理方式吗?或者有更简洁的方法吗?

里面的内容 terragrunt.hcl (1)

remote_state {
  backend = "s3"

  config = {
    encrypt        = true
    bucket         = "my_bucket"
    key            = "${path_relative_to_include()}/terraform.tfstate"
    region         = "ap-southeast-1"
    dynamodb_table = "tf-locks"
  }
}

里面的内容terragrunt.hcl(2)

terraform {
  source = "git::https://github.com/terraform-aws-modules/terraform-aws-ec2-instance.git//?ref=v2.15.0"
}

include {
  path = find_in_parent_folders()
}

inputs = {
  ami = "ami-0123456789abcd"
  instance_type = "t3.medium"
  disable_api_termination = false
}

已尝试上述设置,但面临缺少后端“s3”块的问题

尝试这样使用:

terragrunt = {
    terraform {
    source = "git::git@github.com:org/repo.git//lambda?ref=v0.6.2"
  }
}

    backend "s3" {
      bucket         = "stage-terraform"
      key            = "app/terraform.tfstate"
      region         = "us-east-1"
      encrypt        = false
      dynamodb_table = "stage-terraform-lock-table"
    }

借助这个link

设法弄清楚了更多

https://github.com/gruntwork-io/terragrunt/issues/311

在我的例子中,即使我在我的 terragrunt 根文件中定义了 remote_state 块,但在 运行 terragrunt 命令之后,缓存文件夹中不会生成后端块。

需要做的是将generate block包含进来告诉terragrunt将后端block生成到一个tf文件中来解决这个问题。