Amazon web services AWS CDK部署对swagger的更改以保留旧值
我正在使用AWS CDK(v1.100.0)来管理API网关部署。 端点定义来自一个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
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
)?