Как перенести / нарастить свой AWS lambda из одной среды в другую (например, от разработчика к prod), используя псевдоним?

#aws-lambda

#aws-lambda

Вопрос:

Я создаю бессерверное приложение AWS с помощью SAM. В принципе, чего я хотел бы достичь, так это использовать разные этапы API Gateway (dev / test / prod) для вызова различных псевдонимов функций Lambda (dev / test / prod).

Я полностью в тупике, я хотел бы знать, какие стратегии люди использовали для переноса лямбда-трафика, например. с LambdaA: dev на LambdaA: prod?

Я пытался использовать «AutoPublishAlias», но в SAM AutoPublishAlias у вас не может быть более одного псевдонима в одном стеке cloudformation, так что это делает невозможным перемещение трафика.

До использования одного стека я также использовал Canary Deployment, он работает нормально, когда я разделяю lambda на несколько окружений (т. Е. dev-lambaA, test-lambdaA, prod-lambdaA), управляемых другим стеком cloudformation. Но я хотел бы уменьшить количество лямбда-функций, разместив лямбды только в одном стеке.

Ответ №1:

Что вы можете сделать, так это добавить следующее в свой шаблон.файл yaml:

 Resources:
    ProductionAPI:
    Type: AWS::Serverless::Api
        Properties:
        StageName: PRD
        DefinitionUri: ./prdswagger.yaml

    DevelopmentAPI:
    Type: AWS::Serverless::Api
        Properties:
        StageName: DEV
        DefinitionUri: ./devswagger.yaml
  

И используйте файлы swagger для создания ваших конечных точек. В каждой конечной точке добавьте x-amazon-apigateway-integration к правильной версии lambda, на которую вы ориентируетесь.

   x-amazon-apigateway-integration:
      httpMethod: "POST"
      type: aws_proxy
      uri: "arn:aws:apigateway:eu-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:eu-central-1:[account_nr]:function:[myfunctionname]:PRD/invocations"
      passthroughBehavior: "when_no_match"