CDK 上的 MWAA Web 服务器 IP

MWAA Webserver IPs on CDK

我正在使用设置为 webserver_access_mode='PRIVATE_ONLY' 的 CDK 创建 Amazon Managed Airflow (MWAA)。在此模式下,AWS 创建一个 VPC 接口端点并将来自所选 VPC 私有子网的 IP 地址绑定到它们,如下所述:https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-networking.html

现在,我想使用这些 IP 将侦听器添加到现有的负载均衡器,然后我可以使用它来连接到 VPN,但这似乎无法作为输出使用 attribute/property共 aws_cdk.aws_mwaa.CfnEnvironment 个:https://docs.aws.amazon.com/cdk/api/v1/python/aws_cdk.aws_mwaa/CfnEnvironment.html#aws_cdk.aws_mwaa.CfnEnvironment.NetworkConfigurationProperty

我的问题是,有没有办法获得与 aws_cdk.aws_mwaa.CfnEnvironment 关联的那些 IP?现在我正在使用 CDK 部署并创建侦听器后手动查找结果,但我更愿意在同一个 CDK 构造中完全自动化它。

我为同样的问题苦苦挣扎了一段时间。最后,我在我的 CFN 模板中使用了自定义资源,将其传递给 MWAA 网络服务器的 URL。在与自定义资源 (Lambda) 关联的 Python 代码中,我执行了一个 socket.gethostbyname_ex() 调用,将 URL 作为参数传递。此调用将 return 一个元组,您必须解析该元组以提取端点地址。

我充分利用了 crhelper 库 (https://aws.amazon.com/blogs/infrastructure-and-automation/aws-cloudformation-custom-resource-creation-with-python-aws-lambda-and-crhelper/),这让事情变得容易多了。

最后,我使用 lambda 函数解析网络服务器 URL 并将 IP 地址注册到目标组。以下 AWS 博客 post 中描述了该方法:https://aws.amazon.com/blogs/networking-and-content-delivery/hostname-as-target-for-network-load-balancers/

lambda函数的实现也可以通过以下AWS示例代码获得:https://github.com/aws-samples/hostname-as-target-for-elastic-load-balancer