Corrects a template to eliminate stack drift.

Limits: You can eliminate only drift on stacks that have drifted. You must call the DetectStackDrift operation to perform drift detection on a stack, call the GetStackDriftDetectionStatus operation to query the drift status of the stack to make sure that the stack has drifted, and then call the UpdateStackTemplateByResources operation to eliminate drift.

In this topic, drift is eliminated for a stack whose ID is 4a6c9851-3b0f-4f5f-b4ca-a14bf691****. The stack is deployed in the China (Hangzhou) region.


OpenAPI Explorer automatically calculates the signature value. For your convenience, we recommend that you call this operation in OpenAPI Explorer. OpenAPI Explorer dynamically generates the sample code of the operation for different SDKs.

Request parameters

Parameter Type Required Example Description
Action String Yes UpdateStackTemplateByResources

The operation that you want to perform. Set the value to UpdateStackTemplateByResources.

StackId String Yes 4a6c9851-3b0f-4f5f-b4ca-a14bf691****

The ID of the stack.

DryRun Boolean No false

Specifies whether to only preview the corrected template in this request. Default value: false. Valid values:

  • true: returns the content of the corrected template and does not correct the template. After Resource Orchestration Service (ROS) compares the corrected template with the original template, ROS determines whether to execute the correction.
  • false: corrects the template to eliminate drift.
Note We recommend that you set the DryRun parameter to true to preview the corrected template. If the template content meets expectations, set the DryRun parameter to false to execute the correction.
RegionId String Yes cn-hangzhou

The region ID of the stack. You can call the DescribeRegions operation to query the most recent region list.

ClientToken String No 123e4567-e89b-12d3-a456-42665544****

The client token that is used to ensure the idempotence of the request. You can use the client to generate the value, but you must make sure that it is unique among different requests.

The token can be up to 64 characters in length and can contain letters, digits, hyphens (-), and underscores (_).

For more information, see How to ensure idempotence.

TemplateFormat String No JSON

The format of the returned template. Default value: JSON. Valid values:

  • JSON
  • YAML
LogicalResourceId.N String No WebServer

The logical ID of resource N, which is used to filter resources. Template correction takes effect only for resources in the list. By default, all resources that have drifted are corrected.

If the list of corrected resources contains resources in the DELETED state, ROS may adjust the resources that are not in the list but reference the deleted resources in the list to ensure the correctness of the new template.

For more information about common request parameters, see Common parameters.

Response parameters

Parameter Type Example Description
RequestId String B288A0BE-D927-4888-B0F7-B35EF84B6E6F

The ID of the request.

NewTemplateBody String {\"ROSTemplateFormatVersion\": \"2015-09-01\", \"Resources\": {\"Vpc\": {\"Type\": \"ALIYUN::ECS::VPC\", \"Properties\": {\"VpcName\": \"test\", \"CidrBlock\": \"\", \"Description\": \"test2\"}}}, \"Outputs\": {\"VpcId\": {\"Value\": {\"Fn::GetAtt\": [\"Vpc\", \"VpcId\"]}}}}

The template content after correction.

OldTemplateBody String {\"ROSTemplateFormatVersion\": \"2015-09-01\", \"Resources\": {\"Vpc\": {\"Type\": \"ALIYUN::ECS::VPC\", \"Properties\": {\"VpcName\": \"test\", \"CidrBlock\": \"\", \"Description\": \"test1\"}}}, \"Outputs\": {\"VpcId\": {\"Value\": {\"Fn::GetAtt\": [\"Vpc\", \"VpcId\"]}}}}

The template content before correction.


Sample requests

&<Common request parameters>

Sample success responses

XML format

HTTP/1.1 200 OK

    <NewTemplateBody>{"ROSTemplateFormatVersion": "2015-09-01", "Resources": {"Vpc": {"Type": "ALIYUN::ECS::VPC", "Properties": {"VpcName": "test", "CidrBlock": "", "Description": "test2"}}}, "Outputs": {"VpcId": {"Value": {"Fn::GetAtt": ["Vpc", "VpcId"]}}}}</NewTemplateBody>
    <OldTemplateBody>{"ROSTemplateFormatVersion": "2015-09-01", "Resources": {"Vpc": {"Type": "ALIYUN::ECS::VPC", "Properties": {"VpcName": "test", "CidrBlock": "", "Description": "test1"}}}, "Outputs": {"VpcId": {"Value": {"Fn::GetAtt": ["Vpc", "VpcId"]}}}}</OldTemplateBody>

JSON format

HTTP/1.1 200 OK

  "RequestId" : "B288A0BE-D927-4888-B0F7-B35EF84B6E6F",
  "NewTemplateBody" : "{\"ROSTemplateFormatVersion\": \"2015-09-01\", \"Resources\": {\"Vpc\": {\"Type\": \"ALIYUN::ECS::VPC\", \"Properties\": {\"VpcName\": \"test\", \"CidrBlock\": \"\", \"Description\": \"test2\"}}}, \"Outputs\": {\"VpcId\": {\"Value\": {\"Fn::GetAtt\": [\"Vpc\", \"VpcId\"]}}}}",
  "OldTemplateBody" : "{\"ROSTemplateFormatVersion\": \"2015-09-01\", \"Resources\": {\"Vpc\": {\"Type\": \"ALIYUN::ECS::VPC\", \"Properties\": {\"VpcName\": \"test\", \"CidrBlock\": \"\", \"Description\": \"test1\"}}}, \"Outputs\": {\"VpcId\": {\"Value\": {\"Fn::GetAtt\": [\"Vpc\", \"VpcId\"]}}}}"

Error codes

For a list of error codes, visit the API Error Center.

HTTP status code

Error code

Error message




There is no complete drift detection for stack ({ID}).

The error message returned because no drift detection has been completed on the stack. ID indicates the stack ID.



This is not need to correct stack drifts, stack ({ID}) is already in sync.

The error message returned because no drift exists and the template correction is not needed. ID indicates the stack ID.




The error message returned because the stack cannot be corrected. reason indicates the specific reason.



The Stack ({name}) could not be found.

The error message returned because the specified stack does not exist. name indicates the name or ID of the stack.



The Resource ({name}) could not be found in Stack {stack}.

The error message returned because the specified resource does not exist in the specified stack. name indicates the resource name, and stack indicates the stack name or ID.