创建具有不同集成的多个 API Gateway 阶段

Ame*_*wan 5 sam aws-api-gateway aws-sam-cli aws-sam aws-cdk

我正在尝试创建一个与 API 网关关联的 lambda 函数。

每当部署新版本时,都会为该函数创建一个新的 lambda 版本,该版本将具有此 ARN arn:lambda_arn:[version]

此外,还需要创建一个新的 API 网关阶段并与该 lambda 版本集成。

当我部署 CF 堆栈时:

  • 创建新的 lambda 版本
  • 创建与该版本的 lambda 集成的 API Gateway 阶段
  • dev创建名为与 lambda 别名dev( ) 集成的API 网关阶段arn:lambda:dev,并保留此阶段,从 lambda 设置手动管理别名。

我已经尝试使用 sam cli yaml 模板以及 aws cdk 来实现此目的,但这是我面临的问题:

无法创建具有不同集成的多个 API Gateway 阶段,保留旧阶段

  • 在 cdk 中我只能创建 HttpApi 一次
http_api = apigwv2.HttpApi(self, "cdk_http_api")
Run Code Online (Sandbox Code Playgroud)

尽管我可以为该 HttpApi 创建多个阶段,但所有阶段都将具有完全相同的集成和路由。

创建部署会很有用,但即使我无法使用不同的集成(使用不同版本的 lambda)创建不同的部署

deployment = apigwv2.CfnDeployment(
    self, "first_deployment", api_id=http_api.api_id, stage_name="test"
)
Run Code Online (Sandbox Code Playgroud)

我也无法将它附加到舞台上!与下面提到的 ApiGatewayV1 不同

新创建的阶段将删除旧阶段,我无法追加新阶段

Lambda 版本正在被删除:

  • 在 cdk 中,当我部署新的 lambda 版本时,之前的 lambda 版本将被删除。

  • 在 Sam CLI 中,当我将AutoPublishAlias属性设置为函数时,会创建一个新版本,并且指定的别名将转移到该新版本,但幸运的是,它不会删除旧版本。

我怎样才能实现我想要的

不重复此答案,因为它使用支持部署的 ApiGatewayV1,但遗憾的是 ApiGatewayV2 不支持。