本文为您介绍资源编排服务ROS(Resource Orchestration Service)的Go SDK安装方法和示例代码。以查询可用地域列表、创建资源栈、查询资源栈、删除资源栈等操作为例,帮助您快速掌握资源编排接口的使用方法。
安装Go语言
下载及安装Go语言。
说明Go语言的下载及安装,请参见官方安装文档。
建议您使用Go语言1.13及以上版本。
验证安装是否成功。
验证Go语言版本。
执行以下命令:
go version
预期输出:
go version go1.20.2
验证GOPATH配置。
执行以下命令:
go env GOPATH
预期输出:
/root/go
安装Go SDK
下载及安装Go SDK。
说明Go SDK的下载和使用说明,请参见SDK概览。
初始化SDK。
导入相关的软件包。
import ( "os" ros20190910 "github.com/alibabacloud-go/ros-20190910/v4/client" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" console "github.com/alibabacloud-go/tea-console/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "github.com/aliyun/credentials-go/credentials" )
初始化SDK客户端对象。
func Initialization(regionId *string) (_result *ros20190910.Client, _err error) { // 初始化Credential credential, _err := credentials.NewCredential(nil) if _err != nil { panic(_err) } config := &openapi.Config{ // 使用Credential配置凭证 Credential: credential, // 配置云产品服务接入地址(endpoint) Endpoint: tea.String("ros.aliyuncs.com"), } // 您的地域ID config.RegionId = regionId _result, _err = ros20190910.NewClient(config) return _result, _err }
示例
查询可用地域列表示例
通过调用DescribeRegions接口查询可用地域列表。关于DescribeRegions接口的详情,请参见DescribeRegions。
func _main (args []*string) (_err error) { client, _err := CreateClient(tea.String("accessKeyId"), tea.String("accessKeySecret")) if _err != nil { return _err } describeRegionsRequest := &ros20190910.DescribeRegionsRequest{} runtime := &util.RuntimeOptions{} // 复制代码运行请自行打印API的返回值 _, _err = client.DescribeRegionsWithOptions(describeRegionsRequest, runtime) if _err != nil { return _err } return _err }
创建资源栈示例
通过调用CreateStack接口创建资源栈。关于CreateStack接口的详情,请参见CreateStack。
在本示例中,指定了以下参数:
regionId:资源栈所属的地域ID。
stackName:资源栈名称。同一阿里云账号中资源栈名称不能重复。
timeoutInMinutes:创建资源栈的超时时间,单位为分钟。如果在指定时间内不能完成创建,则资源栈创建失败。
templateBody:模板的主体结构。
parameters:创建资源栈所需要的参数。需要同时指定ParameterKey和ParameterValue。
参数设置的示例代码如下所示。
// 区域ID regionId := tea.String("cn-shenzhen") // 资源栈名称 stackName := tea.String("MyStack") // 创建资源栈的超时时间 timeoutInMinutes := tea.Int64(40) // 创建参数模板 parameters0 := &ros20190910.CreateStackRequestParameters{ ParameterKey: tea.String("VpcName"), ParameterValue: tea.String("test_vpc"), } parameters1 := &ros20190910.CreateStackRequestParameters{ ParameterKey: tea.String("CidrBlock"), ParameterValue: tea.String("192.168.0.0/16"), } parameters := []*ros20190910.CreateStackRequestParameters{parameters0, parameters1} // 创建模板 templateBody := tea.String(` { "ROSTemplateFormatVersion": "2015-09-01", "Parameters": { "VpcName": { "Type": "String", "Description": "Vpc Name", "Label": "Vpc Name" }, "CidrBlock": { "Type": "String", "Description": "Vpc CidrBlock", "Label": "Vpc CidrBlock" } }, "Resources": { "Vpc": { "Type": "ALIYUN::ECS::VPC", "Properties": { "CidrBlock": { "Ref": "CidrBlock" }, "VpcName": { "Ref": "VpcName" } } } } }`) // 等待创建成功 wait := tea.Bool(true)
创建资源栈的示例代码如下所示。
func CreateStackSample (client *ros20190910.Client, regionId *string, stackName *string, templateBody *string, timeoutInMinutes *int64, parameters []*string) (_result *string, _err error) { request := &ros20190910.CreateStackRequest{ RegionId: regionId, StackName: stackName, TemplateBody: templateBody, TimeoutInMinutes: timeoutInMinutes, Parameters: parameters, } response, _err := client.CreateStack(request) if _err != nil { return _result, _err } _result = response.Body.StackId return _result , _err }
查询资源栈信息示例
通过调用GetStack接口查询资源栈信息。关于GetStack接口的详情,请参见GetStack。
在本示例中,指定了以下参数:
regionId:资源栈所属的地域ID。
stackId:资源栈ID。
参数设置的示例代码如下所示。
func GetStackSample (client *ros20190910.Client, regionId *string, stackId *string) (_result *string, _err error) {
request := &ros20190910.GetStackRequest{
RegionId: regionId,
StackId: stackId,
}
response, _err := client.GetStack(request)
if _err != nil {
return _result, _err
}
_result = response.Body.StackId
return _result , _err
}
删除资源栈示例
通过调用DeleteStack接口删除资源栈。关于DeleteStack接口的详情,请参见DeleteStack。
在本示例中,指定了以下参数:
regionId:资源栈所属的地域ID。
stackId:资源栈ID。
参数设置的示例代码如下所示。
func DeleteStackSample (client *ros20190910.Client, regionId *string, stackId *string) (_err error) {
request := &ros20190910.DeleteStackRequest{
RegionId: regionId,
StackId: stackId,
}
_, _err := client.DeleteStack(request)
if _err != nil {
return _err
}
_result = response.Body.StackId
return _err
}
完整示例
以下为查询可用地域列表、创建资源栈、查询资源栈和删除资源栈的完整操作示例。
说明调用接口前,需配置环境变量,通过环境变量读取访问凭证。更多信息,请参见配置访问凭证。
AccessKey ID和AccessKey Secret的环境变量名:
ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET
。package main import ( "os" console "github.com/alibabacloud-go/tea-console/client" ros20190910 "github.com/alibabacloud-go/ros-20190910/v4/client" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "github.com/aliyun/credentials-go/credentials" ) /** * 初始化客户端对象 * @param regionId * @return Client * @throws Exception */ func Initialization(regionId *string) (_result *ros20190910.Client, _err error) { // 初始化Credential。 credential, _err := credentials.NewCredential(nil) if _err != nil { panic(_err) } config := &openapi.Config{ // 使用Credential配置凭证 Credential: credential, // 配置云产品服务接入地址(endpoint) Endpoint: tea.String("ros.aliyuncs.com"), } // 您的地域ID config.RegionId = regionId _result, _err = ros20190910.NewClient(config) return _result, _err } /** * 创建资源栈 * @param client * @param request * @throws Exception */ func CreateStackSample(client *ros20190910.Client, regionId *string, stackName *string, templateBody *string, timeoutInMinutes *int64, parameters []*ros20190910.CreateStackRequestParameters ) (_result *string, _err error) { request := &ros20190910.CreateStackRequest{ RegionId: regionId, StackName: stackName, TemplateBody: templateBody, TimeoutInMinutes: timeoutInMinutes, Parameters: parameters, } response, _err := client.CreateStack(request) if _err != nil { return _result, _err } console.Log(tea.String("创建中,资源栈ID:" + tea.StringValue(response.Body.StackId))) _result = response.Body.StackId return _result, _err } /** * 查询资源栈信息 * @param client * @param stackId * @throws Exception */ func GetStackSample(client *ros20190910.Client, regionId *string, stackId *string, wait *bool) (_err error) { request := &ros20190910.GetStackRequest{ RegionId: regionId, StackId: stackId, } response, _err := client.GetStack(request) if _err != nil { return _err } body := response.Body console.Log(util.ToJSONString(tea.ToMap(response))) if tea.BoolValue(wait) { if tea.BoolValue(util.EqualString(body.Status, tea.String("CREATE_IN_PROGRESS"))) { console.Log(tea.String("正在创建中......")) _err = util.Sleep(tea.Int(10000)) if _err != nil { return _err } _err = GetStackSample(client, regionId, stackId, wait) if _err != nil { return _err } } else if tea.BoolValue(util.EqualString(body.Status, tea.String("CREATE_FAILED"))) { console.Log(tea.String("创建失败, 信息:" + tea.StringValue(body.StatusReason) + ", requestId:" + tea.StringValue(body.RequestId))) } else if tea.BoolValue(util.EqualString(body.Status, tea.String("CREATE_COMPLETE"))) { console.Log(tea.String("创建成功")) console.Log(tea.String("ID:" + tea.StringValue(body.StackId))) } } else { console.Log(tea.String("ID:" + tea.StringValue(body.StackId))) console.Log(tea.String("状态:" + tea.StringValue(body.Status))) console.Log(util.ToJSONString(tea.ToMap(response))) } return _err } func DeleteStackSample(client *ros20190910.Client, regionId *string, stackId *string) (_err error) { request := &ros20190910.DeleteStackRequest{ RegionId: regionId, StackId: stackId, } response, _err := client.DeleteStack(request) if _err != nil { return _err } console.Log(util.ToJSONString(tea.ToMap(response))) return _err } func _main(args []*string) (_err error) { // 区域ID regionId := tea.String("cn-shenzhen") // 资源栈名称 stackName := tea.String("MyStack") // 创建资源栈的超时时间 timeoutInMinutes := tea.Int64(40) // 创建参数模板 parameters0 := &ros20190910.CreateStackRequestParameters{ ParameterKey: tea.String("VpcName"), ParameterValue: tea.String("test_vpc"), } parameters1 := &ros20190910.CreateStackRequestParameters{ ParameterKey: tea.String("CidrBlock"), ParameterValue: tea.String("192.168.0.0/16"), } parameters := []*ros20190910.CreateStackRequestParameters{parameters0, parameters1} // 创建模板 templateBody := tea.String(` { "ROSTemplateFormatVersion": "2015-09-01", "Parameters": { "VpcName": { "Type": "String", "Description": "Vpc Name", "Label": "Vpc Name" }, "CidrBlock": { "Type": "String", "Description": "Vpc CidrBlock", "Label": "Vpc CidrBlock" } }, "Resources": { "Vpc": { "Type": "ALIYUN::ECS::VPC", "Properties": { "CidrBlock": { "Ref": "CidrBlock" }, "VpcName": { "Ref": "VpcName" } } } } }`) // 等待创建成功 wait := tea.Bool(true) client, _err := Initialization(regionId) if _err != nil { return _err } console.Log(tea.String("--------------------创建资源栈--------------------")) stackId, _err := CreateStackSample(client, regionId, stackName, templateBody, timeoutInMinutes, parameters) if _err != nil { return _err } _err = util.Sleep(tea.Int(1000)) if _err != nil { return _err } console.Log(tea.String("--------------------资源栈" + tea.StringValue(stackName) + "信息--------------------")) _err = GetStackSample(client, regionId, stackId, wait) if _err != nil { return _err } console.Log(tea.String("--------------------删除资源栈--------------------")) _err = DeleteStackSample(client, regionId, stackId) if _err != nil { return _err } return _err } func main() { err := _main(tea.StringSlice(os.Args[1:])) if err != nil { panic(err) } }