将bitbucket用作源时,Terraform无法从模块获取参数

时间:2020-07-22 07:43:19

标签: amazon-web-services module bitbucket terraform

Error: Unsupported argument

  on main.tf line 3, in module "ec2_test":
   3:   ec2_count = 2

An argument named "ec2_count" is not expected here.


Error: Unsupported argument

  on main.tf line 4, in module "ec2_test":
   4:   ami_id = "ami-123"

An argument named "ami_id" is not expected here.


Error: Unsupported argument

  on main.tf line 5, in module "ec2_test":
   5:   instance_type = "t2.micro"

An argument named "instance_type" is not expected here.

当我从本地使用同一模块时,该模块运行正常。当我尝试使用上传到bitbucket的模块并将URL作为main.tf中的源时,就会出现问题。 Terraform初始化工作正常,并且将存储库克隆到.terraform/modules/ec2,但是在Terraform上应用它会出现上述错误。

下面提到的是ec2的模块和Bitbucket private-repo中的相应var文件 instance.tf:

provider "aws"{
  region = var.region
}

resource "aws_instance" "ec2" {
  count = var.ec2_count
  ami           = var.ami_id
  instance_type = var.instance_type
  subnet_id = var.subnet_id
  vpc_security_group_ids = var.security_grp

  tags = {
    Name = "Terraform_module_test"
  }
}

var.tf

variable "ec2_count" {
 default = "1"
}

variable "ami_id" {}

variable "instance_type" {
 default = "t2.micro"
}

variable "subnet_id" {}

variable "security_grp" {}

variable "region" {}

从中访问模块的main.tf

module "ec2_test" {
  source = "git@bitbucket.org:private-repo/terraform.git/modules_terraform/ec2"
  ec2_count = 2
  ami_id = "ami-123"
  instance_type = "t2.micro"
  subnet_id = "subnet-123"
  security_grp = ["sg-123"]
  region = "ap-southeast-1"
}

1 个答案:

答案 0 :(得分:1)

Terraform's supported module sources中的几个必须区分源代码将来自的存储库或软件包与该存储库或软件包中的路径。 Git源就是一个例子,因为Git协议要求首先检索整个存储库(使用obj2,然后才从本地工作树访问该子目录。

模块源文档讨论了Modules in Package Sub-directories中的语法:

当模块的来源是版本控制存储库或存档文件(通常是“软件包”)时,模块本身可能位于相对于软件包根目录的子目录中。

Terraform会解释特殊的双斜杠语法,以指示该点之后的其余路径是包中的子目录。

应用该示例,必须使用git clone标记将存储库路径与子目录路径分开:

//

以上所述应使Terraform在 source = "git@bitbucket.org:private-repo/terraform.git//modules_terraform/ec2" 之前先克隆存储库部分:

//

...,然后从生成的git工作树的git clone git@bitbucket.org:private-repo/terraform.git 子目录中加载模块。