AWS CDK, внедряющий изменения в swagger, сохраняет старые значения

Я использую AWS CDK (v1.100.0) для управления развертыванием API Gateway. Определения конечных точек взяты из файла 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, когда я повторно развертываю свои изменения, присутствуют как старый, так и новый методы (то же самое, если я делаю другие изменения, например, изменяю путь к конечной точке , так далее).

Мы будем очень признательны за любое понимание того, почему это может происходить.


person grigori    schedule 23.04.2021    source источник
comment
Вы сравнивали активы Cloudformation (расположенные по адресу cdk.out по умолчанию), созданные CDK?   -  person Kane    schedule 24.04.2021


Ответы (2)


Вы должны повторно развернуть сцену. Это можно сделать, изменив что-то в AWS::ApiGatway::Deployment или AWS::ApiGateway::Stage, чтобы принудительно обновить его, или используя пользовательскую лямбда-функцию.

person Tim Bassett    schedule 23.04.2021
comment
Я считаю, что этап перераспределяется, потому что я вижу новый метод, но старый также все еще там, поэтому вместо замены POST на PUT он просто добавил PUT. Таким образом обновляются как ресурс шлюза API, так и этап. - person grigori; 24.04.2021
comment
Вы видите новый метод, но если он не развернут, очевидно, он не будет работать. Если вы (просто в целях тестирования) войдете в консоль шлюза и щелкнете Действия-> Развернуть API, устранит ли это проблему? Если да, то это потому, что он еще не был развернут. - person Tim Bassett; 25.04.2021
comment
Проблема в том, что я вижу как новые, так и старые методы. Я вижу это как на вкладке «Ресурсы», так и на вкладке «Этапы». Он должен был удалить POST и иметь только PUT. - person grigori; 26.04.2021

В AWS::ApiGateway::RestApi есть свойство Mode, которое по умолчанию имело значение overwrite (см. apigateway-restapi-mode" rel="nofollow noreferrer">https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-mode).

Однако недавно значение по умолчанию было изменено с overwrite на merge.

Если вы не укажете это свойство, будет выбрано значение по умолчанию. Для REST API, созданных до 29 марта 2021 г., по умолчанию используется перезапись. В противном случае значением по умолчанию является слияние.

Это то, что вызывает эту проблему.

К сожалению, это свойство еще не представлено в API CDK. Я поднял проблему 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');
person grigori    schedule 06.05.2021