【问题标题】:cloudformation times out without initiating custom resourcecloudformation 超时而不启动自定义资源
【发布时间】:2018-06-15 18:06:08
【问题描述】:

我有一个简单的模板测试与 lambda 的通信,称为自定义资源。比如:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Resources": {
    "test": {
      "Type": "Custom::test",
      "Properties": {
        "ServiceToken": "arn:aws:lambda:xxxxx:mylambda",
        "Input": "some input"
      }
    }
  },
  "Outputs": {
    "debug": {
      "Description": "debug ami id",
      "Value": { "Fn::GetAtt": [ "test", "output" ]}
    }
  }
}

问题是,这个 CFT 有时工作正常,有时在 CREATE_IN_PROGRESS 处超时而没有达到“资源创建启动”阶段(因此没有实际启动 lambda)。有什么办法可以降低失败率?现在已经接近 50% :(

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudformation


    【解决方案1】:

    这可能与实际的 Lambda 代码有关。实现适当的异常捕获机制很重要。如果发生故障并且它没有将故障信号发送回 CloudFormation,堆栈将永远等待(或直到超时)。

    值得注意的是,在过去 3 年中,我一直在广泛使用 Custom Resources,我从来没有遇到过 Lambda 没有启动(至少在我使用的地区:us-east-1ca-central-1us-west-2)。

    【讨论】:

    • 但它是具有相同输入的相同 lambda。在 CF 收到“资源创建启动”事件之前,我在 CloudWatch Logs 中什么也看不到。如果 lambda 过早退出,我至少会在日志中看到“START”条目,对吧?
    • 它是在 VPC 内启动的 Lambda 吗?我听说您可能会遇到 ENI 耗尽或所选子网没有通往 Internet 的路由等问题。
    • 不,它没有在 VPC 中运行。
    【解决方案2】:

    好的,正如 Laurent 建议的那样,我的 lambda 函数有问题。有一种情况,它在没有将结果保存到 S3 的情况下退出(为什么 h* cloudformation 不能只读取 lambda 输出?)。并且“资源创建已启动”似乎是数据被保存到 S3 的指标,而不是运行 lambda。我更正了退出条件,增加了超时时间,这个功能就像一个魅力。

    您问的丢失的日志条目怎么办?好吧,这只是我的错误。由于 CloudWatch 不允许将日志过滤器设置为将来或动态“现在”,因此每次尝试后我都需要单击过滤器并将其更改为显示最新条目(aws 可以改善用户体验的另一个点)。我错过了那个细节,cloudwatch 根本没有向我显示最新的日志(我傻了!对不起)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-02
      • 2018-03-10
      • 2018-03-02
      • 2020-10-09
      • 2021-04-06
      • 2023-04-11
      • 2021-03-09
      • 2021-05-11
      相关资源
      最近更新 更多