如何解决AWS CDK 将更改部署到 swagger 保留旧值
我使用 AWS CDK (v1.100.0) 来管理 API 网关部署。 端点定义来自 swagger 文件。 堆栈看起来像这样:
export class MyStack extends cdk.Stack {
constructor(scope: cdk.Construct,id: string,props?: cdk.StackProps) {
super(scope,id,props);
const api = new apigateway.SpecRestApi(this,'my-api',{
cloudWatchRole: false,endpointTypes: [ EndpointType.REGIONAL ],apiDeFinition: apigateway.ApiDeFinition.fromAsset('path/to/swagger.yaml'),deployOptions: {
stageName: 'dev',etc...
}
});
}
}
这正确地创建了一个 API 网关和阶段。
但是,例如,每当我更改 swagger 文件时,我将端点方法从 POST
更改为 PUT
,当我重新部署更改时,旧方法和新方法都存在(相同如果我进行其他更改,例如修改端点路径等)。
如果您能深入了解为什么会发生这种情况,我们将不胜感激。
解决方法
您必须重新部署舞台。您可以通过更改 AWS::ApiGatway::Deployment 或 AWS::ApiGateway::Stage 上的某些内容以强制其更新或使用自定义 lambda 函数来实现此目的。
,Mode
中有一个 AWS::ApiGateway::RestApi
属性,它曾经默认为 overwrite
(请参阅 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-mode)。
但是最近默认值从 overwrite
更改为 merge
如果您不指定此属性,则会选择默认值。对于 2021 年 3 月 29 日之前创建的 REST API,默认为覆盖。否则,默认值为合并。
这就是导致此问题的原因。
遗憾的是,此属性尚未在 CDK API 中公开。我提出了一个 GitHub 问题,请参阅 https://github.com/aws/aws-cdk/issues/14436。
与此同时,解决方法(如票证中所建议)是:
const api = new apigateway.SpecRestApi(this,'my-api',{....});
(api.node.defaultChild as CfnRestApi).addPropertyOverride('Mode','overwrite');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。