文档

Go SDK使用示例

更新时间:

本文为您介绍资源编排服务ROS(Resource Orchestration Service)的Go SDK安装方法和示例代码。以查询可用地域列表、创建资源栈、查询资源栈、删除资源栈等操作为例,帮助您快速掌握资源编排接口的使用方法。

安装Go语言

  1. 下载及安装Go语言。

    说明
    • Go语言的下载及安装,请参见官方安装文档

    • 建议您使用Go语言1.13及以上版本。

  2. 验证安装是否成功。

    • 验证Go语言版本。

      执行以下命令:

      go version

      预期输出:

      go version go1.20.2
    • 验证GOPATH配置。

      执行以下命令:

      go env GOPATH

      预期输出:

      /root/go

安装Go SDK

  1. 下载及安装Go SDK。

    说明

    Go SDK的下载和使用说明,请参见SDK概览

  2. 初始化SDK。

    1. 导入相关的软件包。

      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"
      )
    2. 初始化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)
        }
    }
  • 本页导读 (1)
文档反馈