我已经开始使用Terraform,并且已经完全购买了它 - 令人惊叹!根据AWS VPC,子网,NACL,SG,路由表等等创建了我的整个开发环境,我决定最好把它变成可重用的模块。Terraform s3后端未被模块使用
所以现在我已经把它变成模块,变量等。现在我的开发模板只需要变量,并将它们用作模块的输入。我结束了这一点:
terraform {
backend "s3" {
bucket = "redacted"
key = "dev/vpc/terraform.tfstate"
region = "eu-west-1"
encrypt = true
dynamodb_table = "terraform_statelock_redacted"
}
}
provider "aws"{
access_key = ""
secret_key = ""
region = "eu-west-1"
}
module "base_vpc" {
source = "[email protected]:closed/terraform-modules.git//vpc"
vpc_cidr = "${var.vpc_cidr}"
vpc_region = "${var.vpc_region}"
Environment = "${var.Environment}"
Public-subnet-1a = "${var.Public-subnet-1a}"
Public-subnet-1b = "${var.Public-subnet-1b}"
Private-subnet-1a = "${var.Private-subnet-1a}"
Private-subnet-1b = "${var.Private-subnet-1b}"
Private-db-subnet-1a = "${var.Private-db-subnet-1a}"
Private-db-subnet-1b = "${var.Private-db-subnet-1b}"
Onsite-computers = "${var.Onsite-computers}"
browse_access = "${var.browse_access}"
}
现在我所有的状态管理在s3后端,你可以在上面的配置中看到。我还有其他正在运行的服务/实例的状态文件。我的问题是,现在我已经把它变成了一个模块并像上面那样引用它,它想要吹走我的状态!我的印象是它会导入模块并在尊重其他配置的同时运行它。实际的模块代码是从原始模板中复制的,所以没有任何改变。
是否有一个原因是它试图吹走一切,并重新开始?在使用模块的情况下,如何在每个环境中管理不同的状态?我没有得到其他错误。目前我有开发人员在一些服务器上工作,所以我现在已经瘫痪了!
我想我误解了一些东西,任何帮助非常感谢:) 谢谢。 编辑 - 使用Terraform 0.9.8
嘿,谢谢你的回复。所以我试图遵循一个非常类似的模型,其中/ dev,/ test和/ prod文件夹基本上只是调用一堆模块。我坚持的一点是,我在这些文件夹中持有s3后端配置,似乎使用模块意味着他们将现有状态视为不再需要,即标记为销毁,然后重新配置所有内容。你有没有可能分享dev.tf的编辑版本以显示你如何管理后端? –
@TomNorth使用我的'dev/main.tf'进行了更新,主要区别在于显示'qa/main.tf'的变化。这可以让你的状态文件完全隔离,避免在创建qa时撕毁开发 – JBirdVegas