如何调试由CircleCI精心策划的无服务器生成的CloudFormation模板

问题描述 投票:3回答:1

上下文

我觉得我需要在这里提供很多背景信息来理解问题的全部范围,因此,如果这太长时间了或者最终提供了太多信息,我要提前道歉,我只想尽量避免后续问题和澄清要求。我有一个技术交接的项目。它曾经在其他AWS账户中的不同所有者下进行生产。我试图在我控制的AWS帐户中重新启动它,而其中一个软件包给我带来了一些问题。

它使用Serverless来提供几个S3存储桶及其访问策略,几个IAM角色和许多ApiGateway方法。该软件包依赖nested stacks来获得200个资源限制,如here所述。

最后,CircleCI连接的IAM用户已附加AdministratorAccess策略。

问题

在构建的此步骤中,我不断从CircleCI收到失败消息

node_modules/.bin/serverless deploy --verbose --stage develop --region us-east-1 --package ./.serverless

失败的确切性质似乎不一致,即,并非总是在同一地点失败。在某个时候,资源只是无法创建,整个过程会回滚。这是几个在+/- 5行中的日志中运行失败的示例,随后是Serverless报告的实际错误

运行1

CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod001VarOptions CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod002VarOptions CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod003VarOptions CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod004VarOptions CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod006Options CloudFormation - CREATE_FAILED - AWS::CloudFormation::Stack - FuncAbcNestedStack CloudFormation - CREATE_FAILED - AWS::CloudFormation::Stack - FuncDefNestedStack CloudFormation - CREATE_FAILED - AWS::CloudFormation::Stack - FuncGhiNestedStack CloudFormation - UPDATE_ROLLBACK_IN_PROGRESS - AWS::CloudFormation::Stack - org-package-develop CloudFormation - UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - org-package-develop CloudFormation - DELETE_IN_PROGRESS - AWS::ApiGateway::Method - ApiGatewayMethod006Options

  Serverless Error ---------------------------------------

  An error occurred: FuncAbcNestedStack - Embedded stack arn:aws:cloudformation:us-east-1:ACCOUNT_ID:stack/org-package-develop-FuncAbcNestedStack/RESOURCE-ID-001 was not successfully created: The following resource(s) failed to create: [AbcLambdaFunction]. .
运行2

CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod001VarOptions CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod002VarOptions CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod005VarOptions CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod006Options CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod004VarOptions CloudFormation - CREATE_FAILED - AWS::CloudFormation::Stack - FuncDefNestedStack CloudFormation - CREATE_FAILED - AWS::CloudFormation::Stack - FuncGhiNestedStack CloudFormation - CREATE_FAILED - AWS::CloudFormation::Stack - FuncAbcNestedStack CloudFormation - UPDATE_ROLLBACK_IN_PROGRESS - AWS::CloudFormation::Stack - org-package-develop CloudFormation - UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - org-package-develop CloudFormation - DELETE_IN_PROGRESS - AWS::ApiGateway::Method - ApiGatewayMethod001VarOptions

  Serverless Error ---------------------------------------

  An error occurred: FuncDefNestedStack - Embedded stack arn:aws:cloudformation:us-east-1:ACCOUNT_ID:stack/org-package-develop-FuncDefNestedStack/RESOURCE-ID-002 was not successfully created: The following resource(s) failed to create: [DefLambdaFunction]. .
注意:以上日志中的所有唯一标识符已被唯一的新标识符替换/混淆。配置中使用相同的资源。

问题鉴于以上所有,我现在的问题是我该如何调试?

这代表了我(相信)可以得到的所有细节,因为我无法更深入地了解

为什么资源创建失败。我已经阅读了一些有关FuncAbcNestedStack的信息,但是由于我实际上并没有直接使用EC2,所以没有任何帮助。

4月4日更新我已经完成了大量尝试调试模板的工作。请注意,我通常不使用模板本身,Serverless会生成它们,然后在应用它们之前将它们转储到S3存储桶中。我已采取了一些步骤

已更新为Serverless的最新版本(troubleshooting errors,来自1.67.0

已推翻的现有堆栈

    与N3相关的N3桶
  1. 更新的节点运行时(1.30.3,来自12.16.1
  2. 下载并删除了包含失败的lambda的CFN模板-未报告问题
  3. 我仍然得到相同的结果。当我重新运行构建并检查CloudFormation事件日志时,确实看到堆栈无法创建,因为其中的Lambda函数无法创建。除了它是API中所有其他函数的授权者这一事实之外,此函数(其他Lambda在运行中成功创建的其他函数)没有什么特别的,这可能很重要,也可能不是很重要。关于
  4. why
  5. lambda无法创建,我仍然找不到更多详细信息。
  6. 上下文,我觉得我需要在此处提供很多上下文以使问题的整个范围都可以理解,因此,如果这太长时间或最终导致提供了太多的内容,那么请提前道歉...
< [

您需要查看嵌套堆栈本身。与父堆栈事件相比,8.10.0AbcLambdaFunction资源在嵌套堆栈中应具有更详细的故障堆栈事件。您可能需要在嵌套堆栈模板中修复DefLambdaFunctionAbcLambdaFunction,因为不一致可能是由于任何资源首先发生故障并开始回滚而引起的

如果自从运行这些模板已有一段时间以来,DefLambdaFunction可能已被弃用。 Lambda Runtimes应该可以检查您的模板,以了解更多以及更多可能性
CloudFormation Linter也可能,我建议尝试AWS Lambda limits
检查是否还有CloudWatch日志

amazon-web-services amazon-cloudformation serverless circleci infrastructure-as-code
1个回答
3
投票
检查是否还有CloudWatch日志
© www.soinside.com 2019 - 2024. All rights reserved.