更新 - AWS CloudFormation

更新

当模板开发者更改模板中某个自定义资源的属性并更新堆栈时,CloudFormation 会向自定义资源提供者发送一条将 RequestType 设置为 Update 的请求。这意味着自定义资源代码无需检测资源中的更改,因为在请求类型为 Update 时,代码会知道其属性已经更改。

有关自定义资源及其工作原理的介绍,请参阅使用自定义资源创建自定义预置逻辑

请求

更新请求包含以下字段:

RequestType

Update.

RequestId

请求的唯一 ID。

ResponseURL

响应 URL 标识一个预签名 S3 桶,该桶接收从自定义资源提供商到 AWS CloudFormation 的响应。

ResourceType

CloudFormation 模板中模板开发人员选择的自定义资源的资源类型。自定义资源类型名称的长度最多为 60 个字符,并且可包含字母数字字符和以下字符:_@-。更新期间不能更改类型。

LogicalResourceId

AWS CloudFormation 模板中模板开发人员选择的自定义资源的名称(逻辑 ID)。

StackId

标识包含自定义资源的堆栈的 Amazon 资源名称(ARN)。

PhysicalResourceId

custom resource provider 定义的必需物理 ID,该 ID 对于该提供程序是唯一的。

PhysicalResourceId 返回的值可以更改自定义资源更新操作。如果返回的值相同,则将其视为正常更新。如返回的值不同,则 AWS CloudFormation 将该更新视为替换,并向旧资源发送删除请求。有关更多信息,请参阅 AWS::CloudFormation::CustomResource

ResourceProperties

模板开发人员在更新后的 CloudFormation 模板中声明的新资源属性值。

OldResourceProperties

模板开发人员之前在 CloudFormation 模板中声明的资源属性值。

示例

{ "RequestType" : "Update", "RequestId" : "unique id for this update request", "ResponseURL" : "pre-signed-url-for-update-response", "ResourceType" : "Custom::MyCustomResourceType", "LogicalResourceId" : "name of resource in template", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "PhysicalResourceId" : "custom resource provider-defined physical id", "ResourceProperties" : { "key1" : "new-string", "key2" : [ "new-list" ], "key3" : { "key4" : "new-map" } }, "OldResourceProperties" : { "key1" : "string", "key2" : [ "list" ], "key3" : { "key4" : "map" } } }

响应

成功

如果自定义资源提供商可以成功更新资源,CloudFormation 需要将响应中的状态设置为 SUCCESS

Status

必须是 SUCCESS

RequestId

请求的唯一 ID。应从该请求逐字复制此响应值。

LogicalResourceId

AWS CloudFormation 模板中模板开发人员选择的自定义资源的名称(逻辑 ID)。应从该请求逐字复制此响应值。

StackId

标识包含自定义资源的堆栈的 Amazon 资源名称(ARN)。应从该请求逐字复制此响应值。

PhysicalResourceId

该值应该为自定义资源供应商的唯一标识符,并且最大为 1KB。该值必须为非空字符串,并且对于同一资源的所有响应都必须相同。

PhysicalResourceId 返回的值可以更改自定义资源更新操作。如果返回的值相同,则将其视为正常更新。如返回的值不同,则 AWS CloudFormation 将该更新视为替换,并向旧资源发送删除请求。有关更多信息,请参阅 AWS::CloudFormation::CustomResource

NoEcho

可选。指示在使用 Fn::GetAtt 函数检索时是否遮蔽自定义资源的输出。如果设置为 true,则除模板 Metadata 部分中存储的值外,所有返回值都将用星号(*****)遮蔽。AWS CloudFormation 不会转换、修改或编辑您在 Metadata 部分中包含的任何信息。默认值为 false

有关使用 NoEcho 遮蔽敏感信息的更多信息,请参阅 请勿将凭证嵌入您的模板 最佳实践。

Data

可选。自定义资源提供商定义的名称值对,随响应一起发送。您可以使用 Fn::GetAtt 在模板中按名称访问此处提供的值。

重要

如果名称值对包含敏感信息,应使用 NoEcho 字段遮蔽自定义资源的输出。否则,这些值通过显示属性值的 API(例如 DescribeStackEvents)可见。

示例

{ "Status" : "SUCCESS", "RequestId" : "unique id for this update request (copied from request)", "LogicalResourceId" : "name of resource in template (copied from request)", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10 (copied from request)", "PhysicalResourceId" : "custom resource provider-defined physical id", "Data" : { "keyThatCanBeUsedInGetAtt1" : "data for key 1", "keyThatCanBeUsedInGetAtt2" : "data for key 2" } }

失败

如果无法使用新属性集更新资源,则 CloudFormation 需要将响应中的状态设置为 FAILED,并在响应中包含失败原因。

Status

必须是 FAILED

Reason

描述失败响应的原因。

RequestId

请求的唯一 ID。应从该请求逐字复制此响应值。

LogicalResourceId

AWS CloudFormation 模板中模板开发人员选择的自定义资源的名称(逻辑 ID)。应从该请求逐字复制此响应值。

StackId

标识包含自定义资源的堆栈的 Amazon 资源名称(ARN)。应从该请求逐字复制此响应值。

PhysicalResourceId

该值应该为自定义资源供应商的唯一标识符,并且最大为 1KB。该值必须为非空字符串,并且对于同一资源的所有响应都必须相同。

PhysicalResourceId 返回的值可以更改自定义资源更新操作。如果返回的值相同,则将其视为正常更新。如返回的值不同,则 AWS CloudFormation 将该更新视为替换,并向旧资源发送删除请求。有关更多信息,请参阅 AWS::CloudFormation::CustomResource

示例

{ "Status" : "FAILED", "Reason" : "Required failure reason string", "RequestId" : "unique id for this update request (copied from request)", "LogicalResourceId" : "name of resource in template (copied from request)", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10 (copied from request)", "PhysicalResourceId" : "custom resource provider-defined physical id" }