Terraform
有關 IBM Cloud Schematics 工作區常見問題的解答分為以下幾個部分。
IBM Cloud Schematics 是否支援多個 Terraform 提供者版本?
是,IBM Cloud Schematics 支援多個 Terraform 提供者版本。 您需要使用提供者版本來新增 Terraform 提供者區塊。 依預設,提供者會執行現行版本 1.21.0,並支援前四個版本,例如 1.20.1、1.20.0、1.19.0、1.18.0。
多重提供者配置的範例:
terraform{
required_providers{
ibm = ">= 1.21.0" // Error !! version unavailable.
ibm = ">= 1.20.0" // Execute against latest version.
ibm = "== 1.20.1" // Executes version v1.20.1.
}
}
目前已發佈 1.21.0 版本。 如需相關資訊,請參閱 提供者版本。
如何更新 Terraform 版本
IBM Cloud Schematics 正在廢棄舊版本的 Terraform,並引入對較新 Terraform 版本的支援。 如需詳細資訊,請參閱 Schematics Terraform 汰舊換新生命週期 及汰舊換新時間表。
您可以遵循主題,從一個 Terraform 版本升級至另一個版本
如何使用指令行從 Git 儲存庫 pull latest 撰寫程式碼?
透過指令行更新 IBM Cloud® Schematics 工作區需要必要的欄位 name。
您需要執行 ibmcloud schematics workspace update --id <workspace-id> --file <updatefile.json> 指令。 範例 updatefile.json 包含具有值的名稱欄位。
{
"name":"testworkspace"
}
執行時期使用哪些工具和公用程式?
Schematics 執行時期是使用「通用基本映像檔」(UBI-8) 建置的,而 UBI-8 隨附的執行時期 utilities/softwares 可用於 Terraform 佈建及 Ansible 動作。 如需相關資訊,請參閱 Schematics 執行時期中使用的 工具和公用程式 清單。
如何使用 CLI 來建立工作區時修正 Git 記號問題
使用 schematics workspace new --file schematic-file.json -g xxxx 指令會擲出 Access token creation failed status,因為指令中未指定記號。
在透過指令行執行作業之前,您需要先檢查 鑑別。 然後,使用 schematics workspace new --file schematic-file.json --github-token xxxx 指令來建立工作區。 如需相關資訊,請參閱 ibmcloud schematics workspace new 指令。
如何在建立或更新工作區時修正授權問題?
當更新工作區時,當角色和許可權存取權不足時,您會看到授權問題。 如需相關資訊,請參閱管理使用者存取。
如何在 Schematics 中使用 Terraform IBM 模組?
您可以在 Schematics 工作區中使用預先建立、開放源碼且適用於企業的 Terraform IBM 模組。 這些模組提供了配置 IBM Cloud 資源的最佳實作,可直接在您的 Terraform 配置中引用。 例如,您可以使用 terraform-ibm-modules 以內建的最佳作法來佈建資源。
使用 Terraform IBM 模組有什麼好處?
Terraform IBM 模組 (TIM) 提供多種優點:
- 由 IBM 預先建立、測試和維護。
- 遵循 IBM Cloud 最佳實務和安全指引。
- 減少開發時間和複雜性。
- 確保不同部署之間的一致性。
- 支援企業級基礎架構模式。
- 定期更新和社區支援。
如需詳細資訊,請參閱 關於 Terraform IBM 模組。
如何使用具有測試 ID 的 Schematics 服務?
測試 ID 被視為有效的 IBM ID,可設定廣域型錄或資源控制器相關的 API 呼叫。 如果您無法存取,請執行 聯絡支援服務。
如何限制 Git 儲存庫資料夾複製
依預設,當透過使用者介面建立工作區時,Schematics 預設會複製完整 Git 儲存庫和所有子目錄。 取消選取 Use full repository 旗標,以限制所複製的資料夾並增進下載效能。
Schematics 在 建立工作區 及 更新工作區 API 中引進了 compact 旗標,以在 Git 儲存庫中下載 sub directories。 如果壓縮旗標設為 true,則會以遞迴方式下載並儲存
sub directories,否則您可以在建立工作區時繼續下載並儲存完整儲存庫。
您可以透過啟動 get workspace API 來檢視精簡旗標值,以取得回應。 只有在傳遞 template_repo.url 欄位時,才能提供精簡旗標。 在更新時,如果沒有傳送此欄位,但傳送了 URL,則會壓縮下載。
有效負載中的精簡用法為 .template_data[0].compact = true/false。 如需相關資訊,請參閱 Schematics 工作區的壓縮下載。
刪除失敗時如何刪除工作區?
如果在 Schematics外部刪除資源,則工作區刪除作業會顯示為 resource no longer exists。
您需要刪除工作區,且「不會」毀損資源,就像資源無法使用一樣。 如需相關資訊,請參閱 刪除工作區。
使用認證或密碼來部署 Helm 圖表的最佳方式是什麼?
最佳方式是使用 IBM Cloud 型錄來管理 Helm 圖表,您可以在型錄內保留認證並將其標示為安全。 如需相關資訊,請參閱 與 Helm相關的型錄清單。
如何解決維護活動所導致的工作失敗?
維護所造成的非預期影響會導致 Schematics 工作區中執行中活動失敗。 這類工作區及進行中活動會標示為 Failed。 然後,使用者可以重新執行活動。 如需相關資訊,請參閱 工作區狀態圖。
如何設定 Git 發行標籤?
2021/11/08 12:34:06 ----- New Action -----
2021/11/08 12:34:06 Request: RepoURL=https://xxxxxxxxxx/wh-hp-insights/hi-cloud-automation, workspaceSource=Schematics, Branch=2021.10, Release=, Folder=terraform-v2/workspace-hi-qa-automation-app
2021/11/08 12:34:06 Related Activity: action=UPDATE_WORKSPACE,processedBy=sandbox-6bcf8bffcd-rxbww_2478
2021/11/08 12:34:06 Getting download command
2021/11/08 12:34:11 Fatal, could not download repo, Failed to clone git repository, couldn't find remote ref "refs/heads/2021.10" (most likely invalid branch name is passed)
2021/11/08 12:34:12 Problems found with the Repository. Please Rectify and Retry
如果 Release 參數是空的,且 Branch 已設定 release 標籤。
Schematics 不支援 release 標籤,因為難以辨別這究竟是發布標籤,還是來自 Git 儲存庫的分支 URL。 您需要設定 release 透過 Schematics API 進行標記。
使用無效工作區 ID 時,為何會收到 403 錯誤,而不是 404 錯誤?
curl -X GET https://schematics.cloud.ibm.com/v1/workspaces/badWOrkspaceId -H "Authorization: $IAM_TOKEN"
{"requestid":"3a3cbffe-e23a-4ccf-b764-042f7379c084","timestamp":"2021-11-11T17:00:07.169953698Z","messageid":"M1078","message":"Error while validating the location in the account. Verify you have permission to the location in the global catalog settings.","statuscode":403}
是,API 中有一項變更會先檢查位置,如果它沒有取得工作區的適當位置,則會傳回 403 錯誤,而不是 404 錯誤。
如何啟用 Terraform 除錯記載
您可以設定環境變數,以在有效負載中設定 Terraform 日誌除錯 TF_LOG=debug 追蹤,如範例有效負載中所示。 如需相關資訊,請參閱 Schematics 工作區更新。
{
"name": "sample",
"type": [
"terraform_v1.4"
],
"description": "terraform workspace",
"tags": [
],
"template_repo": {
"url": "<your repo>"
},
"template_data": [
{
"folder": ".",
"type": "terraform_v1.4",
"env_values":[
{
"TF_LOG":"debug"
}
]
}
]
}
如何將雲端資源匯入至工作區?
使用 ibmcloud schematics workspace import --options value, -o value : Optional 指令及範例語法,從指令行匯入。 如需相關資訊,請參閱 Schematics 工作區匯入。
ibmcloud schematics workspaces import --id <workspace_id> --address <my terraform resource address> --resourceID <the CRN of the item to import> --options "-var IC_API_KEY=XXXXXXXX"
or
ibmcloud schematics workspaces import --id <workspace_id> --address <my terraform resource address> --resourceID <the CRN of the item to import> --options "--var-file=<path-to-var-file>"
如何下載工作檔案?
是,您可以下載 Schematics 工作檔案。 如需相關資訊,請參閱 下載 Schematics 工作檔案。
如何解決 Terraform 資源逾時失敗?
您需要根據 Terraform 區塊中顯示的服務,將逾時值更新或增加 5 分鐘或 10 分鐘。 或者,您需要傳送 null value 以使用預設值。
variable "create_timeout"
{
type = String
description = "Timeout duration to create LogDNA instance in Schematics."
default = "15m"
}
如何設定 TF_CLI_ARGS 環境變數?
否,您無法直接在 Schematics 工作區主控台中設定環境變數值。 您可以改用 Schematics API 或 Schematics 指令行 來使用 CURL。
"env_values": [
{
"TF_LOG": "debug"
},
]
我可以將專用 Git 儲存庫用於模組嗎?
是,Schematics 支援從專用儲存庫下載 Terraform 模組。 如需相關資訊,請參閱 支援從專用遠端主機下載模組。
我可以編輯工作區中的所有變數嗎?
您一次只能從 Schematics 主控台編輯一個變數。 從指令行,您可以使用 ibmcloud schematics workspace update 指令,以 JSON 格式編輯工作區的所有變數。
如何在匯入 KMS 資源時匯入金鑰?
是,您可以使用 ibm_kms_key 來設定或管理金鑰,如範例程式碼區塊所示。 如需相關資訊,請參閱 ibm_kms_key。
resource "ibm_resource_instance" "kms_instance" {
name = "instance-name"
service = "kms"
plan = "tiered-pricing"
location = "us-south"
}
resource "ibm_kms_key" "test" {
instance_id = ibm_resource_instance.kms_instance.guid
key_name = "key-name"
standard_key = false
force_delete =true
}
resource "ibm_cos_bucket" "smart-us-south" {
bucket_name = "atest-bucket"
resource_instance_id = "cos-instance-id"
region_location = "us-south"
storage_class = "smart"
key_protect = ibm_kms_key.test.id
}
在執行工作區清單指令時,您可以啟用 TRACE 來協助 DEBUG Schematics API 嗎?
否,目前 Schematics 在執行 IBMCLOUD_TRACE=true ibmcloud schematics workspace list 指令時不支援此特性。
如何解決列出工作區中的錯誤?
當列出或擷取工作區時,可能會收到下列錯誤。Error while retrieving Schematics Instance for the given account。
Error:
Bad status code [400] returned when getting workspace from Schematics: {"requestid":"fe5f0d6d-1d43-4643-a689-35d090463ce8","timestamp":"2022-01-25T20:23:54.727208017Z","messageid":"M1070","message":"Error while retrieving Schematics Instance for the given account.","statuscode":400}
您可能沒有足夠的存取權,無法讓指定位置中的工作區提取實例。 請檢查為帳戶提供的許可權,以及需要建立實例的位置。 如需相關資訊,請參閱 資訊儲存在何處?
如何使用 (IBM) GitLab 儲存庫?
是,您可以使用具有專用權的 Schematics 來存取專用 (IBM) GitLab 儲存庫。
-
如果使用 IAM 記號時不需要專用 (IBM) GitLab 儲存庫
git.cloud.ibm.com存取記號。 -
如果需要公用 GitLab
gitlab.com、read_repository及read_api存取權,才能驗證專用儲存庫的分支名稱。
您可以使用範例 Terraform 程式碼區塊來配置 GitLab 儲存庫詳細資料。
"template_repo": {
"url": "<gitlab_source_repo_url>",
"branch": ""
},
可以在 Schematics中管理 IAM 存取群組嗎?
是,Schematics 支援完整 IBM Cloud 提供者資源集。 如需 IAM 存取群組如何運作的相關資訊? 請參閱 ibm_iam_access_group。
如何使用另一個帳戶中的資源?
是,您可以在 IBM Cloud 來源帳戶中建立 Schematics 工作區。 然後,執行 Terraform,透過 CLI 提供目標帳戶中的資源以進行佈建,並使用目標帳戶服務 ID 搭配鑑別、適當的跨帳戶授權或 API 金鑰來進行 API 呼叫。 如需相關資訊,請參閱 管理其他帳戶中的資源。
North America 位置指出什麼?
在建立 Schematics 工作區期間,北美洲一律會同時指出 us-south 和 us-east 位置。 如需相關資訊,請參閱 我可以在何處建立 Schematics 工作區?,以及 我的資訊儲存在何處?
Schematics使用哪些埠和 IP 位址?
Schematics 會與相關資源指定的埠進行通訊。 例如,VPC 相關埠,請參閱 VPC: 在其他網路防火牆中開啟必要埠及 IP 位址。
何時該使用「Schematics」,何時又該使用個別資源的儀表板?
透過 IBM Cloud Schematics,您可以在 IBM Cloud 上執行基礎架構程式碼,以管理雲端資源的生命週期。 佈建資源後,可以使用個別資源的儀表板來使用資源並與其互動。 例如,如果您在虛擬私有雲 (VPC) 中配置虛擬伺服器實例,IBM Cloud Schematics。 您可以使用 VPC 主控台、API 或指令行,來 stop、reboot 及 power on 虛擬伺服器實例。
不過,若要移除虛擬伺服器執行個體,您可以使用 IBM Cloud Schematics。
是否在 Schematics中重新整理 Git 儲存庫的變更?
不,如果您在 GitHub, 修改了 Terraform 範本的程式碼,當您在 IBM Cloud Schematics 建立執行計畫時,這些變更並不會自動套用。 若要從您的 GitHub 儲存庫擷取最新變更,請務必在建立執行計畫之前,先於工作區的 settings 頁面中點選「Pull latest」選項。
Terraform 狀態檔儲存在何處?
透過執行 Schematics apply 動作成功佈建雲端資源後,資源的狀態會儲存在 Terraform 狀態檔案 (terraform.tfstate) 中。Schematics 使用此狀態檔案作為唯一的真實來源,以確定帳戶中存在哪些資源。 狀態檔將您在 Terraform 配置檔中指定的資源映射到您配置的 Cloud 資源。
刪除工作區時是否移除資源?
從 IBM Cloud Schematics 刪除工作區不會移除您的任何雲端資源。 如果您在移除資源之前刪除了工作區,則必須手動從各資源的儀表板中移除所有 Cloud 資源。
移除雲端資源無法撤銷。 在移除資源之前,請務必先備份所有資料。 如果您在 Terraform 配置檔中移除資源定義或註銷資源,則會移除 (刪除) 資源。 檢閱計劃日誌檔,以驗證所有資源都包含在移除中。
我可以設定工作區的環境變數嗎?
您可以使用 CLI 及 API 來設定工作區的 env values。 如需相關資訊,請參閱 env_values 的用法。
如果您的工作區是由 IBM Cloud 專案 服務建立,請參閱 使用 CLI 啟用 Terraform 日誌,作為設定環境變數的參考。
範例有效負載
{
"name": "newName",
"template_data": [
{
"type": "<same_as_before>",
"env_values": [
{
"env_key1": "dummy_text"
},
{
"env_key2": "dummy_text"
}
],
"env_values_metadata": [
{
"name": "env_values_1",
"hidden": false,
"secure": false
},
{
"name": "env_values_2",
"hidden": false,
"secure": false
}
]
}
]
}
漂移偵測是否自動執行?
否,漂移偵測不是 IBM Cloud Schematics中的自動偵測方法。 如需相關資訊,請參閱 在 Schematics。
如何啟動漂移偵測?
您可以使用使用者介面和 CLI 來起始漂移偵測。 如需相關資訊,請參閱 在 Schematics。
哪裡可以看到漂移偵測工作的狀態?
若要驗證漂移偵測工作的結果,您需要檢查漂移偵測工作日誌。 工作日誌會以具有適當狀態 (例如 failure 或 success) 的 in progress 或 completed 來提供漂移偵測的詳細資料。 如需相關資訊,請參閱 在 Schematics。
我可以 interrupt 或 terminate 執行中工作嗎?
是,您可以使用工作類型來岔斷、強制停止或終止 Schematics 中的供應資源或執行中工作。 如需相關資訊,請參閱 停止工作類型。
如何更正 Incorrect Location Input 錯誤?
錯誤
{
"requestid": "3f59c342-cd2c-4703-aa10-9e8e7072a3ac",
"timestamp": "2022-06-28T20:02:58.529765308Z",
"messageid": "M1097",
"message": "Incorrect Location Input.",
"statuscode": 400
}
Schematics 廣域端點預設為 us 環境。 因此,您需要使用 地區端點,將您的位置指向 eu-de 地區。
如何檢視工作區資源?
使用 state list CLI 指令來檢視 IBM Cloud Schematics 使用者介面中的相同資源。
如何修正 CreateworkspaceWithContext failed Bad request 錯誤?
錯誤
CreateWorkspaceWithContext failed Bad request. Check that the information you entered in the payload is complete and formatted correctly in JSON.
Schematics 公共或私有端點的全局 URL 預設指向 us 區域。 作為暫行解決方法,您可以在 Terraform 指令之前設定 環境變數索引鍵。
```sh
export IBMCLOUD_SCHEMATICS_API_ENDPOINT="https://eu-de.schematics.cloud.ibm.com"
```
您也可以將端點新增至 JSON 檔案,以將端點服務分類為公用或專用。
提供者宣告範例
{
"IBMCLOUD_SCHEMATICS_API_ENDPOINT":{
"public":{
"eu-de":"https://eu-de.schematics.cloud.ibm.com"
}
}
}
提供者區塊範例
provider "ibm" {
endpoints_file_path= "endpoints.json"
}
狀態檔中的機密值是否已加密?
Schematics 使用 TLS 對儲存和傳輸中的 Terraform 狀態檔案進行加密。 Terraform 不會個別加密機密值。 如需相關資訊,請參閱狀態檔中的 sensitive-data。
為何使用 CLI 定義的工作區變數會擲出 400 錯誤?
Schematics 工作區清單變數儲存庫值應該一律為 HCL 字串。 value 欄位必須包含清單、對映或複式變數之變數儲存庫的跳出字串。 如需相關資訊,請參閱 提供值給已宣告變數的 Schematics。
您可以使用 JSON 檔案來更新 Terraform 版本 (TF_VERSION) 嗎?
目前,更新 TF_VERSION 的暫行解決方法是在更新變數儲存庫時傳遞 TF_VERSION。Schematics 會自動偵測 TF 檔案中 Terraform 版本區塊中指定的內容。 這是預設行為。
如需相關資訊,請參閱 設定及變更版本。
每次執行工作時都可以從新的 Terraform 狀態檔開始嗎?
否,您需要建立新的工作區。 如需相關資訊,請參閱 工作區工作執行。
我可以匯入現有的 Terraform 狀態檔嗎?
是,您可以透過 ibmcloud schematics workspace new 使用 --state 旗標選項。
字元的最大可變長度是多少?
Schematics 工作區變數支援的字元長度上限為 1 MB。
要匯入的狀態檔上限是多少?
terraform.tfstate 檔案必須小於 16 MB。 當您從現有的 Terraform 狀態檔建立工作區時,terraform.tfstate 檔案必須小於 16 MB。 在 Schematics中不支援大於 16 MB 的狀態檔。 您會看到 413 Request Entity Too Large error when creating a new workspace 的錯誤訊息。
如何修正使用 API 時的鑑別錯誤?
您需要為 IBM Cloud 帳戶建立 IAM 存取記號。 如需相關資訊,請參閱 取得記號密碼。 您可以看到下列範例錯誤訊息,以及鑑別錯誤的解決方案。
Error: Request fails with status code: 400, BXNIMO137E: For the original authentication, client id 'default' was passed, refresh the token, client id 'bx' is used.
IAM API 文件顯示如何建立 default token。 如果新的 IAM 存取記號已過期,您可以使用 refresh token 來取得該記號。 當預設用戶端 (無基本授權標頭) 如本文件所述時。 refresh_token 無法用來擷取新的 IAM 存取記號。 當 IAM 存取記號即將到期時,請使用 API 金鑰來建立列出的新存取記號。
-
您需要建立
access_token和refresh_token。export IBMCLOUD_API_KEY=<ibmcloud-api_key> curl -X POST "https://iam.cloud.ibm.com/identity/token" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=$IBMCLOUD_API_KEY" -u bx:bx -
將步驟 1 中取得的
access_token和refresh_token匯出為ACCESS_TOKEN和REFRESH_TOKEN的環境變數。export ACCESS_TOKEN=<access_token> export REFRESH_TOKEN=<refresh_token> -
建立工作區
curl --request POST --url https://cloud.ibm.com/schematics/overview/v1/workspaces -H "Authorization: Bearer <access_token>" -d '{"name":"","type": ["terraform_v1.4"],"description": "","resource_group": "","tags": [],"template_repo": {"url": ""},"template_data": [{"folder": ".","type": "terraform_v1.4","variablestore": [{"name": "variable_name1","value": "variable_value1"},{"name": "variable_name2","value": "variable_value2"}]}]}'
如何擷取 Schematics 工作區 ID 作為環境變數?
您可以使用下列程式碼來擷取 Schematics 工作區 ID 作為環境變數。 在執行計劃或套用之前,IC_SCHEMATICS_WORKSPACE_ID、TF_VAR_IC_SCHEMATICS_WORKSPACE_ID、TF_VAR_IC_SCHEMATICS_WORKSPACE_RG_I、IC_IAM_TOKEN 及 IC_IAM_REFRESH_TOKEN 環境變數會自動設為 Terraform Script。
data "external" "env" {
program = ["jq", "-n", "env"]
}
output "workspace_id" {
value = "${lookup(data.external.env.result, "TF_VAR_IC_SCHEMATICS_WORKSPACE_ID")}"
如果您想要查看工作區中所有可用的環境變數,請使用 output "${jsonencode(data.external.env.result)}" 程式碼。
刪除Schematics物件時,如何修正代理呼叫中的 401 錯誤?
刪除Schematics物件後,如果Schematics服務無法刪除您帳戶中的物件。 您需要提出 Schematics支援票證 才能從資源控制器中刪除。