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