要解决API Gateway VPC链接集成到NLB返回404错误的问题,可以尝试以下方法:
确保API Gateway与NLB之间的VPC连接已正确配置。确保连接的子网和安全组设置正确,以允许API Gateway与NLB之间的流量通信。
检查API Gateway集成设置。确保API Gateway的集成设置正确配置,包括目标类型为NLB、目标地区与NLB所在的VPC相同等。
检查NLB的目标组和目标。确保NLB的目标组已正确配置,并且目标与API Gateway的VPC连接集成的目标相匹配。
检查目标的健康状况。如果API Gateway无法访问NLB的目标,可能是由于目标的健康状况不良所致。确保目标的健康检查配置正确,并且目标处于正常运行状态。
下面是一个使用AWS CDK(Cloud Development Kit)创建API Gateway VPC链接集成到NLB的示例代码:
import * as cdk from 'aws-cdk-lib';
import * as apigateway from 'aws-cdk-lib/aws-apigateway';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
const app = new cdk.App();
const stack = new cdk.Stack(app, 'ApiGatewayNlbStack');
// 创建VPC
const vpc = new ec2.Vpc(stack, 'MyVpc', {
maxAzs: 2,
});
// 创建NLB
const nlb = new elbv2.NetworkLoadBalancer(stack, 'MyNlb', {
vpc,
});
// 创建目标组
const targetGroup = new elbv2.NetworkTargetGroup(stack, 'MyTargetGroup', {
port: 80,
vpc,
targetType: elbv2.TargetType.IP,
});
// 创建目标
const target = new elbv2.NetworkTarget(stack, 'MyTarget', {
port: 80,
vpc,
targetGroup,
});
// 创建API Gateway
const api = new apigateway.RestApi(stack, 'MyApi', {
restApiName: 'My API',
deployOptions: {
tracingEnabled: true,
},
});
// 创建VPC链接集成
const vpcLink = new apigateway.VpcLink(stack, 'MyVpcLink', {
targets: [nlb],
vpcLinkName: 'My VPC Link',
vpc,
});
// 创建API资源
const apiResource = api.root.addResource('my-resource');
// 使用VPC链接集成到NLB
const integration = new apigateway.Integration({
type: apigateway.IntegrationType.HTTP_PROXY,
integrationHttpMethod: 'ANY',
options: {
connectionType: apigateway.ConnectionType.VPC_LINK,
vpcLink,
},
uri: `http://${nlb.loadBalancerDnsName}/`,
});
// 将集成添加到API资源的方法中
apiResource.addMethod('ANY', integration);
app.synth();
请注意,上述代码仅为示例,实际情况可能需要根据您的特定需求进行调整。