从 apigateway 迁移到 apigatewayv2

Migrate from apigateway to apigatewayv2

如何使用 AWS-CDK 从 apigateway 迁移到 apigatewayv2?

具体来说:我正在使用该资源中的 LambdaRestApirestApiIddeploymentStage

    // old
    const apiGw = new apigateway.LambdaRestApi(this, 'MyAPI', {
      handler: lambdaFrontend,
      proxy: true,
      binaryMediaTypes: ['*/*'],
    });

    // new
    const apiGw2 = new apigateway.CfnApi(this as any, 'MyAPIV2', {
      protocolType: "http",
      target: lambdaFrontend.functionArn,
    })

我正在尝试像这样获取 CF 的 OriginSource: const domainName = ${apiGw.restApiId}.execute-api.${this.region}.${this.urlSuffix};

第一个问题:如何使用 ApiGW2 检索 domainName

我还需要舞台名称。目前我正在像这样检索它: const originPath = '/' + apiGw.deploymentStage.stageName;

第二个问题:如何使用 ApiGW2 检索原始路径?

或者:是否有更好的方法将我的 ApiGW2 与 CF 连接?

    const fecf = new cf.CloudFrontWebDistribution(this, "MyCF", {
      originConfigs: [{
        customOriginSource: {
          domainName: `${apiGw.restApiId}.execute-api.${this.region}.${this.urlSuffix}`,
        },
        originPath: '/' + apiGw.deploymentStage.stageName,
      ...
   }

现在可以很容易地解决这个问题,因为我们现在有这方面的官方文档。 如果有人现在想迁移到 V2,方法如下:

    const httpApiIntegration = new apigatewayv2Integrations.LambdaProxyIntegration({
      handler: fn,
    });
    const httpApi = new apigatewayv2.HttpApi(this, "MyApiV2");
    httpApi.addRoutes({
      path: "/",
      methods: [HttpMethod.ANY],
      integration: httpApiIntegration,
    });

    new cloudfront.CloudFrontWebDistribution(this, "MyCf", {
      defaultRootObject: "/",
      originConfigs: [
        {
          customOriginSource: {
            domainName: `${httpApi.httpApiId}.execute-api.${this.region}.${this.urlSuffix}`,
          },
          behaviors: [
            {
              isDefaultBehavior: true,
            },
          ],
        },
      ],
      enableIpV6: true,
    });

https://docs.aws.amazon.com/cdk/api/latest/docs/aws-apigatewayv2-readme.html

步骤:

  • 创建一个集成(例如 lambda 函数),它来自专用包 (apigatewayv2-integrations)
  • 创建一个 HttpApi,不需要任何选项
  • 新:与 APIGWv1 相反,您必须为您的路径添加路由处理程序 (httpApi.addRoutes)。
  • Cloudfront 配置非常相似