package alipay import ( "encoding/json" "errors" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" ecs20140526 "github.com/alibabacloud-go/ecs-20140526/v4/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "github.com/google/uuid" "strings" ) var ( _client *ecs20140526.Client RegionId = "cn-hangzhou" AccessKeyId = "LTAI5tS5pSkUwm6VURuaetxs" AccessKeySecret = "iQFIO4MFa7tZ7HbHs0OXOaMDvMozM5" EndPoint = "ecs-cn-hangzhou.aliyuncs.com" ) func CreateClient() (_result *ecs20140526.Client, _err error) { // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378661.html。 config := &openapi.Config{ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 AccessKeyId: tea.String(AccessKeyId), // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 AccessKeySecret: tea.String(AccessKeySecret), } // Endpoint 请参考 https://api.aliyun.com/product/Ecs config.Endpoint = tea.String(EndPoint) _result = &ecs20140526.Client{} _result, _err = ecs20140526.NewClient(config) return _result, _err } func UpdateAliIp(groupId, ruleId, ip string) (_err error) { if _client == nil { client, e := CreateClient() if e != nil { return e } _client = client } newUUID, _ := uuid.NewUUID() modifySecurityGroupRuleRequest := &ecs20140526.ModifySecurityGroupRuleRequest{ RegionId: tea.String(RegionId), ClientToken: tea.String(newUUID.String()), SecurityGroupId: tea.String(groupId), SecurityGroupRuleId: tea.String(ruleId), SourceCidrIp: tea.String(ip), } runtime := &util.RuntimeOptions{} tryErr := func() (_e error) { defer func() { if r := tea.Recover(recover()); r != nil { _e = r } }() // 复制代码运行请自行打印 API 的返回值 _, _err = _client.ModifySecurityGroupRuleWithOptions(modifySecurityGroupRuleRequest, runtime) if _err != nil { return _err } return nil }() if tryErr != nil { var err = &tea.SDKError{} var _t *tea.SDKError if errors.As(tryErr, &_t) { err = _t } // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 // 错误 message fmt.Println(tea.StringValue(err.Message)) // 诊断地址 var data interface{} d := json.NewDecoder(strings.NewReader(tea.StringValue(err.Data))) e := d.Decode(&data) if e != nil { return e } if m, ok := data.(map[string]interface{}); ok { recommend, _ := m["Recommend"] fmt.Println(recommend) } _, _err = util.AssertAsString(err.Message) if _err != nil { return _err } } return _err }