遠端狀態和跨工作區存取

IBM Cloud® 提供 Terraform 的內建 remote-state 管理。 在執行之間會自動保留 Terraform 狀態檔案,並可由 IBM Cloud® 指令及作業存取。IBM Cloud® 遠端狀態管理可啟用團隊工作及工作區共用作業,且內建狀態鎖定可防止針對相同狀態檔進行並行作業。

內建工作區遠端狀態管理支援許多 Schematics 使用案例:

  • 在工作區之間共用資源資訊。 這可讓您的基礎架構細分成較小的元件,並在使用 Schematics 遠端狀態資料來源的環境之間傳遞唯讀資源資訊。 資料來源所鏈結的離散環境容許將基礎架構不同元素的責任委派給不同團隊,並在工作區之間以唯讀資源共用資訊。
  • 將工作區及動作作業與 動作 整合。 工作區資源資訊可以直接作為 Ansible 動態庫存 傳遞,而不需要手動建立主機庫存或使用庫存 Script。

存取工作區狀態和輸出

您可以使用 ibm_schematics_outputibm_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 資料來源,請執行下列動作:

  1. 遵循 入門指導教學 中的範例,以建立 Schematics 工作區並在 VPC 中佈建虛擬伺服器。 當您遵循指示時,請檢閱在 vpc.tf Terraform 配置檔結尾定義的輸出變數。

    如果您已在其中一個工作區中使用不同的 Terraform 配置檔,則可以使用此工作區進行練習。 請確保將此範例中概述的輸出值新增至配置檔,以便稍後可以存取工作區資訊。

    output sshcommand {
        value = "ssh root@ibm_is_floating_ip.fip1.address"
    }
    
    output vpc_id {
    value = ibm_is_vpc.vpc.id
    }
    

    在此範例中,定義了兩個輸出值: 用於存取 VPC 中虛擬伺服器實例的 sshcommandvpc_id

  2. 擷取您建立之 VPC 工作區的 ID。

    透過主控台:

    • 工作區儀表板 外部鏈結圖示中,選取 VPC 工作區。
    • 選取設定標籤。
    • 摘要 區段中尋找工作區 ID。

    透過 CLI:

    • 列出您帳戶中可用的工作區。
      ibmcloud schematics workspace list
      
    • 在指令行輸出的 ID 直欄中尋找工作區 ID。

    Schematics ibmcloud terraform 指令用法會顯示警告及淘汰訊息,因為 別名 'terraform' 已淘汰。 在指令中使用「schematics」或「sch」。

  3. 建立另一個名為 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.valueoutput.vpc_id.value 您可以將輸出值的 ID 新增至 ibm_schematics_output 資料來源,以存取 output_values 清單中的特定值。 例如,若要存取 vpc_id,只需使用 data.ibm_schematics_output.vpc.output_values.vpc_id
  4. 建立工作區,以指向 GitHub 或 GitLab 儲存庫中的 remotestate.tf 檔。 如果您想要改為從本端機器上傳磁帶保存檔 (.tar),請使用 ibmcloud schematics workspace upload 指令。

  5. 在 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