在只包含引用git源的tfvars文件的目录中运行terraform init



我正在尝试以terraform Up and Running一书末尾所描述的方式使用terraform。所描述的模式表明,您可以有一个repo,通过为每个环境(如prod、dev、ad-hoc开发人员环境等(使用*.tfvars文件来定义您的实时环境。这些*.tfvars文件引用了另一个repot中的模块,如下所示:

source = "git::https://github.com/github-user/my-module.git?ref=v0.0.1"
# required variables for `my-module` defined here
foo="bar"

这个图案对我来说很有意义,它是干的d还可以方便地比较环境之间的配置差异。

当我尝试在一个目录中运行terraform init时,该目录包含一个名为terraform.tfvars的文件,该文件引用了我的远程模块,我会遇到错误。这是我的terraform.tfvars文件:

source = "git::https://github.com/briancaffey/terraform-aws-django.git?ref=v0.0.2"
region="us-east-1"
...

以下是运行terraform initterraform init -var-file terraform.tfvars时,或者为s3后端指定-backend-config值时出现的错误:

Terraform initialized in an empty directory!
The directory has no Terraform configuration files. You may begin working
with Terraform immediately by creating Terraform configuration files.

我很难找到显示这种模式的示例,而且在terraform文档中也找不到任何显示如何在*.tfvars文件中使用source的内容。

我想做的事情可能吗?我不确定这是否会使事情复杂化,但我试图引用的远程地形模块也发布到了官方地形注册中心:https://registry.terraform.io/modules/briancaffey/django/aws/latest.

.tfvars文件仅用于为根模块的输入变量提供值。名称source在该上下文中没有特殊含义,如果初始化成功(如果目录中至少有一个.tf文件(,则对该配置的后续操作将报告根模块中没有名为source的变量。(事实上,不可能有,因为source是一个保留的变量名。(

如果您的目标是直接使用具有特定输入变量集的外部模块,那么最简单的配置结构是一个包含单个.tf文件(任何名称都可以(的目录,其中包含以下内容:

module "main" {
source = "git::https://github.com/briancaffey/terraform-aws-django.git?ref=v0.0.2"
region = "us-east-1"
}

这指定了模块的位置和要传递给它的输入变量

  • terraform init初始化目录,包括将模块源代码下载到本地目录中,以便后续命令可以引用它
  • CCD_ 18来应用所得到的配置

这个最小配置在它自己的根模块中没有定义任何输入变量,所以你不需要任何.tfvars文件或其他文件来使用它。但是,当你运行terraform init时,Terraform会自己生成一个.terraform.lock.hcl文件,记录提供程序的版本选择,因此,如果您打算将此配置置于版本控制之下,那么您应该将生成的文件与手写的.tf文件一起包括在内,以便记录这些版本选择以供将来使用。

相关内容

  • 没有找到相关文章

最新更新