使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何对由 CloudFormation 宏引起的错误进行故障排除?

1 分钟阅读
0

我想解决由 AWS CloudFormation 宏引起的错误。

解决方法

在 CloudFormation 堆栈中使用自定义宏时,您可能会看到以下常见错误:

错误: “Received malformed response from transform <ACCOUNT>:<Macro-Name.”(从转换 :<Macro-Name 收到的响应格式不正确。)

此错误消息出现在 CloudFormation 堆栈事件中或变更集上。

通常,CloudFormation 期望运行宏的底层 AWS Lambda 函数返回以下 JSON 格式的响应:

{
 "requestId" : "$REQUEST_ID",
 "status" : "$STATUS",
 "fragment" : { ... }
 "errorMessage": "optional error message for failures"
}

当 CloudFormation 模板无法接受从 AWS Lambda 函数接收的值或响应时,就会发生错误。

要解决此错误,请查看您的 Amazon CloudWatch Logs,以了解具有触发响应的宏的底层 Lambda 函数。

请按照以下步骤解决错误:

  1. 登录 CloudFormation 控制台
  2. 选择创建或更新失败的堆栈。
  3. 选择该堆栈的 Template(模板)选项卡。
  4. 在模板中找到宏的名称。模板的 Transform(转换)部分中引用了该名称。或者,在 Fn::Transform 函数中找到该名称。
  5. 找到部署该宏资源的堆栈。查看 AWS::CloudFormation::Macro
    **注意:**宏资源的名称是其物理 ID。通过选择每个堆栈的 Resources(资源)选项卡,检查堆栈部署的资源及其物理 ID。
  6. 选择该堆栈的 Template(模板)选项卡。然后,在堆栈模板中 AWS::CloudFormation::Macro 资源的 FunctionName 属性中找到 Lambda 函数名称。
  7. 导航到 Lambda 控制台。选择您之前找到的函数名称。
  8. 选择 Monitor(监测仪)。然后,选择 View logs in CloudWatch(在 CloudWatch 中查看日志)。
  9. 查看最新的 CloudWatch 日志流中是否有任何错误消息。
    -或-
    如前所示,检查 Lambda 函数发送的最终响应是否采用正确的 JSON 格式。

错误: “Failed to execute transform <ACCOUNT>:<Macro-Name>”(无法执行转换:)

此错误表明 AWS Identity and Access Management (IAM) 用户、角色或服务角色未调用 Lambda 函数。出现此错误是因为 IAM 实体没有所需的权限。

如果用户拥有底层 Lambda 函数的 lambda:InvokeFunction 权限,则 AWS CloudFormation 会成功运行模板中包含的宏。该权限必须存在于执行堆栈操作的 IAM 身份上。有关 Lambda 函数相关权限错误的详细信息,请参阅如何对 Lambda 函数故障进行故障排除?

错误: “No transform named <ACCOUNT>:<Macro-Name> found.”(未命名变换:已找到。)

此错误表示模板的 Transform(转换)部分或 Fn::Transform 函数中的宏不存在于部署堆栈的账户和区域中。检查账户和区域中引用的宏的名称。然后,使用相同的名称来引用 CloudFormation 模板中的宏。

相关信息

AWS CloudFormation 宏函数接口

创建 AWS CloudFormation 宏定义时的注意事项

AWS CloudFormation 宏账户范围和权限

AWS 官方
AWS 官方已更新 9 个月前