在s3中使用具有多个文件夹的Terraform远程状态

时间:2019-10-24 18:24:31

标签: terraform terraform-provider-aws

我当前正在使用默认工作空间,并且我的文件夹结构是这样的-

dev
        ├── app
        │   └── main.tf
        ├── mysql
        │   └── main.tf
        └── vpc
            └── main.tf

我创建了一个s3后端,并且可以在单个文件夹中正常工作

terraform {
  backend "s3" {
    bucket         = "mybucket"
    key            = "global/s3/mykey/terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "terraform-state-wellness-nonprod"
    encrypt        = true
  }
}

我正在努力如何在所有文件夹中包含此后端配置,例如我想在应用程序,mysql和vpc(用于Dynamodb的差异键)中使用相同的后端s3存储桶,但是虽然它在一个文件夹中有效,在第二个文件夹中,terraform想要同时删除S3存储桶和Dynamodb。

1 个答案:

答案 0 :(得分:1)

我建议您在Terraform代码中使用module结构。

喜欢:

   dev
    ├──modules
    │    ├── app
    │    │   └── app.tf
    │    ├── mysql
    │    │   └── mysql.tf
    │    └── vpc
    │        └── vpc.tf
    └──main.tf

main.tf:

module "app" {
  source = "./modules/app"
...
}

module "mysql" {
  source = "./modules/mysql"
...
}

module "vpc" {
  source = "./modules/vpc"
...
}

terraform {
  backend "s3" {
    ...
  }
}

如果您要应用/销毁每个模块:

terraform apply -target module.app
terraform destroy -target module.app
  

请参阅:

     

这里a repository使用module结构。