为了解决这个问题,您需要在API Gateway和Network Load Balancer之间建立一个目标组并将其与EC2实例相关联。然后,您需要在API Gateway中配置一个集成以使用这个目标组。
以下是您需要执行的步骤:
在Network Load Balancer中创建一个目标组,并将其与您的EC2实例相关联。请确保所有的EC2实例都处于“注册”的状态。
获取目标组的ARN(Amazon 资源名称)。
在API Gateway中为您的API资源添加集成。为HTTP集成选择“AWS”框架。选择 Network Load Balancer类型,然后将ARN粘贴到“Load Balancer ARN”字段中。
选择一个目标组,并指定要转发的端口。
在API Gateway中测试您的API,以确保请求现在可以正确地转发到您的EC2实例。
以下是一个包含代码示例的CloudFormation模板,可以让您自动化这些步骤:
Resources:
MyTargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
Name: MyTargetGroup
Port: 80
Protocol: HTTP
Targets:
- Id: !Ref MyEC2InstanceId
Port: 80
MyApiResource:
Type: AWS::ApiGateway::Resource
Properties:
RestApiId: !Ref MyRestApi
ParentId: !GetAtt MyRestApi.RootResourceId
PathPart: myapi
MyApiMethod:
Type: AWS::ApiGateway::Method
Properties:
RestApiId: !Ref MyRestApi
ResourceId: !Ref MyApiResource
HttpMethod: GET
Integration:
Type: AWS_PROXY
IntegrationHttpMethod: GET
Uri: !Sub "arn:aws:apigateway:${AWS::Region}:elasticloadbalancing:action