两天多来,我一直在尝试使用无服务器框架部署 CloudFormation 堆栈。问题是,作为堆栈的一部分,我有一个 RDS 集群以及一个自定义资源,它依赖于 Lambda 函数(用 Python 编写)来初始化一些数据库表。
serverless.yml 文件中此自定义资源的详细信息如下:
rdsMigration:
Type: Custom::DatabaseMigration
DependsOn: rdsCluster
Properties:
ServiceToken: !GetAtt MigrateDatabaseLambdaFunction.Arn
Version: 1.0
使用 部署时sls deploy
,集群和 lambda 函数已正确创建,但该过程卡在创建rdsMigration
资源上。
在 Lambda 代码中,我一直小心翼翼地在所有可能的情况下生成响应,包括异常。然而,这似乎不是问题。
显然,该函数没有被调用......有点,因为即使图表看起来也很奇怪:
您可以看到没有调用,但是大约下午 5:15,“错误计数和成功率”中有一个红点,这是开始创建资源的时间。此外,没有绿点,您可以在图例中看到警告,该警告声称“由于非数字值(NaN、-Infinite、+Infinite)而删除了一个或多个数据点”。这怎么可能?我认为这不是标准行为,因为其他 Lambda 函数(必须使用 API Gateway 端点调用)不会显示这个奇怪的图表。
此外,CloudWatch 中没有日志流。它完全是空的,好像从未调用过该函数(似乎是这种情况,除了在资源创建时出现的奇怪的“红点”)。
最后,如果我使用“AWS CloudFormation 创建请求”模板运行测试用例,该函数会正常运行,它会创建我期望用于数据库的初始表(并非总是如此,但这是另一回事)并返回响应。
你知道这里发生了什么吗?最糟糕的是,我需要在两次测试之间等待两个小时,因为 CFN 堆栈在创建和销毁步骤期间会卡住,直到发生超时。
谢谢!