-
Notifications
You must be signed in to change notification settings - Fork 4.5k
Description
❓ General Issue
I want to have a CodeCommit repository in one stack triggering a CodePipeline in another stack, both stacks being deployed to the same region.
When passing the repo as a prop to the stack containing the pipeline, I get a circular dependency error:
'RepoStack' depends on 'PipelineStack' (RepoStack -> PipelineStack/Pipeline/Resource.Ref, RepoStack -> PipelineStack/Pipeline/EventsRole/Resource.Arn). Adding this dependency (PipelineStack -> RepoStack/Repository/Resource.Name) would create a cyclic reference.
My code looks as follows:
const repoStack = new RepoStack(app, 'RepoStack', {
env: envDevOps,
});
new PipelineStack(app, 'PipelineStack', {
env: envDevOps,
repo: repoStack.repo,
});export class RepoStack extends cdk.Stack {
public readonly repo: codecommit.Repository;
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
this.repo = new codecommit.Repository(this, 'Repository', {
repositoryName: 'MyRepo',
});
}
}export class PipelineStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props: PipelineStackProps) {
super(scope, id, props);
const sourceAction = new codepipeline_actions.CodeCommitSourceAction({
actionName: 'CodeCommit_Source',
repository: props.repo,
output: sourceOutput,
});
// ...
}
}The Question
How can I have a CodeCommit repository in one stack triggering a CodePipeline in another stack without introducing a circular dependency (both in the same account/region)?
When the RepoStack is deployed to another account, everything works fine. I suspect that, in this case, the cross-account support stacks do the magic.
Still, it comes to a surprise that support for cross-references across accounts is better than support for cross-references within the same account.
I think this problem can be generalized to many scenarios with circular dependencies.
Environment
- CDK CLI Version: 1.39.0 (build 5d727c1)
- OS: MacOS Catalina
- Language: all