Sfoglia il codice sorgente

Merge branch 'master' of https://github.com/aliyun/alibaba-cloud-sdk-go into pre-release

jxyowen 7 anni fa
parent
commit
6ee28cb3fb
42 ha cambiato i file con 1644 aggiunte e 89 eliminazioni
  1. 21 0
      ChangeLog.txt
  2. 44 0
      sdk/client.go
  3. 38 0
      sdk/endpoints/mapping_resolver.go
  4. 19 0
      sdk/endpoints/mapping_resolver_test.go
  5. 1 0
      sdk/endpoints/resolver.go
  6. 114 0
      services/cloudphoto/fetch_moment_photos.go
  7. 114 0
      services/cloudphoto/fetch_photos.go
  8. 1 1
      services/cloudphoto/struct_photo.go
  9. 21 0
      services/cloudphoto/struct_photos_in_fetch_moment_photos.go
  10. 21 0
      services/cloudphoto/struct_photos_in_fetch_photos.go
  11. 2 2
      services/cms/list_my_groups.go
  12. 1 1
      services/cms/query_metric_last.go
  13. 4 3
      services/cms/struct_alarm_history.go
  14. 1 0
      services/cms/struct_alarm_history_in_describe_alarm_history.go
  15. 2 0
      services/cms/struct_resource.go
  16. 102 0
      services/ecs/assign_private_ip_addresses.go
  17. 1 0
      services/ecs/create_instance.go
  18. 1 0
      services/ecs/describe_instance_attribute.go
  19. 21 0
      services/ecs/struct_available_dedicated_host_types.go
  20. 22 0
      services/ecs/struct_dedicated_host_attribute.go
  21. 21 0
      services/ecs/struct_dedicated_host_generations.go
  22. 1 1
      services/ecs/struct_event_cycle_status.go
  23. 1 0
      services/ecs/struct_instance.go
  24. 7 5
      services/ecs/struct_instance_system_event_type.go
  25. 11 9
      services/ecs/struct_zone.go
  26. 102 0
      services/ecs/unassign_private_ip_addresses.go
  27. 107 0
      services/ess/create_notification_configuration.go
  28. 50 42
      services/ess/create_scaling_configuration.go
  29. 106 0
      services/ess/delete_notification_configuration.go
  30. 106 0
      services/ess/describe_notification_configurations.go
  31. 105 0
      services/ess/describe_notification_types.go
  32. 106 0
      services/ess/enter_standby.go
  33. 106 0
      services/ess/exit_standby.go
  34. 107 0
      services/ess/modify_notification_configuration.go
  35. 23 0
      services/ess/struct_notification_configuration_model.go
  36. 21 0
      services/ess/struct_notification_configuration_models.go
  37. 21 0
      services/ess/struct_notification_types_in_describe_notification_configurations.go
  38. 21 0
      services/ess/struct_notification_types_in_describe_notification_types.go
  39. 27 25
      services/ess/struct_scaling_configuration.go
  40. 1 0
      services/ess/struct_scaling_group.go
  41. 21 0
      services/ess/struct_spot_price_limit.go
  42. 22 0
      services/ess/struct_spot_price_model.go

+ 21 - 0
ChangeLog.txt

@@ -1,3 +1,24 @@
+2018-04-24 Version: 1.9.4
+1, add interface FetchPhotos
+2, add xflush log param unixTimestamp
+
+2018-04-23 Version: 1.9.3
+1, DescribeInstanceHistoryEvents adds parameter instanceEventTypes and instanceEventCycleStatuss.
+2, InstanceId parameter is not necessary for DescribeInstanceHistoryEvents now.
+3, DescribeInstancesFullStatus adds parameter instanceEventTypes.
+
+2018-04-23 Version: 1.9.2
+1, Add notificationConfiguration.
+2, Add standby status.
+
+2018-04-20 Version: 1.9.1
+1, Interface DescribeAlarmHistory/ListAlarmHistory Add return value instanceName.
+
+2018-04-17 Version: 1.8.3
+1, EditPhotos add input param TakenAt
+2, add FetchMomentPhotos
+3, ListAlbums add return param Remark
+
 2018-04-16 Version: 1.8.2
 1, Release go sdk
 

+ 44 - 0
sdk/client.go

@@ -151,6 +151,50 @@ func (client *Client) DoAction(request requests.AcsRequest, response responses.A
 	return client.DoActionWithSigner(request, response, nil)
 }
 
+func (client *Client) BuildRequestWithSigner(request requests.AcsRequest, signer auth.Signer) (err error) {
+	// add clientVersion
+	request.GetHeaders()["x-sdk-core-version"] = Version
+
+	regionId := client.regionId
+	if len(request.GetRegionId()) > 0 {
+		regionId = request.GetRegionId()
+	}
+
+	// resolve endpoint
+	resolveParam := &endpoints.ResolveParam{
+		Domain:               request.GetDomain(),
+		Product:              request.GetProduct(),
+		RegionId:             regionId,
+		LocationProduct:      request.GetLocationServiceCode(),
+		LocationEndpointType: request.GetLocationEndpointType(),
+		CommonApi:            client.ProcessCommonRequest,
+	}
+	endpoint, err := endpoints.Resolve(resolveParam)
+	if err != nil {
+		return
+	}
+	request.SetDomain(endpoint)
+
+	// init request params
+	err = requests.InitParams(request)
+	if err != nil {
+		return
+	}
+
+	// signature
+	var finalSigner auth.Signer
+	if signer != nil {
+		finalSigner = signer
+	} else {
+		finalSigner = client.signer
+	}
+	httpRequest, err := buildHttpRequest(request, finalSigner, regionId)
+	if client.config.UserAgent != "" {
+		httpRequest.Header.Set("User-Agent", client.config.UserAgent)
+	}
+	return err
+}
+
 func (client *Client) DoActionWithSigner(request requests.AcsRequest, response responses.AcsResponse, signer auth.Signer) (err error) {
 
 	// add clientVersion

+ 38 - 0
sdk/endpoints/mapping_resolver.go

@@ -0,0 +1,38 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package endpoints
+
+import (
+	"fmt"
+	"strings"
+)
+
+const keyFormatter = "%s::%s"
+var endpointMapping = make(map[string]string )
+
+func AddEndpointMapping(regionId, productId, endpoint string) (err error) {
+	key := fmt.Sprintf(keyFormatter, strings.ToLower(regionId), strings.ToLower(productId))
+	endpointMapping[key] = endpoint
+	return nil
+}
+
+type MappingResolver struct {
+}
+
+func (resolver *MappingResolver) TryResolve(param *ResolveParam) (endpoint string, support bool, err error) {
+	key := fmt.Sprintf(keyFormatter, strings.ToLower(param.RegionId), strings.ToLower(param.Product))
+	endpoint, contains := endpointMapping[key]
+	return endpoint, contains, nil
+}

+ 19 - 0
sdk/endpoints/mapping_resolver_test.go

@@ -0,0 +1,19 @@
+package endpoints
+
+import (
+	"testing"
+	"github.com/github.com/stretchr/testify/assert"
+	"fmt"
+)
+
+func TestMappingResolver_TryResolve(t *testing.T) {
+	AddEndpointMapping("cn-hangzhou", "Ecs", "unreachable.aliyuncs.com")
+	resolveParam := &ResolveParam{
+		RegionId:"cn-hangzhou",
+		Product:"ecs",
+	}
+	endpoint, err := Resolve(resolveParam)
+	assert.Nil(t, err)
+	assert.Equal(t, endpoint, "unreachable.aliyuncs.com")
+	fmt.Println("finished")
+}

+ 1 - 0
sdk/endpoints/resolver.go

@@ -53,6 +53,7 @@ func getAllResolvers() []Resolver {
 	once.Do(func() {
 		resolvers = []Resolver{
 			&SimpleHostResolver{},
+			&MappingResolver{},
 			&LocationResolver{},
 			&LocalRegionalResolver{},
 			&LocalGlobalResolver{},

+ 114 - 0
services/cloudphoto/fetch_moment_photos.go

@@ -0,0 +1,114 @@
+package cloudphoto
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// FetchMomentPhotos invokes the cloudphoto.FetchMomentPhotos API synchronously
+// api document: https://help.aliyun.com/api/cloudphoto/fetchmomentphotos.html
+func (client *Client) FetchMomentPhotos(request *FetchMomentPhotosRequest) (response *FetchMomentPhotosResponse, err error) {
+	response = CreateFetchMomentPhotosResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// FetchMomentPhotosWithChan invokes the cloudphoto.FetchMomentPhotos API asynchronously
+// api document: https://help.aliyun.com/api/cloudphoto/fetchmomentphotos.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) FetchMomentPhotosWithChan(request *FetchMomentPhotosRequest) (<-chan *FetchMomentPhotosResponse, <-chan error) {
+	responseChan := make(chan *FetchMomentPhotosResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.FetchMomentPhotos(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// FetchMomentPhotosWithCallback invokes the cloudphoto.FetchMomentPhotos API asynchronously
+// api document: https://help.aliyun.com/api/cloudphoto/fetchmomentphotos.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) FetchMomentPhotosWithCallback(request *FetchMomentPhotosRequest, callback func(response *FetchMomentPhotosResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *FetchMomentPhotosResponse
+		var err error
+		defer close(result)
+		response, err = client.FetchMomentPhotos(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// FetchMomentPhotosRequest is the request struct for api FetchMomentPhotos
+type FetchMomentPhotosRequest struct {
+	*requests.RpcRequest
+	MomentId  requests.Integer `position:"Query" name:"MomentId"`
+	OrderBy   string           `position:"Query" name:"OrderBy"`
+	Order     string           `position:"Query" name:"Order"`
+	Size      requests.Integer `position:"Query" name:"Size"`
+	Page      requests.Integer `position:"Query" name:"Page"`
+	StoreName string           `position:"Query" name:"StoreName"`
+	LibraryId string           `position:"Query" name:"LibraryId"`
+}
+
+// FetchMomentPhotosResponse is the response struct for api FetchMomentPhotos
+type FetchMomentPhotosResponse struct {
+	*responses.BaseResponse
+	Code       string  `json:"Code" xml:"Code"`
+	Message    string  `json:"Message" xml:"Message"`
+	TotalCount int     `json:"TotalCount" xml:"TotalCount"`
+	RequestId  string  `json:"RequestId" xml:"RequestId"`
+	Action     string  `json:"Action" xml:"Action"`
+	Photos     []Photo `json:"Photos" xml:"Photos"`
+}
+
+// CreateFetchMomentPhotosRequest creates a request to invoke FetchMomentPhotos API
+func CreateFetchMomentPhotosRequest() (request *FetchMomentPhotosRequest) {
+	request = &FetchMomentPhotosRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("CloudPhoto", "2017-07-11", "FetchMomentPhotos", "cloudphoto", "openAPI")
+	return
+}
+
+// CreateFetchMomentPhotosResponse creates a response to parse from FetchMomentPhotos response
+func CreateFetchMomentPhotosResponse() (response *FetchMomentPhotosResponse) {
+	response = &FetchMomentPhotosResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 114 - 0
services/cloudphoto/fetch_photos.go

@@ -0,0 +1,114 @@
+package cloudphoto
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// FetchPhotos invokes the cloudphoto.FetchPhotos API synchronously
+// api document: https://help.aliyun.com/api/cloudphoto/fetchphotos.html
+func (client *Client) FetchPhotos(request *FetchPhotosRequest) (response *FetchPhotosResponse, err error) {
+	response = CreateFetchPhotosResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// FetchPhotosWithChan invokes the cloudphoto.FetchPhotos API asynchronously
+// api document: https://help.aliyun.com/api/cloudphoto/fetchphotos.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) FetchPhotosWithChan(request *FetchPhotosRequest) (<-chan *FetchPhotosResponse, <-chan error) {
+	responseChan := make(chan *FetchPhotosResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.FetchPhotos(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// FetchPhotosWithCallback invokes the cloudphoto.FetchPhotos API asynchronously
+// api document: https://help.aliyun.com/api/cloudphoto/fetchphotos.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) FetchPhotosWithCallback(request *FetchPhotosRequest, callback func(response *FetchPhotosResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *FetchPhotosResponse
+		var err error
+		defer close(result)
+		response, err = client.FetchPhotos(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// FetchPhotosRequest is the request struct for api FetchPhotos
+type FetchPhotosRequest struct {
+	*requests.RpcRequest
+	State     string           `position:"Query" name:"State"`
+	OrderBy   string           `position:"Query" name:"OrderBy"`
+	Order     string           `position:"Query" name:"Order"`
+	Size      requests.Integer `position:"Query" name:"Size"`
+	Page      requests.Integer `position:"Query" name:"Page"`
+	StoreName string           `position:"Query" name:"StoreName"`
+	LibraryId string           `position:"Query" name:"LibraryId"`
+}
+
+// FetchPhotosResponse is the response struct for api FetchPhotos
+type FetchPhotosResponse struct {
+	*responses.BaseResponse
+	Code       string  `json:"Code" xml:"Code"`
+	Message    string  `json:"Message" xml:"Message"`
+	TotalCount int     `json:"TotalCount" xml:"TotalCount"`
+	RequestId  string  `json:"RequestId" xml:"RequestId"`
+	Action     string  `json:"Action" xml:"Action"`
+	Photos     []Photo `json:"Photos" xml:"Photos"`
+}
+
+// CreateFetchPhotosRequest creates a request to invoke FetchPhotos API
+func CreateFetchPhotosRequest() (request *FetchPhotosRequest) {
+	request = &FetchPhotosRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("CloudPhoto", "2017-07-11", "FetchPhotos", "cloudphoto", "openAPI")
+	return
+}
+
+// CreateFetchPhotosResponse creates a response to parse from FetchPhotos response
+func CreateFetchPhotosResponse() (response *FetchPhotosResponse) {
+	response = &FetchPhotosResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 1 - 1
services/cloudphoto/struct_photo.go

@@ -24,8 +24,8 @@ type Photo struct {
 	Remark          string `json:"Remark" xml:"Remark"`
 	Like            int    `json:"Like" xml:"Like"`
 	Id              int    `json:"Id" xml:"Id"`
-	ShareExpireTime int    `json:"ShareExpireTime" xml:"ShareExpireTime"`
 	InactiveTime    int    `json:"InactiveTime" xml:"InactiveTime"`
+	ShareExpireTime int    `json:"ShareExpireTime" xml:"ShareExpireTime"`
 	Location        string `json:"Location" xml:"Location"`
 	Height          int    `json:"Height" xml:"Height"`
 	IsVideo         bool   `json:"IsVideo" xml:"IsVideo"`

+ 21 - 0
services/cloudphoto/struct_photos_in_fetch_moment_photos.go

@@ -0,0 +1,21 @@
+package cloudphoto
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// PhotosInFetchMomentPhotos is a nested struct in cloudphoto response
+type PhotosInFetchMomentPhotos struct {
+	Photo []Photo `json:"Photo" xml:"Photo"`
+}

+ 21 - 0
services/cloudphoto/struct_photos_in_fetch_photos.go

@@ -0,0 +1,21 @@
+package cloudphoto
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// PhotosInFetchPhotos is a nested struct in cloudphoto response
+type PhotosInFetchPhotos struct {
+	Photo []Photo `json:"Photo" xml:"Photo"`
+}

+ 2 - 2
services/cms/list_my_groups.go

@@ -76,11 +76,11 @@ func (client *Client) ListMyGroupsWithCallback(request *ListMyGroupsRequest, cal
 // ListMyGroupsRequest is the request struct for api ListMyGroups
 type ListMyGroupsRequest struct {
 	*requests.RpcRequest
+	SelectContactGroups requests.Boolean `position:"Query" name:"SelectContactGroups"`
 	Keyword             string           `position:"Query" name:"Keyword"`
-	Type                string           `position:"Query" name:"Type"`
 	PageNumber          requests.Integer `position:"Query" name:"PageNumber"`
 	PageSize            requests.Integer `position:"Query" name:"PageSize"`
-	SelectContactGroups requests.Boolean `position:"Query" name:"SelectContactGroups"`
+	Type                string           `position:"Query" name:"Type"`
 	InstanceId          string           `position:"Query" name:"InstanceId"`
 	BindUrls            string           `position:"Query" name:"BindUrls"`
 	GroupName           string           `position:"Query" name:"GroupName"`

+ 1 - 1
services/cms/query_metric_last.go

@@ -76,9 +76,9 @@ func (client *Client) QueryMetricLastWithCallback(request *QueryMetricLastReques
 // QueryMetricLastRequest is the request struct for api QueryMetricLast
 type QueryMetricLastRequest struct {
 	*requests.RpcRequest
-	Project         string           `position:"Query" name:"Project"`
 	ResourceOwnerId requests.Integer `position:"Query" name:"ResourceOwnerId"`
 	CallbyCmsOwner  string           `position:"Query" name:"callby_cms_owner"`
+	Project         string           `position:"Query" name:"Project"`
 	Metric          string           `position:"Query" name:"Metric"`
 	Period          string           `position:"Query" name:"Period"`
 	StartTime       string           `position:"Query" name:"StartTime"`

+ 4 - 3
services/cms/struct_alarm_history.go

@@ -18,13 +18,14 @@ package cms
 // AlarmHistory is a nested struct in cms response
 type AlarmHistory struct {
 	Name            string `json:"Name" xml:"Name"`
-	Value           string `json:"Value" xml:"Value"`
 	AlarmTime       int    `json:"AlarmTime" xml:"AlarmTime"`
 	Status          int    `json:"Status" xml:"Status"`
-	State           string `json:"State" xml:"State"`
-	Namespace       string `json:"Namespace" xml:"Namespace"`
+	InstanceName    string `json:"InstanceName" xml:"InstanceName"`
 	Dimension       string `json:"Dimension" xml:"Dimension"`
 	ContactGroups   string `json:"ContactGroups" xml:"ContactGroups"`
+	Value           string `json:"Value" xml:"Value"`
+	State           string `json:"State" xml:"State"`
+	Namespace       string `json:"Namespace" xml:"Namespace"`
 	Id              string `json:"Id" xml:"Id"`
 	MetricName      string `json:"MetricName" xml:"MetricName"`
 	LastTime        int    `json:"LastTime" xml:"LastTime"`

+ 1 - 0
services/cms/struct_alarm_history_in_describe_alarm_history.go

@@ -35,6 +35,7 @@ type AlarmHistoryInDescribeAlarmHistory struct {
 	Status          int                                 `json:"Status" xml:"Status"`
 	UserId          string                              `json:"UserId" xml:"UserId"`
 	Webhooks        string                              `json:"Webhooks" xml:"Webhooks"`
+	InstanceName    string                              `json:"InstanceName" xml:"InstanceName"`
 	ContactGroups   ContactGroupsInDescribeAlarmHistory `json:"ContactGroups" xml:"ContactGroups"`
 	Contacts        Contacts                            `json:"Contacts" xml:"Contacts"`
 	ContactALIIMs   ContactALIIMs                       `json:"ContactALIIMs" xml:"ContactALIIMs"`

+ 2 - 0
services/cms/struct_resource.go

@@ -22,11 +22,13 @@ type Resource struct {
 	InstanceName  string                      `json:"InstanceName" xml:"InstanceName"`
 	GroupName     string                      `json:"GroupName" xml:"GroupName"`
 	Id            int                         `json:"Id" xml:"Id"`
+	GmtCreate     int                         `json:"GmtCreate" xml:"GmtCreate"`
 	BindUrls      string                      `json:"BindUrls" xml:"BindUrls"`
 	ServiceId     string                      `json:"ServiceId" xml:"ServiceId"`
 	RegionId      string                      `json:"RegionId" xml:"RegionId"`
 	InstanceId    string                      `json:"InstanceId" xml:"InstanceId"`
 	GroupId       int                         `json:"GroupId" xml:"GroupId"`
+	GmtModified   int                         `json:"GmtModified" xml:"GmtModified"`
 	AliUid        int                         `json:"AliUid" xml:"AliUid"`
 	NetworkType   string                      `json:"NetworkType" xml:"NetworkType"`
 	Type          string                      `json:"Type" xml:"Type"`

+ 102 - 0
services/ecs/assign_private_ip_addresses.go

@@ -0,0 +1,102 @@
+package ecs
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// AssignPrivateIpAddresses invokes the ecs.AssignPrivateIpAddresses API synchronously
+// api document: https://help.aliyun.com/api/ecs/assignprivateipaddresses.html
+func (client *Client) AssignPrivateIpAddresses(request *AssignPrivateIpAddressesRequest) (response *AssignPrivateIpAddressesResponse, err error) {
+	response = CreateAssignPrivateIpAddressesResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// AssignPrivateIpAddressesWithChan invokes the ecs.AssignPrivateIpAddresses API asynchronously
+// api document: https://help.aliyun.com/api/ecs/assignprivateipaddresses.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) AssignPrivateIpAddressesWithChan(request *AssignPrivateIpAddressesRequest) (<-chan *AssignPrivateIpAddressesResponse, <-chan error) {
+	responseChan := make(chan *AssignPrivateIpAddressesResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.AssignPrivateIpAddresses(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// AssignPrivateIpAddressesWithCallback invokes the ecs.AssignPrivateIpAddresses API asynchronously
+// api document: https://help.aliyun.com/api/ecs/assignprivateipaddresses.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) AssignPrivateIpAddressesWithCallback(request *AssignPrivateIpAddressesRequest, callback func(response *AssignPrivateIpAddressesResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *AssignPrivateIpAddressesResponse
+		var err error
+		defer close(result)
+		response, err = client.AssignPrivateIpAddresses(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// AssignPrivateIpAddressesRequest is the request struct for api AssignPrivateIpAddresses
+type AssignPrivateIpAddressesRequest struct {
+	*requests.RpcRequest
+}
+
+// AssignPrivateIpAddressesResponse is the response struct for api AssignPrivateIpAddresses
+type AssignPrivateIpAddressesResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateAssignPrivateIpAddressesRequest creates a request to invoke AssignPrivateIpAddresses API
+func CreateAssignPrivateIpAddressesRequest() (request *AssignPrivateIpAddressesRequest) {
+	request = &AssignPrivateIpAddressesRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ecs", "2014-05-26", "AssignPrivateIpAddresses", "ecs", "openAPI")
+	return
+}
+
+// CreateAssignPrivateIpAddressesResponse creates a response to parse from AssignPrivateIpAddresses response
+func CreateAssignPrivateIpAddressesResponse() (response *AssignPrivateIpAddressesResponse) {
+	response = &AssignPrivateIpAddressesResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 1 - 0
services/ecs/create_instance.go

@@ -131,6 +131,7 @@ type CreateInstanceRequest struct {
 	ResourceGroupId             string                    `position:"Query" name:"ResourceGroupId"`
 	HpcClusterId                string                    `position:"Query" name:"HpcClusterId"`
 	DryRun                      requests.Boolean          `position:"Query" name:"DryRun"`
+	DedicatedHostId             string                    `position:"Query" name:"DedicatedHostId"`
 }
 
 // CreateInstanceDataDisk is a repeated param struct in CreateInstanceRequest

+ 1 - 0
services/ecs/describe_instance_attribute.go

@@ -115,6 +115,7 @@ type DescribeInstanceAttributeResponse struct {
 	InnerIpAddress          InnerIpAddressInDescribeInstanceAttribute   `json:"InnerIpAddress" xml:"InnerIpAddress"`
 	VpcAttributes           VpcAttributes                               `json:"VpcAttributes" xml:"VpcAttributes"`
 	EipAddress              EipAddress                                  `json:"EipAddress" xml:"EipAddress"`
+	DedicatedHostAttribute  DedicatedHostAttribute                      `json:"DedicatedHostAttribute" xml:"DedicatedHostAttribute"`
 	OperationLocks          OperationLocksInDescribeInstanceAttribute   `json:"OperationLocks" xml:"OperationLocks"`
 }
 

+ 21 - 0
services/ecs/struct_available_dedicated_host_types.go

@@ -0,0 +1,21 @@
+package ecs
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// AvailableDedicatedHostTypes is a nested struct in ecs response
+type AvailableDedicatedHostTypes struct {
+	DedicatedHostType []string `json:"DedicatedHostType" xml:"DedicatedHostType"`
+}

+ 22 - 0
services/ecs/struct_dedicated_host_attribute.go

@@ -0,0 +1,22 @@
+package ecs
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// DedicatedHostAttribute is a nested struct in ecs response
+type DedicatedHostAttribute struct {
+	DedicatedHostName string `json:"DedicatedHostName" xml:"DedicatedHostName"`
+	DedicatedHostId   string `json:"DedicatedHostId" xml:"DedicatedHostId"`
+}

+ 21 - 0
services/ecs/struct_dedicated_host_generations.go

@@ -0,0 +1,21 @@
+package ecs
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// DedicatedHostGenerations is a nested struct in ecs response
+type DedicatedHostGenerations struct {
+	DedicatedHostGeneration []string `json:"DedicatedHostGeneration" xml:"DedicatedHostGeneration"`
+}

+ 1 - 1
services/ecs/struct_event_cycle_status.go

@@ -17,6 +17,6 @@ package ecs
 
 // EventCycleStatus is a nested struct in ecs response
 type EventCycleStatus struct {
-	Code int    `json:"Code" xml:"Code"`
 	Name string `json:"Name" xml:"Name"`
+	Code int    `json:"Code" xml:"Code"`
 }

+ 1 - 0
services/ecs/struct_instance.go

@@ -63,6 +63,7 @@ type Instance struct {
 	RdmaIpAddress           RdmaIpAddress                       `json:"RdmaIpAddress" xml:"RdmaIpAddress"`
 	VpcAttributes           VpcAttributes                       `json:"VpcAttributes" xml:"VpcAttributes"`
 	EipAddress              EipAddress                          `json:"EipAddress" xml:"EipAddress"`
+	DedicatedHostAttribute  DedicatedHostAttribute              `json:"DedicatedHostAttribute" xml:"DedicatedHostAttribute"`
 	NetworkInterfaces       NetworkInterfaces                   `json:"NetworkInterfaces" xml:"NetworkInterfaces"`
 	OperationLocks          OperationLocksInDescribeInstances   `json:"OperationLocks" xml:"OperationLocks"`
 	Tags                    TagsInDescribeInstances             `json:"Tags" xml:"Tags"`

+ 7 - 5
services/ecs/struct_instance_system_event_type.go

@@ -17,9 +17,11 @@ package ecs
 
 // InstanceSystemEventType is a nested struct in ecs response
 type InstanceSystemEventType struct {
-	InstanceId       string    `json:"InstanceId" xml:"InstanceId"`
-	EventId          string    `json:"EventId" xml:"EventId"`
-	EventPublishTime string    `json:"EventPublishTime" xml:"EventPublishTime"`
-	NotBefore        string    `json:"NotBefore" xml:"NotBefore"`
-	EventType        EventType `json:"EventType" xml:"EventType"`
+	InstanceId       string           `json:"InstanceId" xml:"InstanceId"`
+	EventId          string           `json:"EventId" xml:"EventId"`
+	EventPublishTime string           `json:"EventPublishTime" xml:"EventPublishTime"`
+	NotBefore        string           `json:"NotBefore" xml:"NotBefore"`
+	EventFinishTime  string           `json:"EventFinishTime" xml:"EventFinishTime"`
+	EventType        EventType        `json:"EventType" xml:"EventType"`
+	EventCycleStatus EventCycleStatus `json:"EventCycleStatus" xml:"EventCycleStatus"`
 }

+ 11 - 9
services/ecs/struct_zone.go

@@ -17,13 +17,15 @@ package ecs
 
 // Zone is a nested struct in ecs response
 type Zone struct {
-	ZoneNo                    string                                      `json:"ZoneNo" xml:"ZoneNo"`
-	ZoneId                    string                                      `json:"ZoneId" xml:"ZoneId"`
-	LocalName                 string                                      `json:"LocalName" xml:"LocalName"`
-	AvailableResourceCreation AvailableResourceCreation                   `json:"AvailableResourceCreation" xml:"AvailableResourceCreation"`
-	AvailableVolumeCategories AvailableVolumeCategories                   `json:"AvailableVolumeCategories" xml:"AvailableVolumeCategories"`
-	AvailableInstanceTypes    AvailableInstanceTypes                      `json:"AvailableInstanceTypes" xml:"AvailableInstanceTypes"`
-	NetworkTypes              NetworkTypesInDescribeRecommendInstanceType `json:"NetworkTypes" xml:"NetworkTypes"`
-	AvailableDiskCategories   AvailableDiskCategories                     `json:"AvailableDiskCategories" xml:"AvailableDiskCategories"`
-	AvailableResources        AvailableResourcesInDescribeZones           `json:"AvailableResources" xml:"AvailableResources"`
+	ZoneNo                      string                                      `json:"ZoneNo" xml:"ZoneNo"`
+	ZoneId                      string                                      `json:"ZoneId" xml:"ZoneId"`
+	LocalName                   string                                      `json:"LocalName" xml:"LocalName"`
+	AvailableResourceCreation   AvailableResourceCreation                   `json:"AvailableResourceCreation" xml:"AvailableResourceCreation"`
+	AvailableVolumeCategories   AvailableVolumeCategories                   `json:"AvailableVolumeCategories" xml:"AvailableVolumeCategories"`
+	AvailableInstanceTypes      AvailableInstanceTypes                      `json:"AvailableInstanceTypes" xml:"AvailableInstanceTypes"`
+	AvailableDedicatedHostTypes AvailableDedicatedHostTypes                 `json:"AvailableDedicatedHostTypes" xml:"AvailableDedicatedHostTypes"`
+	NetworkTypes                NetworkTypesInDescribeRecommendInstanceType `json:"NetworkTypes" xml:"NetworkTypes"`
+	AvailableDiskCategories     AvailableDiskCategories                     `json:"AvailableDiskCategories" xml:"AvailableDiskCategories"`
+	DedicatedHostGenerations    DedicatedHostGenerations                    `json:"DedicatedHostGenerations" xml:"DedicatedHostGenerations"`
+	AvailableResources          AvailableResourcesInDescribeZones           `json:"AvailableResources" xml:"AvailableResources"`
 }

+ 102 - 0
services/ecs/unassign_private_ip_addresses.go

@@ -0,0 +1,102 @@
+package ecs
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// UnassignPrivateIpAddresses invokes the ecs.UnassignPrivateIpAddresses API synchronously
+// api document: https://help.aliyun.com/api/ecs/unassignprivateipaddresses.html
+func (client *Client) UnassignPrivateIpAddresses(request *UnassignPrivateIpAddressesRequest) (response *UnassignPrivateIpAddressesResponse, err error) {
+	response = CreateUnassignPrivateIpAddressesResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// UnassignPrivateIpAddressesWithChan invokes the ecs.UnassignPrivateIpAddresses API asynchronously
+// api document: https://help.aliyun.com/api/ecs/unassignprivateipaddresses.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) UnassignPrivateIpAddressesWithChan(request *UnassignPrivateIpAddressesRequest) (<-chan *UnassignPrivateIpAddressesResponse, <-chan error) {
+	responseChan := make(chan *UnassignPrivateIpAddressesResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.UnassignPrivateIpAddresses(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// UnassignPrivateIpAddressesWithCallback invokes the ecs.UnassignPrivateIpAddresses API asynchronously
+// api document: https://help.aliyun.com/api/ecs/unassignprivateipaddresses.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) UnassignPrivateIpAddressesWithCallback(request *UnassignPrivateIpAddressesRequest, callback func(response *UnassignPrivateIpAddressesResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *UnassignPrivateIpAddressesResponse
+		var err error
+		defer close(result)
+		response, err = client.UnassignPrivateIpAddresses(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// UnassignPrivateIpAddressesRequest is the request struct for api UnassignPrivateIpAddresses
+type UnassignPrivateIpAddressesRequest struct {
+	*requests.RpcRequest
+}
+
+// UnassignPrivateIpAddressesResponse is the response struct for api UnassignPrivateIpAddresses
+type UnassignPrivateIpAddressesResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateUnassignPrivateIpAddressesRequest creates a request to invoke UnassignPrivateIpAddresses API
+func CreateUnassignPrivateIpAddressesRequest() (request *UnassignPrivateIpAddressesRequest) {
+	request = &UnassignPrivateIpAddressesRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ecs", "2014-05-26", "UnassignPrivateIpAddresses", "ecs", "openAPI")
+	return
+}
+
+// CreateUnassignPrivateIpAddressesResponse creates a response to parse from UnassignPrivateIpAddresses response
+func CreateUnassignPrivateIpAddressesResponse() (response *UnassignPrivateIpAddressesResponse) {
+	response = &UnassignPrivateIpAddressesResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 107 - 0
services/ess/create_notification_configuration.go

@@ -0,0 +1,107 @@
+package ess
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// CreateNotificationConfiguration invokes the ess.CreateNotificationConfiguration API synchronously
+// api document: https://help.aliyun.com/api/ess/createnotificationconfiguration.html
+func (client *Client) CreateNotificationConfiguration(request *CreateNotificationConfigurationRequest) (response *CreateNotificationConfigurationResponse, err error) {
+	response = CreateCreateNotificationConfigurationResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// CreateNotificationConfigurationWithChan invokes the ess.CreateNotificationConfiguration API asynchronously
+// api document: https://help.aliyun.com/api/ess/createnotificationconfiguration.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) CreateNotificationConfigurationWithChan(request *CreateNotificationConfigurationRequest) (<-chan *CreateNotificationConfigurationResponse, <-chan error) {
+	responseChan := make(chan *CreateNotificationConfigurationResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.CreateNotificationConfiguration(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// CreateNotificationConfigurationWithCallback invokes the ess.CreateNotificationConfiguration API asynchronously
+// api document: https://help.aliyun.com/api/ess/createnotificationconfiguration.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) CreateNotificationConfigurationWithCallback(request *CreateNotificationConfigurationRequest, callback func(response *CreateNotificationConfigurationResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *CreateNotificationConfigurationResponse
+		var err error
+		defer close(result)
+		response, err = client.CreateNotificationConfiguration(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// CreateNotificationConfigurationRequest is the request struct for api CreateNotificationConfiguration
+type CreateNotificationConfigurationRequest struct {
+	*requests.RpcRequest
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	ScalingGroupId       string           `position:"Query" name:"ScalingGroupId"`
+	NotificationArn      string           `position:"Query" name:"NotificationArn"`
+	NotificationType     *[]string        `position:"Query" name:"NotificationType"  type:"Repeated"`
+}
+
+// CreateNotificationConfigurationResponse is the response struct for api CreateNotificationConfiguration
+type CreateNotificationConfigurationResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateCreateNotificationConfigurationRequest creates a request to invoke CreateNotificationConfiguration API
+func CreateCreateNotificationConfigurationRequest() (request *CreateNotificationConfigurationRequest) {
+	request = &CreateNotificationConfigurationRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ess", "2014-08-28", "CreateNotificationConfiguration", "ess", "openAPI")
+	return
+}
+
+// CreateCreateNotificationConfigurationResponse creates a response to parse from CreateNotificationConfiguration response
+func CreateCreateNotificationConfigurationResponse() (response *CreateNotificationConfigurationResponse) {
+	response = &CreateNotificationConfigurationResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 50 - 42
services/ess/create_scaling_configuration.go

@@ -76,48 +76,56 @@ func (client *Client) CreateScalingConfigurationWithCallback(request *CreateScal
 // CreateScalingConfigurationRequest is the request struct for api CreateScalingConfiguration
 type CreateScalingConfigurationRequest struct {
 	*requests.RpcRequest
-	OwnerId                     requests.Integer `position:"Query" name:"OwnerId"`
-	ResourceOwnerAccount        string           `position:"Query" name:"ResourceOwnerAccount"`
-	ScalingGroupId              string           `position:"Query" name:"ScalingGroupId"`
-	ImageId                     string           `position:"Query" name:"ImageId"`
-	InstanceType                string           `position:"Query" name:"InstanceType"`
-	InstanceTypes               *[]string        `position:"Query" name:"InstanceTypes"  type:"Repeated"`
-	SecurityGroupId             string           `position:"Query" name:"SecurityGroupId"`
-	IoOptimized                 string           `position:"Query" name:"IoOptimized"`
-	InternetChargeType          string           `position:"Query" name:"InternetChargeType"`
-	InternetMaxBandwidthIn      requests.Integer `position:"Query" name:"InternetMaxBandwidthIn"`
-	InternetMaxBandwidthOut     requests.Integer `position:"Query" name:"InternetMaxBandwidthOut"`
-	SystemDiskCategory          string           `position:"Query" name:"SystemDisk.Category"`
-	SystemDiskSize              requests.Integer `position:"Query" name:"SystemDisk.Size"`
-	ScalingConfigurationName    string           `position:"Query" name:"ScalingConfigurationName"`
-	DataDisk1Size               requests.Integer `position:"Query" name:"DataDisk.1.Size"`
-	DataDisk2Size               requests.Integer `position:"Query" name:"DataDisk.2.Size"`
-	DataDisk3Size               requests.Integer `position:"Query" name:"DataDisk.3.Size"`
-	DataDisk4Size               requests.Integer `position:"Query" name:"DataDisk.4.Size"`
-	DataDisk1Category           string           `position:"Query" name:"DataDisk.1.Category"`
-	DataDisk2Category           string           `position:"Query" name:"DataDisk.2.Category"`
-	DataDisk3Category           string           `position:"Query" name:"DataDisk.3.Category"`
-	DataDisk4Category           string           `position:"Query" name:"DataDisk.4.Category"`
-	DataDisk1SnapshotId         string           `position:"Query" name:"DataDisk.1.SnapshotId"`
-	DataDisk2SnapshotId         string           `position:"Query" name:"DataDisk.2.SnapshotId"`
-	DataDisk3SnapshotId         string           `position:"Query" name:"DataDisk.3.SnapshotId"`
-	DataDisk4SnapshotId         string           `position:"Query" name:"DataDisk.4.SnapshotId"`
-	DataDisk1Device             string           `position:"Query" name:"DataDisk.1.Device"`
-	DataDisk2Device             string           `position:"Query" name:"DataDisk.2.Device"`
-	DataDisk3Device             string           `position:"Query" name:"DataDisk.3.Device"`
-	DataDisk4Device             string           `position:"Query" name:"DataDisk.4.Device"`
-	DataDisk1DeleteWithInstance string           `position:"Query" name:"DataDisk.1.DeleteWithInstance"`
-	DataDisk2DeleteWithInstance string           `position:"Query" name:"DataDisk.2.DeleteWithInstance"`
-	DataDisk3DeleteWithInstance string           `position:"Query" name:"DataDisk.3.DeleteWithInstance"`
-	DataDisk4DeleteWithInstance string           `position:"Query" name:"DataDisk.4.DeleteWithInstance"`
-	LoadBalancerWeight          requests.Integer `position:"Query" name:"LoadBalancerWeight"`
-	OwnerAccount                string           `position:"Query" name:"OwnerAccount"`
-	Tags                        string           `position:"Query" name:"Tags"`
-	UserData                    string           `position:"Query" name:"UserData"`
-	KeyPairName                 string           `position:"Query" name:"KeyPairName"`
-	RamRoleName                 string           `position:"Query" name:"RamRoleName"`
-	SecurityEnhancementStrategy string           `position:"Query" name:"SecurityEnhancementStrategy"`
-	InstanceName                string           `position:"Query" name:"InstanceName"`
+	OwnerId                     requests.Integer                    `position:"Query" name:"OwnerId"`
+	ResourceOwnerAccount        string                              `position:"Query" name:"ResourceOwnerAccount"`
+	ScalingGroupId              string                              `position:"Query" name:"ScalingGroupId"`
+	ImageId                     string                              `position:"Query" name:"ImageId"`
+	InstanceType                string                              `position:"Query" name:"InstanceType"`
+	InstanceTypes               *[]string                           `position:"Query" name:"InstanceTypes"  type:"Repeated"`
+	SecurityGroupId             string                              `position:"Query" name:"SecurityGroupId"`
+	IoOptimized                 string                              `position:"Query" name:"IoOptimized"`
+	InternetChargeType          string                              `position:"Query" name:"InternetChargeType"`
+	InternetMaxBandwidthIn      requests.Integer                    `position:"Query" name:"InternetMaxBandwidthIn"`
+	InternetMaxBandwidthOut     requests.Integer                    `position:"Query" name:"InternetMaxBandwidthOut"`
+	SystemDiskCategory          string                              `position:"Query" name:"SystemDisk.Category"`
+	SystemDiskSize              requests.Integer                    `position:"Query" name:"SystemDisk.Size"`
+	ScalingConfigurationName    string                              `position:"Query" name:"ScalingConfigurationName"`
+	DataDisk1Size               requests.Integer                    `position:"Query" name:"DataDisk.1.Size"`
+	DataDisk2Size               requests.Integer                    `position:"Query" name:"DataDisk.2.Size"`
+	DataDisk3Size               requests.Integer                    `position:"Query" name:"DataDisk.3.Size"`
+	DataDisk4Size               requests.Integer                    `position:"Query" name:"DataDisk.4.Size"`
+	DataDisk1Category           string                              `position:"Query" name:"DataDisk.1.Category"`
+	DataDisk2Category           string                              `position:"Query" name:"DataDisk.2.Category"`
+	DataDisk3Category           string                              `position:"Query" name:"DataDisk.3.Category"`
+	DataDisk4Category           string                              `position:"Query" name:"DataDisk.4.Category"`
+	DataDisk1SnapshotId         string                              `position:"Query" name:"DataDisk.1.SnapshotId"`
+	DataDisk2SnapshotId         string                              `position:"Query" name:"DataDisk.2.SnapshotId"`
+	DataDisk3SnapshotId         string                              `position:"Query" name:"DataDisk.3.SnapshotId"`
+	DataDisk4SnapshotId         string                              `position:"Query" name:"DataDisk.4.SnapshotId"`
+	DataDisk1Device             string                              `position:"Query" name:"DataDisk.1.Device"`
+	DataDisk2Device             string                              `position:"Query" name:"DataDisk.2.Device"`
+	DataDisk3Device             string                              `position:"Query" name:"DataDisk.3.Device"`
+	DataDisk4Device             string                              `position:"Query" name:"DataDisk.4.Device"`
+	DataDisk1DeleteWithInstance string                              `position:"Query" name:"DataDisk.1.DeleteWithInstance"`
+	DataDisk2DeleteWithInstance string                              `position:"Query" name:"DataDisk.2.DeleteWithInstance"`
+	DataDisk3DeleteWithInstance string                              `position:"Query" name:"DataDisk.3.DeleteWithInstance"`
+	DataDisk4DeleteWithInstance string                              `position:"Query" name:"DataDisk.4.DeleteWithInstance"`
+	LoadBalancerWeight          requests.Integer                    `position:"Query" name:"LoadBalancerWeight"`
+	OwnerAccount                string                              `position:"Query" name:"OwnerAccount"`
+	Tags                        string                              `position:"Query" name:"Tags"`
+	UserData                    string                              `position:"Query" name:"UserData"`
+	KeyPairName                 string                              `position:"Query" name:"KeyPairName"`
+	RamRoleName                 string                              `position:"Query" name:"RamRoleName"`
+	SecurityEnhancementStrategy string                              `position:"Query" name:"SecurityEnhancementStrategy"`
+	InstanceName                string                              `position:"Query" name:"InstanceName"`
+	SpotStrategy                string                              `position:"Query" name:"SpotStrategy"`
+	SpotPriceLimit              *[]CreateScalingConfigurationString `position:"Query" name:"SpotPriceLimit"  type:"Repeated"`
+}
+
+// CreateScalingConfigurationString is a repeated param struct in CreateScalingConfigurationRequest
+type CreateScalingConfigurationString struct {
+	InstanceType string `name:"InstanceType"`
+	PriceLimit   string `name:"PriceLimit"`
 }
 
 // CreateScalingConfigurationResponse is the response struct for api CreateScalingConfiguration

+ 106 - 0
services/ess/delete_notification_configuration.go

@@ -0,0 +1,106 @@
+package ess
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DeleteNotificationConfiguration invokes the ess.DeleteNotificationConfiguration API synchronously
+// api document: https://help.aliyun.com/api/ess/deletenotificationconfiguration.html
+func (client *Client) DeleteNotificationConfiguration(request *DeleteNotificationConfigurationRequest) (response *DeleteNotificationConfigurationResponse, err error) {
+	response = CreateDeleteNotificationConfigurationResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DeleteNotificationConfigurationWithChan invokes the ess.DeleteNotificationConfiguration API asynchronously
+// api document: https://help.aliyun.com/api/ess/deletenotificationconfiguration.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteNotificationConfigurationWithChan(request *DeleteNotificationConfigurationRequest) (<-chan *DeleteNotificationConfigurationResponse, <-chan error) {
+	responseChan := make(chan *DeleteNotificationConfigurationResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DeleteNotificationConfiguration(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DeleteNotificationConfigurationWithCallback invokes the ess.DeleteNotificationConfiguration API asynchronously
+// api document: https://help.aliyun.com/api/ess/deletenotificationconfiguration.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteNotificationConfigurationWithCallback(request *DeleteNotificationConfigurationRequest, callback func(response *DeleteNotificationConfigurationResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DeleteNotificationConfigurationResponse
+		var err error
+		defer close(result)
+		response, err = client.DeleteNotificationConfiguration(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DeleteNotificationConfigurationRequest is the request struct for api DeleteNotificationConfiguration
+type DeleteNotificationConfigurationRequest struct {
+	*requests.RpcRequest
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	ScalingGroupId       string           `position:"Query" name:"ScalingGroupId"`
+	NotificationArn      string           `position:"Query" name:"NotificationArn"`
+}
+
+// DeleteNotificationConfigurationResponse is the response struct for api DeleteNotificationConfiguration
+type DeleteNotificationConfigurationResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateDeleteNotificationConfigurationRequest creates a request to invoke DeleteNotificationConfiguration API
+func CreateDeleteNotificationConfigurationRequest() (request *DeleteNotificationConfigurationRequest) {
+	request = &DeleteNotificationConfigurationRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ess", "2014-08-28", "DeleteNotificationConfiguration", "ess", "openAPI")
+	return
+}
+
+// CreateDeleteNotificationConfigurationResponse creates a response to parse from DeleteNotificationConfiguration response
+func CreateDeleteNotificationConfigurationResponse() (response *DeleteNotificationConfigurationResponse) {
+	response = &DeleteNotificationConfigurationResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 106 - 0
services/ess/describe_notification_configurations.go

@@ -0,0 +1,106 @@
+package ess
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeNotificationConfigurations invokes the ess.DescribeNotificationConfigurations API synchronously
+// api document: https://help.aliyun.com/api/ess/describenotificationconfigurations.html
+func (client *Client) DescribeNotificationConfigurations(request *DescribeNotificationConfigurationsRequest) (response *DescribeNotificationConfigurationsResponse, err error) {
+	response = CreateDescribeNotificationConfigurationsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeNotificationConfigurationsWithChan invokes the ess.DescribeNotificationConfigurations API asynchronously
+// api document: https://help.aliyun.com/api/ess/describenotificationconfigurations.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeNotificationConfigurationsWithChan(request *DescribeNotificationConfigurationsRequest) (<-chan *DescribeNotificationConfigurationsResponse, <-chan error) {
+	responseChan := make(chan *DescribeNotificationConfigurationsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeNotificationConfigurations(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeNotificationConfigurationsWithCallback invokes the ess.DescribeNotificationConfigurations API asynchronously
+// api document: https://help.aliyun.com/api/ess/describenotificationconfigurations.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeNotificationConfigurationsWithCallback(request *DescribeNotificationConfigurationsRequest, callback func(response *DescribeNotificationConfigurationsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeNotificationConfigurationsResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeNotificationConfigurations(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeNotificationConfigurationsRequest is the request struct for api DescribeNotificationConfigurations
+type DescribeNotificationConfigurationsRequest struct {
+	*requests.RpcRequest
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	ScalingGroupId       string           `position:"Query" name:"ScalingGroupId"`
+}
+
+// DescribeNotificationConfigurationsResponse is the response struct for api DescribeNotificationConfigurations
+type DescribeNotificationConfigurationsResponse struct {
+	*responses.BaseResponse
+	RequestId                       string                          `json:"RequestId" xml:"RequestId"`
+	NotificationConfigurationModels NotificationConfigurationModels `json:"NotificationConfigurationModels" xml:"NotificationConfigurationModels"`
+}
+
+// CreateDescribeNotificationConfigurationsRequest creates a request to invoke DescribeNotificationConfigurations API
+func CreateDescribeNotificationConfigurationsRequest() (request *DescribeNotificationConfigurationsRequest) {
+	request = &DescribeNotificationConfigurationsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ess", "2014-08-28", "DescribeNotificationConfigurations", "ess", "openAPI")
+	return
+}
+
+// CreateDescribeNotificationConfigurationsResponse creates a response to parse from DescribeNotificationConfigurations response
+func CreateDescribeNotificationConfigurationsResponse() (response *DescribeNotificationConfigurationsResponse) {
+	response = &DescribeNotificationConfigurationsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 105 - 0
services/ess/describe_notification_types.go

@@ -0,0 +1,105 @@
+package ess
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeNotificationTypes invokes the ess.DescribeNotificationTypes API synchronously
+// api document: https://help.aliyun.com/api/ess/describenotificationtypes.html
+func (client *Client) DescribeNotificationTypes(request *DescribeNotificationTypesRequest) (response *DescribeNotificationTypesResponse, err error) {
+	response = CreateDescribeNotificationTypesResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeNotificationTypesWithChan invokes the ess.DescribeNotificationTypes API asynchronously
+// api document: https://help.aliyun.com/api/ess/describenotificationtypes.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeNotificationTypesWithChan(request *DescribeNotificationTypesRequest) (<-chan *DescribeNotificationTypesResponse, <-chan error) {
+	responseChan := make(chan *DescribeNotificationTypesResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeNotificationTypes(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeNotificationTypesWithCallback invokes the ess.DescribeNotificationTypes API asynchronously
+// api document: https://help.aliyun.com/api/ess/describenotificationtypes.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeNotificationTypesWithCallback(request *DescribeNotificationTypesRequest, callback func(response *DescribeNotificationTypesResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeNotificationTypesResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeNotificationTypes(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeNotificationTypesRequest is the request struct for api DescribeNotificationTypes
+type DescribeNotificationTypesRequest struct {
+	*requests.RpcRequest
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+}
+
+// DescribeNotificationTypesResponse is the response struct for api DescribeNotificationTypes
+type DescribeNotificationTypesResponse struct {
+	*responses.BaseResponse
+	RequestId         string                                       `json:"RequestId" xml:"RequestId"`
+	NotificationTypes NotificationTypesInDescribeNotificationTypes `json:"NotificationTypes" xml:"NotificationTypes"`
+}
+
+// CreateDescribeNotificationTypesRequest creates a request to invoke DescribeNotificationTypes API
+func CreateDescribeNotificationTypesRequest() (request *DescribeNotificationTypesRequest) {
+	request = &DescribeNotificationTypesRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ess", "2014-08-28", "DescribeNotificationTypes", "ess", "openAPI")
+	return
+}
+
+// CreateDescribeNotificationTypesResponse creates a response to parse from DescribeNotificationTypes response
+func CreateDescribeNotificationTypesResponse() (response *DescribeNotificationTypesResponse) {
+	response = &DescribeNotificationTypesResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 106 - 0
services/ess/enter_standby.go

@@ -0,0 +1,106 @@
+package ess
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// EnterStandby invokes the ess.EnterStandby API synchronously
+// api document: https://help.aliyun.com/api/ess/enterstandby.html
+func (client *Client) EnterStandby(request *EnterStandbyRequest) (response *EnterStandbyResponse, err error) {
+	response = CreateEnterStandbyResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// EnterStandbyWithChan invokes the ess.EnterStandby API asynchronously
+// api document: https://help.aliyun.com/api/ess/enterstandby.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) EnterStandbyWithChan(request *EnterStandbyRequest) (<-chan *EnterStandbyResponse, <-chan error) {
+	responseChan := make(chan *EnterStandbyResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.EnterStandby(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// EnterStandbyWithCallback invokes the ess.EnterStandby API asynchronously
+// api document: https://help.aliyun.com/api/ess/enterstandby.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) EnterStandbyWithCallback(request *EnterStandbyRequest, callback func(response *EnterStandbyResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *EnterStandbyResponse
+		var err error
+		defer close(result)
+		response, err = client.EnterStandby(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// EnterStandbyRequest is the request struct for api EnterStandby
+type EnterStandbyRequest struct {
+	*requests.RpcRequest
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	ScalingGroupId       string           `position:"Query" name:"ScalingGroupId"`
+	InstanceId           *[]string        `position:"Query" name:"InstanceId"  type:"Repeated"`
+}
+
+// EnterStandbyResponse is the response struct for api EnterStandby
+type EnterStandbyResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateEnterStandbyRequest creates a request to invoke EnterStandby API
+func CreateEnterStandbyRequest() (request *EnterStandbyRequest) {
+	request = &EnterStandbyRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ess", "2014-08-28", "EnterStandby", "ess", "openAPI")
+	return
+}
+
+// CreateEnterStandbyResponse creates a response to parse from EnterStandby response
+func CreateEnterStandbyResponse() (response *EnterStandbyResponse) {
+	response = &EnterStandbyResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 106 - 0
services/ess/exit_standby.go

@@ -0,0 +1,106 @@
+package ess
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// ExitStandby invokes the ess.ExitStandby API synchronously
+// api document: https://help.aliyun.com/api/ess/exitstandby.html
+func (client *Client) ExitStandby(request *ExitStandbyRequest) (response *ExitStandbyResponse, err error) {
+	response = CreateExitStandbyResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// ExitStandbyWithChan invokes the ess.ExitStandby API asynchronously
+// api document: https://help.aliyun.com/api/ess/exitstandby.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ExitStandbyWithChan(request *ExitStandbyRequest) (<-chan *ExitStandbyResponse, <-chan error) {
+	responseChan := make(chan *ExitStandbyResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.ExitStandby(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// ExitStandbyWithCallback invokes the ess.ExitStandby API asynchronously
+// api document: https://help.aliyun.com/api/ess/exitstandby.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ExitStandbyWithCallback(request *ExitStandbyRequest, callback func(response *ExitStandbyResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *ExitStandbyResponse
+		var err error
+		defer close(result)
+		response, err = client.ExitStandby(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// ExitStandbyRequest is the request struct for api ExitStandby
+type ExitStandbyRequest struct {
+	*requests.RpcRequest
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	ScalingGroupId       string           `position:"Query" name:"ScalingGroupId"`
+	InstanceId           *[]string        `position:"Query" name:"InstanceId"  type:"Repeated"`
+}
+
+// ExitStandbyResponse is the response struct for api ExitStandby
+type ExitStandbyResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateExitStandbyRequest creates a request to invoke ExitStandby API
+func CreateExitStandbyRequest() (request *ExitStandbyRequest) {
+	request = &ExitStandbyRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ess", "2014-08-28", "ExitStandby", "ess", "openAPI")
+	return
+}
+
+// CreateExitStandbyResponse creates a response to parse from ExitStandby response
+func CreateExitStandbyResponse() (response *ExitStandbyResponse) {
+	response = &ExitStandbyResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 107 - 0
services/ess/modify_notification_configuration.go

@@ -0,0 +1,107 @@
+package ess
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// ModifyNotificationConfiguration invokes the ess.ModifyNotificationConfiguration API synchronously
+// api document: https://help.aliyun.com/api/ess/modifynotificationconfiguration.html
+func (client *Client) ModifyNotificationConfiguration(request *ModifyNotificationConfigurationRequest) (response *ModifyNotificationConfigurationResponse, err error) {
+	response = CreateModifyNotificationConfigurationResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// ModifyNotificationConfigurationWithChan invokes the ess.ModifyNotificationConfiguration API asynchronously
+// api document: https://help.aliyun.com/api/ess/modifynotificationconfiguration.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifyNotificationConfigurationWithChan(request *ModifyNotificationConfigurationRequest) (<-chan *ModifyNotificationConfigurationResponse, <-chan error) {
+	responseChan := make(chan *ModifyNotificationConfigurationResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.ModifyNotificationConfiguration(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// ModifyNotificationConfigurationWithCallback invokes the ess.ModifyNotificationConfiguration API asynchronously
+// api document: https://help.aliyun.com/api/ess/modifynotificationconfiguration.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifyNotificationConfigurationWithCallback(request *ModifyNotificationConfigurationRequest, callback func(response *ModifyNotificationConfigurationResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *ModifyNotificationConfigurationResponse
+		var err error
+		defer close(result)
+		response, err = client.ModifyNotificationConfiguration(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// ModifyNotificationConfigurationRequest is the request struct for api ModifyNotificationConfiguration
+type ModifyNotificationConfigurationRequest struct {
+	*requests.RpcRequest
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	ScalingGroupId       string           `position:"Query" name:"ScalingGroupId"`
+	NotificationArn      string           `position:"Query" name:"NotificationArn"`
+	NotificationType     *[]string        `position:"Query" name:"NotificationType"  type:"Repeated"`
+}
+
+// ModifyNotificationConfigurationResponse is the response struct for api ModifyNotificationConfiguration
+type ModifyNotificationConfigurationResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateModifyNotificationConfigurationRequest creates a request to invoke ModifyNotificationConfiguration API
+func CreateModifyNotificationConfigurationRequest() (request *ModifyNotificationConfigurationRequest) {
+	request = &ModifyNotificationConfigurationRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ess", "2014-08-28", "ModifyNotificationConfiguration", "ess", "openAPI")
+	return
+}
+
+// CreateModifyNotificationConfigurationResponse creates a response to parse from ModifyNotificationConfiguration response
+func CreateModifyNotificationConfigurationResponse() (response *ModifyNotificationConfigurationResponse) {
+	response = &ModifyNotificationConfigurationResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 23 - 0
services/ess/struct_notification_configuration_model.go

@@ -0,0 +1,23 @@
+package ess
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// NotificationConfigurationModel is a nested struct in ess response
+type NotificationConfigurationModel struct {
+	ScalingGroupId    string                                                `json:"ScalingGroupId" xml:"ScalingGroupId"`
+	NotificationArn   string                                                `json:"NotificationArn" xml:"NotificationArn"`
+	NotificationTypes NotificationTypesInDescribeNotificationConfigurations `json:"NotificationTypes" xml:"NotificationTypes"`
+}

+ 21 - 0
services/ess/struct_notification_configuration_models.go

@@ -0,0 +1,21 @@
+package ess
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// NotificationConfigurationModels is a nested struct in ess response
+type NotificationConfigurationModels struct {
+	NotificationConfigurationModel []NotificationConfigurationModel `json:"NotificationConfigurationModel" xml:"NotificationConfigurationModel"`
+}

+ 21 - 0
services/ess/struct_notification_types_in_describe_notification_configurations.go

@@ -0,0 +1,21 @@
+package ess
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// NotificationTypesInDescribeNotificationConfigurations is a nested struct in ess response
+type NotificationTypesInDescribeNotificationConfigurations struct {
+	NotificationType []string `json:"NotificationType" xml:"NotificationType"`
+}

+ 21 - 0
services/ess/struct_notification_types_in_describe_notification_types.go

@@ -0,0 +1,21 @@
+package ess
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// NotificationTypesInDescribeNotificationTypes is a nested struct in ess response
+type NotificationTypesInDescribeNotificationTypes struct {
+	NotificationType []string `json:"NotificationType" xml:"NotificationType"`
+}

+ 27 - 25
services/ess/struct_scaling_configuration.go

@@ -17,29 +17,31 @@ package ess
 
 // ScalingConfiguration is a nested struct in ess response
 type ScalingConfiguration struct {
-	ScalingConfigurationId      string        `json:"ScalingConfigurationId" xml:"ScalingConfigurationId"`
-	ScalingConfigurationName    string        `json:"ScalingConfigurationName" xml:"ScalingConfigurationName"`
-	ScalingGroupId              string        `json:"ScalingGroupId" xml:"ScalingGroupId"`
-	InstanceName                string        `json:"InstanceName" xml:"InstanceName"`
-	ImageId                     string        `json:"ImageId" xml:"ImageId"`
-	InstanceType                string        `json:"InstanceType" xml:"InstanceType"`
-	InstanceGeneration          string        `json:"InstanceGeneration" xml:"InstanceGeneration"`
-	SecurityGroupId             string        `json:"SecurityGroupId" xml:"SecurityGroupId"`
-	IoOptimized                 string        `json:"IoOptimized" xml:"IoOptimized"`
-	InternetChargeType          string        `json:"InternetChargeType" xml:"InternetChargeType"`
-	InternetMaxBandwidthIn      int           `json:"InternetMaxBandwidthIn" xml:"InternetMaxBandwidthIn"`
-	InternetMaxBandwidthOut     int           `json:"InternetMaxBandwidthOut" xml:"InternetMaxBandwidthOut"`
-	SystemDiskCategory          string        `json:"SystemDiskCategory" xml:"SystemDiskCategory"`
-	SystemDiskSize              int           `json:"SystemDiskSize" xml:"SystemDiskSize"`
-	LifecycleState              string        `json:"LifecycleState" xml:"LifecycleState"`
-	CreationTime                string        `json:"CreationTime" xml:"CreationTime"`
-	LoadBalancerWeight          int           `json:"LoadBalancerWeight" xml:"LoadBalancerWeight"`
-	UserData                    string        `json:"UserData" xml:"UserData"`
-	KeyPairName                 string        `json:"KeyPairName" xml:"KeyPairName"`
-	RamRoleName                 string        `json:"RamRoleName" xml:"RamRoleName"`
-	DeploymentSetId             string        `json:"DeploymentSetId" xml:"DeploymentSetId"`
-	SecurityEnhancementStrategy string        `json:"SecurityEnhancementStrategy" xml:"SecurityEnhancementStrategy"`
-	InstanceTypes               InstanceTypes `json:"InstanceTypes" xml:"InstanceTypes"`
-	DataDisks                   DataDisks     `json:"DataDisks" xml:"DataDisks"`
-	Tags                        Tags          `json:"Tags" xml:"Tags"`
+	ScalingConfigurationId      string         `json:"ScalingConfigurationId" xml:"ScalingConfigurationId"`
+	ScalingConfigurationName    string         `json:"ScalingConfigurationName" xml:"ScalingConfigurationName"`
+	ScalingGroupId              string         `json:"ScalingGroupId" xml:"ScalingGroupId"`
+	InstanceName                string         `json:"InstanceName" xml:"InstanceName"`
+	ImageId                     string         `json:"ImageId" xml:"ImageId"`
+	InstanceType                string         `json:"InstanceType" xml:"InstanceType"`
+	InstanceGeneration          string         `json:"InstanceGeneration" xml:"InstanceGeneration"`
+	SecurityGroupId             string         `json:"SecurityGroupId" xml:"SecurityGroupId"`
+	IoOptimized                 string         `json:"IoOptimized" xml:"IoOptimized"`
+	InternetChargeType          string         `json:"InternetChargeType" xml:"InternetChargeType"`
+	InternetMaxBandwidthIn      int            `json:"InternetMaxBandwidthIn" xml:"InternetMaxBandwidthIn"`
+	InternetMaxBandwidthOut     int            `json:"InternetMaxBandwidthOut" xml:"InternetMaxBandwidthOut"`
+	SystemDiskCategory          string         `json:"SystemDiskCategory" xml:"SystemDiskCategory"`
+	SystemDiskSize              int            `json:"SystemDiskSize" xml:"SystemDiskSize"`
+	LifecycleState              string         `json:"LifecycleState" xml:"LifecycleState"`
+	CreationTime                string         `json:"CreationTime" xml:"CreationTime"`
+	LoadBalancerWeight          int            `json:"LoadBalancerWeight" xml:"LoadBalancerWeight"`
+	UserData                    string         `json:"UserData" xml:"UserData"`
+	KeyPairName                 string         `json:"KeyPairName" xml:"KeyPairName"`
+	RamRoleName                 string         `json:"RamRoleName" xml:"RamRoleName"`
+	DeploymentSetId             string         `json:"DeploymentSetId" xml:"DeploymentSetId"`
+	SecurityEnhancementStrategy string         `json:"SecurityEnhancementStrategy" xml:"SecurityEnhancementStrategy"`
+	SpotStrategy                string         `json:"SpotStrategy" xml:"SpotStrategy"`
+	InstanceTypes               InstanceTypes  `json:"InstanceTypes" xml:"InstanceTypes"`
+	DataDisks                   DataDisks      `json:"DataDisks" xml:"DataDisks"`
+	Tags                        Tags           `json:"Tags" xml:"Tags"`
+	SpotPriceLimit              SpotPriceLimit `json:"SpotPriceLimit" xml:"SpotPriceLimit"`
 }

+ 1 - 0
services/ess/struct_scaling_group.go

@@ -23,6 +23,7 @@ type ScalingGroup struct {
 	RemovingCapacity             int             `json:"RemovingCapacity" xml:"RemovingCapacity"`
 	ScalingGroupName             string          `json:"ScalingGroupName" xml:"ScalingGroupName"`
 	ActiveCapacity               int             `json:"ActiveCapacity" xml:"ActiveCapacity"`
+	StandbyCapacity              int             `json:"StandbyCapacity" xml:"StandbyCapacity"`
 	ActiveScalingConfigurationId string          `json:"ActiveScalingConfigurationId" xml:"ActiveScalingConfigurationId"`
 	ScalingGroupId               string          `json:"ScalingGroupId" xml:"ScalingGroupId"`
 	RegionId                     string          `json:"RegionId" xml:"RegionId"`

+ 21 - 0
services/ess/struct_spot_price_limit.go

@@ -0,0 +1,21 @@
+package ess
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// SpotPriceLimit is a nested struct in ess response
+type SpotPriceLimit struct {
+	SpotPriceModel []SpotPriceModel `json:"SpotPriceModel" xml:"SpotPriceModel"`
+}

+ 22 - 0
services/ess/struct_spot_price_model.go

@@ -0,0 +1,22 @@
+package ess
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// SpotPriceModel is a nested struct in ess response
+type SpotPriceModel struct {
+	InstanceType string  `json:"InstanceType" xml:"InstanceType"`
+	PriceLimit   float64 `json:"PriceLimit" xml:"PriceLimit"`
+}