2017-08-16 54 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