微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWS CDK 将更改部署到 swagger 保留旧值

如何解决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 举报,一经查实,本站将立刻删除。