Terraform是一種開源工具,用于安全高效地預覽,配置和管理云基礎架構和資源、構建、變更、和安全有效的版本化管理基礎設施的工具,可以管理已存在和流行的服務提供商以及定制的內部解決方案。并且支持操作阿里云部分的OpenApi。
系統運維管理 OOS(CloudOps Orchestration Service)是一個以模板的方式來操作阿里云的OpenApi的一種服務,方便您管理已經購買的阿里云資源,或者自動擴充資源等操作。相信讀此文章的大家已經大致了解OOS的基本操作。基于以上所述以下是我們為您提供的一個簡單教程來展示如何通過Terraform來操作OOS服務。
安裝并配置Terraform
前往Terraform官網,下載適用于您的操作系統的程序包。本文以Linux系統為例。如果您還沒有Linux環境,可購買阿里云ECS實例,詳情請參見Linux系統實例快速入門。
將程序包解壓到/usr/local/bin目錄。如果您需要將可執行文件解壓到其他目錄,請按照以下方法為其定義全局路徑:
Linux:參見在Linux系統定義全局路徑
Windows:參見在Windows系統定義全局路徑
Mac:參見在Mac系統定義全局路徑
執行
terraform
命令驗證路徑配置。terraform Usage: terraform [-version] [-help] <command> [args]
安裝Golang,在安裝以下模塊前需要先安裝Golang語言。
yum install golang
安裝terraform-provider-alicloud,執行以下命令,或者參考詳細操作請參考安裝簡介文檔。
yum install git go get golang.org/x/tools/cmd/goimports mkdir -p $GOPATH/src/github.com/aliyun cd $GOPATH/src/github.com/aliyun git clone https://github.com/aliyun/terraform-provider-alicloud cd $GOPATH/src/github.com/aliyun/terraform-provider-alicloud make build
重要在環境中配置以下變量
export ALICLOUD_ACCESS_KEY=xxx
export ALICLOUD_SECRET_KEY=xxx
export ALICLOUD_REGION=xxx
Terraform支持OOS的資源模塊
資源類型 | 模塊 | 使用場景 |
date | alicloud_oos_templates | 查詢模板 |
alicloud_oos_executions | 查詢執行 | |
resource | alicloud_oos_template | 創建模板、更新模板 |
alicloud_oos_execution | 創建執行 |
Terraform操作OOS模板的創建、更新、查詢、刪除
創建模板
首先創建一個測試testTerraform文件夾,進入此文件夾,初始化Terraform后,在此文件夾內創建一個createTemplate.tf文件,并進入此文件的編輯模式,如下命令。
mkdir testTerraform cd testTerraform terraform init vi createTemplate.tf
在編輯模式下,將以下內容復制進createTemplate.tf文件中。
resource "alicloud_oos_template" "example" { tags={ "Created" = "TF", "For" = "template Test" } content= <<EOF { "FormatVersion": "OOS-2019-06-01", "Description": "Update Describe instances of given status", "Parameters":{ "Status":{ "Type": "String", "Description": "(Required) The status of the Ecs instance." } }, "Tasks": [ { "Properties" :{ "Parameters":{ "Status": "{{ Status }}" }, "API": "DescribeInstances", "Service": "Ecs" }, "Name": "foo", "Action": "ACS::ExecuteApi" }] } EOF template_name="terraform-test" }
保存并退出,執行以下命令,使用Terraform創建OOS模板。
terraform plan terraform apply
在OOS控制臺查看模板是否創建成功,如下所示根據上面提供的例子發現根據自定義的參數,模板創建成功。
更新模板
在執行創建模板操作后,找上面的已經創建完成的createTemplate.tf文件,并編輯此文件。
vi createTemplate.tf
進入編輯模式,將需要修改的文件內容復制到文件內。如下例子:
resource "alicloud_oos_template" "example" { tags={ "Created" = "TF", "For" = "template Test" } content= <<EOF { "FormatVersion": "OOS-2019-06-01", "Description": "Update Describe instances of given status", "Parameters":{}, "Tasks": [ { "Properties" :{ "Parameters":{ "Status": "Running" }, "API": "DescribeInstances", "Service": "Ecs" }, "Name": "foo", "Action": "ACS::ExecuteApi" }] } EOF template_name="terraform-test" }
將更改的文件輸入完畢,保存并退出。
執行以下命令進行更新資源。
terraform plan terraform apply
查看模板
參考alicloud_oos_templates來查看搜索操作其他具體的參數。
創建一個dataTest.tf的文件,進入編輯模式。
vi dataTest.tf
將以下查看資源的內容復制進入dataTest.tf文件內,保存并退出。
data "alicloud_oos_templates" "example" { ids=["terraform-test"] } output "first_template" { value = "${data.alicloud_oos_templates.example.templates.0}" }
完成上述操作后,輸入以下命令來查看資源的具體信息。
terraform plan terraform apply
如下圖所示,將上述命令輸入完成后,顯示的結果為當前資源的具體信息。
刪除模板
使用上面的操作命令創建完成模板后,如果想要刪除創建的模板,請參考以下命令來刪除模板。
terraform show
terraform destroy
Terraform操作OOS模板的執行
創建執行
在上面提供的創建模板的例子基礎上,首先創建一個測試testExecution.tf的文件,并進入編輯模式
vi testExecution.tf
在編輯模式下,將以下內容復制進testExecution.tf文件中。
resource "alicloud_oos_execution" "exampleExecution"{ template_name = "terraform-test" description = "From TF Test" parameters = <<EOF {"Status":"Running"} EOF }
編輯完成后保存并退出。
執行以下命令,使用Terraform執行OOS已經創建完成的模板。
terraform plan terraform apply
在OOS控制臺查看執行是否啟動,如下圖所示發現執行創建成功。
查看執行
參考alicloud_oos_executions來查看搜索操作的其他具體參數。
創建一個dataExecutionTest.tf的文件,進入編輯模式。
vi dataExecutionTest.tf
將以下查看資源的內容復制進入dataExecutionTest.tf文件內,保存并退出。
data "alicloud_oos_executions" "example" { ids = ["execution_id"] template_name = "name" } output "first_execution_id" { value = "${data.alicloud_oos_executions.example.executions.0.id}" }
完成上述操作后,輸入以下命令來查看資源的具體信息。
terraform plan terraform apply
如下圖所示,將上述命令輸入完成后,在您執行命令的控制臺顯示的結果為當前資源的具體信息。
刪除執行
在使用Terraform創建完執行后,如果想要刪除OOS上的執行資源,使用以下命令即可。
terraform show
terraform destroy