循環依存の問題のトラブルシューティング
Amplify Gen 2 アプリをデプロイするときに、Amplify Console のバックエンドビルド中またはサンドボックス実行中に The CloudFormation deployment failed due to circular dependency というエラーメッセージが表示される場合があります。このエラーは、CloudFormation のネストされたスタック間、または単一の CloudFormation スタック内のリソース間の循環依存が原因で発生します。
ネストされたスタック間の循環依存エラー
「The CloudFormation deployment failed due to circular dependency found between nested stacks [data1234ABCD, function6789XYZ]」というエラーが表示される場合、data のネストされたスタックと function のネストされたスタックの間に循環依存があることを意味します。例えば、function をクエリハンドラーとして使用していても、その function がデータ(または AppSync)API にアクセスする必要がある場合は、この問題が発生する可能性があります。解決するには、この function を data スタック内の他のリソースとグループ化してください。
export const queryFunction = defineFunction({ name: 'query-function', resourceGroupName: 'data',});同様に、function を認証トリガーとして使用している場合は、function を auth スタック内の他のリソースとグループ化して、循環依存を解決できます。
export const preSignUpTrigger = defineFunction({ name: 'pre-sign-up', resourceGroupName: 'auth',});関数の resourceGroupName プロパティを使用してこのエラーを解決できない場合は、Amplify バックエンド GitHub リポジトリで issue を作成してください。
カスタムスタックでの循環依存エラー
AWS Cloud Development Kit(AWS CDK) を使用してリソースを作成し、カスタムスタックに割り当てている場合も、この問題が発生する可能性があります。エラーメッセージは「The CloudFormation deployment failed due to circular dependency found between nested stacks [storage1234ABCD, auth5678XYZ, MYCustomStack0123AB]」のようなものです。
これを解決するには、相互作用しようとしているリソースと同じスタック内でリソースを作成してみてください。例えば、sqs などのカスタムリソースが defineStorage で作成された Amazon S3 リソースと相互作用する必要がある場合は、その sqs リソースを Amplify で作成されたスタック内に作成できます。以下のように既存の Amplify で作成されたスタックを参照できます。
const queue = new sqs.Queue(backend.storage.stack, 'MyCustomQueue');同じスタック内のリソース間の循環依存エラー
「The CloudFormation deployment failed due to circular dependency found between resources [resource1, resource2] in a single stack」というエラーが表示される場合は、リソース自体が同じスタック内に循環依存を持つことを意味します。このようなエラーを処理するために、循環依存エラーの処理に関する AWS ブログ記事 を確認してください。