• go调用阿里云接口查询ECS信息


    1、RAM访问控制

    1.1 创建用户:访问方式:Open API 调用访问
    1.2 记得保存AK,一定要复制保存
    1.3 权限管理—>新增授权---->只读访问所有阿里云资源的权限
    注意:此处因为我初次练习使用,用了只读权限,初学者建议使用只读权限,如果有写权限,OpenAPI可直接调用操作资源

    2、阿里云官方ECS API接口地址

    文档中示例代码仅供参考,真正的该产品 SDK 的使用步骤请参见:https://next.api.aliyun.com/api/Ecs/2014-05-26

    3、填写参数配置

    在这里插入图片描述

    4、填好参数后进行测试

    在这里插入图片描述

    5、复制SDK示例代码

    在这里插入图片描述

    // This file is auto-generated, don't edit it. Thanks.
    package main
    
    import (
    	"fmt"
    	openapi "github.com/alibabacloud-go/darabonba-openapi/client"
    	ecs20140526 "github.com/alibabacloud-go/ecs-20140526/v2/client"
    	console "github.com/alibabacloud-go/tea-console/client"
    	util "github.com/alibabacloud-go/tea-utils/service"
    	"github.com/alibabacloud-go/tea/tea"
    	"os"
    )
    
    /**
     * 使用AK&SK初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    
    func CreateClient(accessKeyId *string, accessKeySecret *string) (_result *ecs20140526.Client, _err error) {
    	config := &openapi.Config{
    		// 您的 AccessKey ID
    		AccessKeyId: accessKeyId,
    		// 您的 AccessKey Secret
    		AccessKeySecret: accessKeySecret,
    	}
    	// 访问的域名
    	config.Endpoint = tea.String("ecs-cn-hangzhou.aliyuncs.com")
    	_result = &ecs20140526.Client{}
    	_result, _err = ecs20140526.NewClient(config)
    	return _result, _err
    }
    
    func _main(args []*string) (_err error) {
    	client, _err := CreateClient(tea.String("替换为你的AccessKey ID"), tea.String("替换为你的AccessKey Secret"))
    	if _err != nil {
    		return _err
    	}
    
    	describeInstancesRequest := &ecs20140526.DescribeInstancesRequest{
    		RegionId:            tea.String("cn-hangzhou"),
    		VpcId:               tea.String("你的VPCid"),
    		VSwitchId:           tea.String("你的交换机id"),
    		InstanceNetworkType: tea.String("vpc"),
    		ZoneId:              tea.String("cn-hangzhou-h"),
    	}
    	runtime := &util.RuntimeOptions{}
    	tryErr := func() (_e error) {
    		defer func() {
    			if r := tea.Recover(recover()); r != nil {
    				_e = r
    			}
    		}()
    		// 复制代码运行请自行打印 API 的返回值
    		all, _err := client.DescribeInstancesWithOptions(describeInstancesRequest, runtime)
    		if _err != nil {
    			return _err
    		}
    
    		instances := all.Body.Instances.Instance
    		RegionId := tea.String("cn-hangzhou")
    		console.Log(tea.String(tea.StringValue(RegionId) + " ECS 实例列表:"))
    		for _, instance := range instances {
    		// 方式1:
    			console.Log(tea.String("实例名称: " + tea.StringValue(instance.HostName) + " 实例ID: " + tea.StringValue(instance.InstanceId) +
    				" 内网IP: " + tea.ToString(*instance.VpcAttributes.PrivateIpAddress.IpAddress[0]) + " 公网IP: " + tea.StringValue(instance.EipAddress.IpAddress) + " CPU: " + tea.ToString(tea.Int32Value(instance.Cpu)) + " 内存: " + tea.ToString(tea.Int32Value(instance.Memory)) +
    				" MB   规格: " + tea.StringValue(instance.InstanceType) + " 地域: " + tea.StringValue(instance.RegionId) + " 网络类型: " + tea.StringValue(instance.InstanceNetworkType) + "  操作系统:" + tea.StringValue(instance.OSType) +
    				"(" + tea.StringValue(instance.OSName) + " 状态: " + tea.StringValue(instance.Status) + " 创建时间: " + tea.StringValue(instance.CreationTime) + " 付费类型: " + tea.StringValue(instance.InstanceChargeType)))
    			// 方式2:
    			fmt.Println("\t ECS实例列表")
    			fmt.Printf(" 实例名称: %s \n ", *instance.HostName)
    			fmt.Printf("实例ID: %s \n ", *instance.InstanceId)
    			fmt.Printf("内网IP: %v \n", *instance.VpcAttributes.PrivateIpAddress.IpAddress[0])
    			fmt.Printf(" 公网IP: %s \n", *instance.EipAddress.IpAddress)
    			fmt.Printf(" CPU: %d"+"核 \n", *instance.Cpu)
    			fmt.Printf(" 内存: %d"+"MB \n", *instance.Memory)
    			fmt.Printf(" 地域: %s \n", *instance.RegionId)
    			fmt.Printf(" 网络类型: %s \n", *instance.InstanceNetworkType)
    			fmt.Printf(" 操作系统: %s \n", *instance.OSName)
    			fmt.Printf(" 状态: %s \n", *instance.Status)
    			fmt.Printf(" 创建时间: %s \n", *instance.CreationTime)
    			fmt.Printf(" 付费类型: %s \n", *instance.InstanceChargeType)
    		}
    		fmt.Println(all) // 打印出所有资源
    		return nil
    
    	}()
    
    	if tryErr != nil {
    		var error1 = &tea.SDKError{}
    		if _t, ok := tryErr.(*tea.SDKError); ok {
    			error1 = _t
    		} else {
    			error1.Message = tea.String(tryErr.Error())
    		}
    		// 如有需要,请打印 error
    		util.AssertAsString(error1.Message)
    	}
    	return _err
    }
    
    func main() {
    	err := _main(tea.StringSlice(os.Args[1:]))
    	if err != nil {
    		panic(err)
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110

    6、执行结果

    在这里插入图片描述

    此代码是学习初次使用SDK,写的不好或者有问题,请指正,一起学习!

  • 相关阅读:
    DevOps实战:使用GitLab+Jenkins+Kubernetes(k8s)建立CI/CD解决方案
    重装系统后要安装哪些驱动
    二、局域网联机
    教你一招轻松搞定mp3格式转换
    Web前端——表格表单练习
    Vue+elementui 纯前端实现Excel导入导出功能(区分表头标题)
    UniApp 踩坑日记
    回放及资料下载|2022 智能云边开源峰会
    [Linux]进程程序替换
    LeetCode66——加一
  • 原文地址:https://blog.csdn.net/weixin_45858439/article/details/126365552