遠端狀態和跨工作區存取
IBM Cloud® 提供 Terraform 的內建 remote-state 管理。 在執行之間會自動保留 Terraform 狀態檔案,並可由 IBM Cloud® 指令及作業存取。IBM Cloud® 遠端狀態管理可啟用團隊工作及工作區共用作業,且內建狀態鎖定可防止針對相同狀態檔進行並行作業。
內建工作區遠端狀態管理支援許多 Schematics 使用案例:
- 在工作區之間共用資源資訊。 這可讓您的基礎架構細分成較小的元件,並在使用 Schematics 遠端狀態資料來源的環境之間傳遞唯讀資源資訊。 資料來源所鏈結的離散環境容許將基礎架構不同元素的責任委派給不同團隊,並在工作區之間以唯讀資源共用資訊。
- 將工作區及動作作業與 動作 整合。 工作區資源資訊可以直接作為 Ansible 動態庫存 傳遞,而不需要手動建立主機庫存或使用庫存 Script。
存取工作區狀態和輸出
您可以使用 ibm_schematics_output 及 ibm_schematics_state 資料來源,從帳戶中的其他工作區存取您在工作區中管理之資源的相關資訊。
IBM Cloud® 使用 local 內建 Terraform 狀態支援,且不使用 Terraform 後端 支援。 在 Terraform configs 內不需要其他配置即可啟用 IBM Cloud® 遠端狀態管理。Schematics
不使用 Terraform remote_state 資料來源,而是使用 ibm_schematics_output 資料來源來存取資訊。
ibm_schematics_state 資料來源與 remote_state 資料來源有何不同?
當您使用 remote_state 資料來源時,必須配置後端以連接至工作區。 使用 ibm_schematics_state 資料來源,您可以自動存取內建 Schematics 後端,並且可以直接存取工作區資訊。
我需要做什麼才能存取其他工作區中的資源資訊?
與 remote_state 資料來源類似,您只能存取在 Terraform 範本中配置為輸出值的資訊。 例如,假設您有一個用來佈建 VPC 的工作區。 若要存取 VPC ID,您必須在 Terraform 配置檔中將 ID 定義為輸出變數。
如果要使用 ibm_schematics_output 資料來源,請執行下列動作:
-
遵循 入門指導教學 中的範例,以建立 Schematics 工作區並在 VPC 中佈建虛擬伺服器。 當您遵循指示時,請檢閱在
vpc.tfTerraform 配置檔結尾定義的輸出變數。如果您已在其中一個工作區中使用不同的 Terraform 配置檔,則可以使用此工作區進行練習。 請確保將此範例中概述的輸出值新增至配置檔,以便稍後可以存取工作區資訊。
output sshcommand { value = "ssh root@ibm_is_floating_ip.fip1.address" } output vpc_id { value = ibm_is_vpc.vpc.id }在此範例中,定義了兩個輸出值: 用於存取 VPC 中虛擬伺服器實例的
sshcommand和vpc_id。 -
擷取您建立之 VPC 工作區的 ID。
透過主控台:
- 從 工作區儀表板
中,選取 VPC 工作區。
- 選取設定標籤。
- 在 摘要 區段中尋找工作區 ID。
透過 CLI:
- 列出您帳戶中可用的工作區。
ibmcloud schematics workspace list - 在指令行輸出的 ID 直欄中尋找工作區 ID。
Schematics
ibmcloud terraform指令用法會顯示警告及淘汰訊息,因為 別名 'terraform' 已淘汰。 在指令中使用「schematics」或「sch」。 - 從 工作區儀表板
-
建立另一個名為
remotestate.tf的 Terraform 配置檔,以使用ibm_schematics_output資料來源來存取vpc.tf檔案的輸出參數。 若要容許對此檔案進行版本控制,請確保將此配置檔儲存在 GitHub 或 GitLab 儲存庫中。data "ibm_schematics_workspace" "vpc" { workspace_id = "<schematics_workspace_ID>" } data "ibm_schematics_output" "vpc" { workspace_id = "<schematics_workspace_ID>" template_id = data.ibm_schematics_workspace.vpc.runtime_data.0.id } output "output_vars" { value = data.ibm_schematics_output.vpc.output_values } output "ssh_command" { value = data.ibm_schematics_output.vpc.output_values.sshcommand } output "vpc_id" { value = data.ibm_schematics_output.vpc.output_values.vpc_id }配置檔元件 
瞭解配置檔元件 data.ibm_schematics_workspace.workspace_id輸入您在其中定義要存取之輸出值的 VPC 工作區 ID。 您需要此資料來源,才能擷取 ibm_schematics_output資料來源中工作區的範本 ID。data.ibm_schematics_output.workspace_id輸入您在其中定義要存取之輸出值的 VPC 工作區 ID。 data.ibm_schematics_output.template_id輸入 data.ibm_schematics_workspace.vpc.runtime_data.0.id以參照工作區的 Terraform 範本。output.output_vars.value使用 Terraform 插補語法,透過使用 ibm_schematics_output資料來源的output_values輸出參數來存取您在vpc.tf檔案中定義的所有輸出值。output_values輸出參數會以清單形式傳回所有輸出值。output.sshcomand.value和output.vpc_id.value您可以將輸出值的 ID 新增至 ibm_schematics_output資料來源,以存取output_values清單中的特定值。 例如,若要存取vpc_id,只需使用data.ibm_schematics_output.vpc.output_values.vpc_id。 -
建立工作區,以指向 GitHub 或 GitLab 儲存庫中的
remotestate.tf檔。 如果您想要改為從本端機器上傳磁帶保存檔 (.tar),請使用ibmcloud schematics workspace upload指令。 -
在 Schematics 中執行 Terraform 程式碼。 檢閱日誌時,您可以在 輸出 區段中查看 VPC 工作區中的輸出值。
輸出範例
... 2020/02/21 19:49:30 Terraform show | Outputs: 2020/02/21 19:49:30 Terraform show | 2020/02/21 19:49:30 Terraform show | Output_vars = { 2020/02/21 19:49:30 Terraform show | sshcommand = ssh root@169.61.225.111 2020/02/21 19:49:30 Terraform show | vpc_id = a1a11aa1-a111-a11a-a111-aa1aa11a1a1a 2020/02/21 19:49:30 Terraform show | } 2020/02/21 19:49:30 Terraform show | sshcommand = ssh root@169.61.225.111 2020/02/21 19:49:30 Terraform show | vpc_id = a1a11aa1-a111-a11a-a111-aa1aa11a1a1a