use*_*256 8 amazon-web-services aws-cloudformation aws-cdk
上下文,我有一个带有两个堆栈的 CDK 应用程序,使用以下设置:
Stack_A:
StateMachine_A
Lambda_A
S3Bucket_A
IAMRole_A
Stack_B:
StateMachine_B
SageMakerTrainJob_B
IAMRole_B
Run Code Online (Sandbox Code Playgroud)
StateMachine_A 使用执行角色 IAMRole_A 运行 Lambda_A。StateMachine_A 中的一个单独步骤将数据写入 S3Bucket_A。StateMachine_B 使用执行角色 IAMRole_B 运行 SageMakerTrainJob_B。Lambda_A 的目的是开始执行 StateMachine_B,其 SageMakerTrainJob_B 需要从 S3Bucket_A 读取。因此,我们必须配置以下权限:
我们尝试通过在 Stack_B 中创建一个对 Stack_A 的直接依赖,在 Stack_B 的定义中使用对 IAMRole_A 和 S3Bucket_A 的引用来在代码中授予所需的权限,从而在 CDK 中对此进行建模。但是,这产生了以下错误:
Error: 'Stack_B' depends on 'Stack_A' (dependency added using stack.addDependency()). Adding this dependency (Stack_A -> Stack_B/IAMRole_B/Resource.Arn) would create a cyclic reference.
同样,尝试对另一个方向的依赖项进行建模也会出现相同的错误:
Error: 'Stack_A' depends on 'Stack_B' (dependency added using stack.addDependency()). Adding this dependency (Stack_B -> Stack_A/S3Bucket_A/Resource.Arn) would create a cyclic reference.
有没有办法使用代码依赖来解决这个问题?对于这种情况,是否有任何推荐的最佳做法?我们考虑过的一些选项包括:
此外,我发现在使用CodeCommit/CodePipeline和APIGateway/Lambda 的CDK 开发过程中也存在类似的问题。这是一个相关的错误,还是我们只是试图做一些不受支持的事情?
循环引用总是很棘手。这不是 CDK 独有的问题。当你从逻辑上解释问题时,你会看到事情开始崩溃的地方。CloudFormation 必须先创建另一个资源所依赖的任何资源,然后才能创建依赖资源。没有一种解决方案适合所有方法,但我会给出一些可行的想法。
| 归档时间: |
|
| 查看次数: |
5601 次 |
| 最近记录: |