CDK Diff总是显示API网关部署的更改



我已经用CDK (Java)构建了一个简单的API Gateway代理到S3。

在部署堆栈之后,cdk diff总是报告有需要部署的更改,尽管Java代码中的资源没有更改:

Resources
[-] AWS::ApiGateway::Deployment apiDeployment149F129425c1eab792837971bc799db7cbb35642 destroy
[+] AWS::ApiGateway::Deployment api/Deployment apiDeployment149F1294513443c293e803fe7996a9d31691b8b7
[~] AWS::ApiGateway::Stage api/DeploymentStage.prod apiDeploymentStageprod896C8101
└─ [~] DeploymentId
└─ [~] .Ref:
├─ [-] apiDeployment149F129425c1eab792837971bc799db7cbb35642
└─ [+] apiDeployment149F1294513443c293e803fe7996a9d31691b8b7

你知道怎么抑制这个吗?我最好的猜测是,一个标签或其他东西正在合成时生成,使CDK认为有一个变化,但我还没有能够跟踪它。

CDK版本:2.53.0 (build 7690f43)Java版本:17.0.3

编辑:我在这里添加了一个小项目来重现这个问题,在README中有重现的步骤:https://github.com/noelob/cdk_diff_bug_repro

部署的logicalId是基于子资源的散列生成的。查看您的示例代码,您似乎正在传递一个请求参数映射,我认为它在调用cdk diff时产生不一致的哈希值。

我有一个类似的设置,并在TreeMap中包装请求参数图似乎已经为我解决了这个问题(至少就我所知)。Diff在最近的10次调用中显示为空(以前我每2-3次调用就会看到虚假的差异)。在此更改之后,第一次调用CDK diff可能仍然显示diff,但后续调用应该没有问题。

最新更新