[英]AWS CDK deploy same resources and same stacks with different pipeline | Typescript
对 AWS CDK 很陌生,遇到了某个问题。
我有一个工作的 CDK 代码管道,可以将大量资源部署到不同的环境,最终进入生产阶段。 它使用 master 作为其源分支,目前有一个 prod 部署等待投入生产。
为了让开发人员继续工作,我创建了一个新管道,它在一个名为 dev 的新分支上工作,但旨在将相同的资源部署到相同的堆栈,但仅限于我们的开发环境。
新的开发管道运行后,我收到错误
Resource handler returned message: "Usage Plan j4p4g2 cannot be added because API Key n8uyhik8h8 cannot reference multiple Usage Plans with the same API Stage: 9i1lnft358:v1 (Service: ApiGateway, Status Code: 409, Request ID: 54889a52-4fb8-4c90-93e5-31c8b1865335, Extended Request ID: null)" (RequestToken: 6fb61327-fa39-b967-8969-639daa658c72, HandlerErrorCode: AlreadyExists)
似乎尽管堆栈名称和资源相同,但它仍在尝试添加新的使用计划而不是接受现有的使用计划
像这样创建的第二条管道
if (stackBuildTargetAcct === 'dev') {
new PipelineStack(app, 'PipelineDev', {
environment: 'dev',
stackName: 'dev-build-pipeline',
})
} else if (stackBuildTargetAcct === 'prod') {
new PipelineStack(app, 'Pipeline', {
environment: 'prod',
stackName: 'master-build-pipeline',
})
}
我认为堆栈名称相同且资源相同,为什么它会认为需要创建新资源? 我怀疑它是“Pipeline”与“PipelineDev”ID,但是当我将它们都更改为“Pipeline”时,由于出现以下错误,我无法部署新管道
Pipeline/Pipeline/Pipeline/ArtifactsBucketEncryptionKeyAlias (PipelineArtifactsBucketEncryptionKeyAlias94A07392) alias/codepipeline-pipelinefb9defa0 already exists in stack arn:aws:cloudformation:ap-southeast-2:master-build-pipeline
任何帮助或建议表示赞赏
我最终想出了解决方案并对问题有了更深入的了解。
问题是由同时发生的几件事引起的:
另外我想指出,在这个 repo 中,到目前为止,我们在代码中为除使用计划(使用计划没有名称)之外的所有内容都有明确的名称。 解决方案是找到用于使用计划的当前逻辑 ID,并将其设置在代码中,如下所示:
plan.addApiKey(importedKey, {overrideLogicalId: "<Logical id that you found is already deployed here>"})
我怀疑类似的错误通常可以通过给资源一个明确的名称来解决,这样它的逻辑 ID 就不会随机生成,或者通过以我需要的类似方式覆盖逻辑 ID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.