環境
問題の完全な範囲を理解するために、ここで多くのコンテキストを提供する必要があると感じているので、これが少し長くなったり、あまりにも多くの情報を提供してしまう場合は、事前に謝罪してください。 -できる限り質問と説明の要求をアップします。
私は技術的な引き継ぎであるプロジェクトを持っています。以前は、別の AWS アカウントの別の所有者の下で運用されていました。管理している AWS アカウントで再起動しようとしていますが、パッケージの 1 つが問題を引き起こしています。
サーバーレスを使用して、いくつかの S3 バケットとそのアクセス ポリシー、いくつかの IAM ロール、および多数の ApiGateway メソッドをプロビジョニングします。このパッケージは、ここで説明されている 200 のリソース制限を回避するために、ネストされたスタックに依存しています。
最後に、CircleCI が接続する IAM ユーザーにAdministratorAccess
ポリシーがアタッチされています。
問題
ビルドのこのステップで、CircleCI から何度もエラーが発生します
node_modules/.bin/serverless deploy --verbose --stage develop --region us-east-1 --package ./.serverless
失敗の正確な性質には一貫性がないようです。つまり、常に同じ場所で失敗するとは限りません。ある時点でリソースの作成に失敗し、プロセス全体がロールバックします。+/- 5 行のログの実行失敗の例と、サーバーレスによって報告された実際のエラーの例を次に示します。
実行 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日更新
テンプレートをデバッグするためにかなりの量の作業を行いました。注意してください、私は通常、テンプレート自体を使用していません。サーバーレスはそれらを生成し、適用される前に S3 バケットにダンプします。
ここに私が取ったいくつかのステップがあります
- サーバーレスの最新バージョンに更新 (
1.67.0
、から1.30.3
) - Nuked 既存のスタック
- Nuked 関連の S3 バケット
- 更新されたノード ランタイム (
12.16.1
、 from8.10.0
) - 失敗したラムダを含む CFN テンプレートをダウンロードしてリントしました - 問題は報告されていません
私はまだ同じ結果を得ています。ビルドを再実行して CloudFormation イベント ログを確認すると、スタック内の Lambda 関数が作成に失敗したため、スタックの作成に失敗したことがわかります。この関数 (他の Lambda は実行の早い段階で正常に作成されます) について特別なことはありませんが、それが API 内の他のすべての関数のオーソライザーであるという事実以外には、重要である場合とそうでない場合があります。ラムダの作成に失敗した理由については、まだ詳細を見つけることができません。
4月6日更新
さて、CloudFormation コンソールがどのように機能するかを理解したので、これが一番下にあるエラー メッセージだと思います。
Unzipped size must be smaller than 262144000 bytes (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: 0507722d-46e7-4340-bc68-fdba1ed469d6)
このネストされたスタックの CFN テンプレート自体を見ると、何が起こっているかがわかります。各ラムバは独自のスタックを取得し、パッケージ全体の各スタックは 1 つの ZIP ファイルにコンパイルされます。そのサイズは最終的に約 270MB または上記の制限よりも 20MB 大きくなります。この時点から、私には2つの可能な道があるようです
- 関数を複数の ZIP に分割する方法を理解する
- コンパイルされたファイルが肥大化しないように、webpack の構成を変更します (ここで何が起こっているのか真剣にわかりません。webpack の後で 1k の TypeScript ファイルが 6.5MB として出力されます)。