Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services Terragrunt-更有效地重用模块_Amazon Web Services_Terraform_Terraform Provider Aws_Terragrunt - Fatal编程技术网

Amazon web services Terragrunt-更有效地重用模块

Amazon web services Terragrunt-更有效地重用模块,amazon-web-services,terraform,terraform-provider-aws,terragrunt,Amazon Web Services,Terraform,Terraform Provider Aws,Terragrunt,我一直在尝试以一种可以重用的方式重构我的地形模块。 我在这里试图解决的问题是避免创建新的tf模块,这些模块只有一个或两个用于特定设置的新属性 目前的结构: ├── services │ ├── ec2 │ │ └── terragrunt.hcl │ ├── ec2_with_fixed_ip │ │ └── terragrunt.hcl (2) │ └── terragrunt.hcl (1) ├── tf_moodules └── ec2 │

我一直在尝试以一种可以重用的方式重构我的地形模块。 我在这里试图解决的问题是避免创建新的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
我还一直在考虑在terragrunt脚本中使用git repo作为源代码。这样,我就不必管理tf模块了。但我不确定应该如何编写terragrunt.hcl来指向GitHub repo并将其绑定到某个版本

这是推荐的做事方式吗?还是有更干净的方法

terragrunt.hcl中的含量(1)

terragrunt.hcl中的含量(2)

尝试了上述设置,但遇到缺少后端“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"
    }

在这个链接的帮助下,我找到了更多的答案

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


需要做的是包含generate块,告诉terragrunt将后端块生成到tf文件中以解决此问题。

是的,我尝试了类似的操作,但它抛出了一个错误“您必须定义后端块(它可以是空的!)”。那些由我管理的tf模块将具有后端块。但由于我将源代码指向git repo,所以它没有。@JustStarted后端块应该在terragrunt文件中定义。请看我的回答我已经更新了我原来的帖子。是的,我在父文件夹中的另一个文件中有。我想知道是不是因为github repo的main.tf文件中不存在后端块@JustStarted否,Github中的模块中不需要后端块。看起来你做的每件事都是正确的。您是否有任何特定错误?是的,我需要定义后端块的错误状态。可能是“find_in_parent_folders()”没有指向我的outer terragrunt.hcl(1)?您已经用正确的方法完成了!您可以考虑使用Git源(<代码> Git::git@github.com:terraform aws modules/terraform-aws-ec2-instance.git/?ref=v2.15.0),但这主要是偏好问题。
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
}
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"
    }