我一直在尝试以一种可以重用的方式重组我的地形模块。我在这里试图解决的问题是避免创建新的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";块
尝试使用这种方式:
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"
}
借助这个链接设法了解更多信息
https://github.com/gruntwork-io/terragrunt/issues/311
在我的情况下,尽管我已经在terragrunt根文件中定义了remote_state块,但在运行terragrund命令后,后端块不会在缓存文件夹中生成。
需要做的是包括generate块,以告诉terragrunt将后端块生成到tf文件中,从而解决此问题。