2017-08-16 74 views
0

下面创建一个使用terraform两种不同的环境是我试图解决的问题 -如何在同一时间

我们有一个名为“部署控制台,”我们将用它来管理AWS我们的环境中的Web应用程序。

部署控制台将接收使用terraform创建/维护登台/ prod环境的请求。

控制台可以/将并行接收请求。

所以我的问题是如何能够并行运行terraform创建/维持基于请求的环境中,不搞砸了各自的环境

我terraform文件夹结构的状态文件如下

  • terraform
    • create_env.tf
    • variables.tf
    • 个staging.tfvars
    • prod.tfvars
    • staging_backend_cnf.tfvars
    • prod_backend_cnf.tfvars
    • ec2module
      • create_ec2.tf
      • varialbes.tf
      • output.tf
    • elbmodule
      • create_ec2.tf
      • varialbes.tf
      • output.tf
    • ec2secmodule
      • create_ec2.tf
      • varialbes.tf
      • output.tf
    • elbsecmodule
      • create_ec2.tf
      • varialbes.tf
      • output.tf
+0

我想说你的webapp应该管理预防并发运行和可能的terraform请求队列。 – RaGe

回答

0

如果你想避免冒险通过并行运行状态文件损坏,那么你应该使用state file locking

因为你似乎可以用AWS你可能应该已经存储您state in S3,并从那里它只是增加了DynamoDB锁表的情况:

terraform { 
    backend "s3" { 
    bucket   = "mybucket" 
    key   = "path/to/my/key" 
    region   = "us-east-1" 
    dynamodb_table = "mylocktable 
    } 
} 
0

Terraform ENV,而现在为0.10%,0.50工作区。

https://www.terraform.io/docs/state/environments.html

工作空间是用于Terraform状态的命名容器。通过多个工作区,可以使用Terraform配置的单个目录来管理多个不同的基础架构资源集。

在Terraform 0.9版本中使用了术语状态环境或环境,指的是具有与单个配置目录关联的多个不同命名状态的想法。

在实现这个概念后,我们收到反馈意见,认为这个术语在Terraform本身以及使用Terraform的组织内都会因“环境”这个词的其他用法而引起混淆。

从0.10起,优选术语是“工作空间”。有关工作区的更多信息,请参见main Workspaces page

工作区是Terraform状态的命名容器。 对于多个工作区,可以使用Terraform配置的单个目录来管理多个不同的基础架构资源集。

+0

这并没有真正回答这个问题,因为如果您尝试并行部署到临时工作区多次,仍然会收到状态文件损坏/孤立资源。 – ydaetskcoR

+0

env的不同名称呢?您不能在同一个环境中发生多个更新,这在CFN中也不起作用。 – strongjz

+0

这不是他们要求的。他们有一个部署到环境中的应用程序(例如分段),并且他们不希望通过触发两个并行部署到相同的环境来意外地搞乱状态文件。 – ydaetskcoR