#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"