从 apigateway 迁移到 apigatewayv2
Migrate from apigateway to apigatewayv2
如何使用 AWS-CDK 从 apigateway 迁移到 apigatewayv2?
具体来说:我正在使用该资源中的 LambdaRestApi
、restApiId
和 deploymentStage
。
// 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 配置非常相似
如何使用 AWS-CDK 从 apigateway 迁移到 apigatewayv2?
具体来说:我正在使用该资源中的 LambdaRestApi
、restApiId
和 deploymentStage
。
// 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 配置非常相似