Amazon web services AWS CDK部署对swagger的更改以保留旧值

Amazon web services AWS CDK部署对swagger的更改以保留旧值,amazon-web-services,amazon-cloudformation,aws-api-gateway,aws-cdk,Amazon Web Services,Amazon Cloudformation,Aws Api Gateway,Aws Cdk,我正在使用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(t

我正在使用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函数来实现此目的。

AWS::ApiGateway::RestApi
中有一个
模式
属性,该属性用于默认设置为
覆盖
(请参阅)

但是,最近默认值从
覆盖
更改为
合并

如果未指定此属性,将选择默认值。对于2021年3月29日之前创建的REST API,默认设置为覆盖。否则,默认值为“合并”

这就是导致这个问题的原因

不幸的是,这个属性还没有在CDKAPI中公开。我提出了一个GitHub问题,请参阅

同时,一个解决办法(如票据中所示)是:

const-api=new-apigateway.SpecRestApi(这是‘我的api’,{……});
(api.node.defaultChild作为CfnRestApi.addPropertyOverride('Mode','overwrite');

我认为该阶段正在重新部署,因为我看到了新方法,但旧方法仍然存在,因此它没有用PUT替换POST,而是添加了PUT。API网关资源和阶段都是以这种方式更新的。您可以看到新方法,但如果没有部署,显然它将无法工作。如果您(仅出于测试目的)进入网关控制台并单击操作->部署API,它是否解决了问题?如果是这样,那是因为它还没有部署。问题是我可以看到新方法和旧方法。我可以在资源选项卡和阶段选项卡下看到它。它应该已经删除了POST,只有PUT。您是否比较了cdk生成的Cloudformation资产(默认位于
cdk.out
)?