|
| 1 | +import { getCustomStaticPath } from '@/utils/getCustomStaticPath'; |
| 2 | + |
| 3 | +export const meta = { |
| 4 | + title: 'Troubleshoot circular dependency issues', |
| 5 | + description: 'Addressing deployment failures caused by circular dependencies', |
| 6 | + platforms: [ |
| 7 | + 'angular', |
| 8 | + 'javascript', |
| 9 | + 'nextjs', |
| 10 | + 'react', |
| 11 | + 'react-native', |
| 12 | + 'vue' |
| 13 | + ] |
| 14 | +}; |
| 15 | + |
| 16 | +export function getStaticPaths() { |
| 17 | + return getCustomStaticPath(meta.platforms); |
| 18 | +} |
| 19 | + |
| 20 | +export function getStaticProps(context) { |
| 21 | + return { |
| 22 | + props: { |
| 23 | + meta |
| 24 | + } |
| 25 | + }; |
| 26 | +} |
| 27 | + |
| 28 | +When deploying a Amplify Gen 2 app, you may encounter the error message `The CloudFormation deployment failed due to circular dependency` in your backend build on Amplify Console or while running a sandbox. This error can occur due to circular dependencies between CloudFormation nested stacks or between resources in a single CloudFormation stack. |
| 29 | + |
| 30 | +## Circular dependency error between nested stacks |
| 31 | + |
| 32 | +If you see this error "The CloudFormation deployment failed due to circular dependency found between nested stacks [data1234ABCD, function6789XYZ]", it means that the nested stack for `data` and the nested stack for `function` have circular dependencies. E.g. if you are using the `function` as a query handler, but the `function` also needs access to the data (or `AppSync`) API, you might run into this issue. To resolve, group this `function` with other resources in the `data` stack |
| 33 | + |
| 34 | +```ts title="amplify/functions/my-function/resource.ts" |
| 35 | +export const queryFunction = defineFunction({ |
| 36 | + name: 'query-function', |
| 37 | + resourceGroupName: 'data', |
| 38 | +}); |
| 39 | +``` |
| 40 | + |
| 41 | +Similarly, if you are using your `function` as an auth trigger, you can group your `function` with other resources in the `auth` stack to break the circular dependency. |
| 42 | + |
| 43 | +```ts title="amplify/functions/my-function/resource.ts" |
| 44 | +export const preSignUpTrigger = defineFunction({ |
| 45 | + name: 'pre-sign-up', |
| 46 | + resourceGroupName: 'auth', |
| 47 | +}); |
| 48 | +``` |
| 49 | +If you are unable to resolve this error using function's `resourceGroupName` property, please [create an issue on the GitHub repository for Amplify backend](https://github.com/aws-amplify/amplify-backend/issues/new/choose) |
| 50 | + |
| 51 | +### Circular dependency error with with a custom stack |
| 52 | + |
| 53 | +If you are creating resources using the [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk/) and assigning them to a custom stack, you might also run into this issue. Your error message would look like "The CloudFormation deployment failed due to circular dependency found between nested stacks [storage1234ABCD, auth5678XYZ, **MYCustomStack0123AB**]" |
| 54 | + |
| 55 | +To resolve this, try creating your resources in the same stack as the resources you are trying to interact with. For example, if a custom resource such as `sqs` needs to interact with the underlying Amazon S3 resource created by `defineStorage`, you can create that `sqs` resource in the stack created by Amplify. You can reference the existing Amplify created stack like |
| 56 | + |
| 57 | +```ts title="amplify/backend.ts" |
| 58 | +const queue = new sqs.Queue(backend.storage.stack, 'MyCustomQueue'); |
| 59 | +``` |
| 60 | + |
| 61 | +## Circular dependency error between resources in the same stack |
| 62 | + |
| 63 | +If you see this error "The CloudFormation deployment failed due to circular dependency found between resources [resource1, resource2] in a single stack", that means the resources themselves have a circular dependency in the same stack. For handling such errors, review the [AWS Blog post for handling circular dependency errors](https://aws.amazon.com/blogs/infrastructure-and-automation/handling-circular-dependency-errors-in-aws-cloudformation/). |
0 commit comments