【问题标题】:Terragrunt - reusing modules more effectivelyTerragrunt - 更有效地重用模块
【发布时间】:2020-12-29 04:29:31
【问题描述】:

我一直在尝试重新构建我的 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 repo 作为我的 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”块的问题

【问题讨论】:

  • 你已经在做正确的事情了!您可以考虑使用 git 源 (git::git@github.com:terraform-aws-modules/terraform-aws-ec2-instance.git//?ref=v2.15.0),但这主要是一个偏好问题。

标签: amazon-web-services terraform terraform-provider-aws terragrunt


【解决方案1】:

尝试这样使用:

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"
    }

【讨论】:

  • 是的,我尝试做类似的事情,但它抛出了这个错误“你必须定义一个后端块(它可以是空的!)”。我自己管理的那些 tf 模块会有后端块。但由于我将源指向 git repo,它没有它。
  • @JustStarted 后端块应该在 terragrunt 文件中定义。请看我的回答
  • 我已经更新了我原来的帖子。是的,我确实在位于父文件夹中的另一个文件中有它。我想知道是不是因为后端块不存在于 github repo 的 main.tf 文件中? github.com/terraform-aws-modules/terraform-aws-ec2-instance/…
  • @JustStarted 否,Github 的模块中不需要后端块。看起来你做的一切都是正确的。你有什么特别的错误吗?
  • 是的,我需要定义后端块的错误状态。难道是“find_in_parent_folders()”没有指向我的外部 terragrunt.hcl (1)?
【解决方案2】:

借助此链接设法了解更多

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-15
    • 2020-12-19
    • 2022-01-04
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 2019-12-31
    相关资源
    最近更新 更多