背景: 我们正在使用 AWS 云开发工具包 (CDK) 2.5.0。
手动使用 AWS 控制台和硬编码 IP 地址,路由 53 到 ALB(应用程序负载均衡器)到私有接口 VPC 端点到私有 REST API 网关(等等..)工作。见下图。
代码: 我们正在尝试通过 CDK 编写此手动解决方案的代码,但被困在如何获取和使用 IP 地址或以某种方式将负载均衡器连接到接口 VPC 端点上。(端点有 3 个 IP 地址,区域中每个可用区一个。)
ALB 需要一个目标组,该目标组以接口 VPC 端点的 IP 地址为目标。(使用“实例”方法而不是 IP 地址,我们尝试InstanceIdTarget
与端点一起使用vpcEndpointId
,但失败了。我们得到了错误Instance ID 'vpce-WITHWHATEVERWASHERE' is not valid
)
使用 CDK,我们使用aws_elasticloadbalancingv2
模块创建了以下(除其他外):
ApplicationLoadBalancer
(ALB)ApplicationTargetGroup
(ATG) 又名目标集团
我们希望aws_elasticloadbalancingv2_targets
类似于aws_route53_targets
,但没有运气。我们知道对象数组的targets
属性,但仅此而已。ApplicationTargetGroup
IApplicationLoadBalancerTarget
:
import { aws_ec2 as ec2 } from 'aws-cdk-lib';
:
import { aws_elasticloadbalancingv2 as loadbalancing } from 'aws-cdk-lib';
// endpointSG, loadBalancerSG, vpc, ... are defined up higher
const endpoint = new ec2.InterfaceVpcEndpoint(this, `ABCEndpoint`, {
service: {
name: `com.amazonaws.us-east-1.execute-api`,
port: 443
},
vpc,
securityGroups: [endpointSG],
privateDnsEnabled: false,
subnets: { subnetGroupName: "Private" }
});
const loadBalancer = new loadbalancing.ApplicationLoadBalancer(this, 'abc-${config.LEVEL}-load-balancer', {
vpc: vpc,
vpcSubnets: { subnetGroupName: "Private" },
internetFacing: false,
securityGroup: loadBalancerSG
});
const listenerCertificate = loadbalancing.ListenerCertificate.fromArn(config.ARNS.CERTIFICATE)
const listener = loadBalancer.addListener('listener', {
port: 443,
certificates: [ listenerCertificate ]
});
let applicationTargetGroup = new loadbalancing.ApplicationTargetGroup(this, 'abc-${config.LEVEL}-target-group', {
port: 443,
vpc: vpc,
// targets: [ HELP ], - how to get the IApplicationLoadBalancerTarget objects?
})
listener.addTargetGroups( 'abc-listener-forward-to-target-groups', {
targetGroups: [applicationTargetGroup]
} );
正如您在上面看到的,我们向 ALB 添加了一个侦听器。我们将目标组添加到侦听器。
我们使用的一些资源:
- https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_elasticloadbalancingv2.ApplicationLoadBalancer.html
- https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_elasticloadbalancingv2.ApplicationTargetGroup.html
- https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.InterfaceVpcEndpoint.html
- https://docs.aws.amazon.com/cdk/api/v2//docs/aws-cdk-lib.aws_elasticloadbalancingv2_targets.InstanceIdTarget.html及相关。
- 如何在 CDK 中获取 VPC Endpoint 的 PrivateIPAddress?但这没有帮助。
任何帮助填充该targets
属性的ApplicationTargetGroup
对象IApplicationLoadBalancerTarget
表示赞赏。谢谢!