将现有的tf目录迁移到工作区管理中
太长不看
从Terraform 0.10版本开始,新增了一个名为Workspaces的功能。
https://www.terraform.io/docs/state/workspaces.html
0.9版本中新增的State: Environments已更名。
这是一个能够在一个目录中切换任意多个环境(例如开发、测试、生产)的工具。
以下是在准备应用以下内容时,将现有的tf目录迁移到Workspaces管理中遇到的问题的备忘录。2017年的Terraform最佳实践。
将现有的tf目录迁移到工作空间管理中。
从现有的state文件创建工作区会导致不兼容的状态血统错误。
terraform workspace new -state=./terraform.tfstate [workspace名]
$ terraform workspace new -state=terraform.tfstate example
Created and switched to workspace "example"!
You're now on a new, empty workspace. Workspaces isolate their state,
so if you run "terraform plan" Terraform will not see any existing state
for this configuration.
incompatible state lineage; given 3d2aa9e3-198b-400c-a1aa-0a8e15ac44b4 but want 768adb25-938d-45cc-9195-fae815470dd3
$
我還沒有仔細確認,但在創建時生成的tfstate文件已經包含了lineage。但是,當我們使用-state參數指定現有的tfstate文件進行覆寫時,將完全覆蓋現有的tfstate文件,導致lineage不匹配,這似乎是問題所在。
如果您在s3或其他远程位置管理state文件,您需要先将state文件与远程进行同步,然后手动合并。
拉取最新的remote状态文件,并用于example工作区的tfstate文件进行替换。
terraform state pull > ./terraform.tfstate.d/example/terraform.tfstate
用现有的”modules”进行替换,并进行推送。
terraform state push ./terraform.tfstate.d/example/terraform.tfstate
查看计划结果以确保现有的tfstate文件已经被接管一一
terraform plan -var-file=./tfvars/example.tfvars -out=path_to_plan.plan
如果能够无问题地进行迁移,计划的执行结果中应该不会存在新创建的资源。