使用 CDK 将私有 DNS 记录映射到 EC2 实例

Posted

技术标签:

【中文标题】使用 CDK 将私有 DNS 记录映射到 EC2 实例【英文标题】:Map private DNS records to EC2 instances with CDK 【发布时间】:2022-01-15 22:57:27 【问题描述】:

我正在使用 aws-cdk 运行 7 个 ec2 实例,这些实例将是 MongoDB 节点。我可以使用他们的安全组和东西创建它们,但我不明白如何在私有 DNS 中映射它们。

for (inst i = 1; inst<8; inst++) 
  new ec2.Instance(this, 'mongodb' + i, 
  instanceType: new ec2.InstanceType('t3.medium'), 
  vpc: defaultVpc,
  securityGroup: mongoGroup ,
  )

部署后名称将为$mongodb1/InstanceRole.Arn, $mongodb2/InstanceRole.Arn,...

如何为cdk 中的这些实例设置我的私人DNS 记录?我想创建一个配置,其中所有节点都将像这样列出

 database1.test.com
 database2.test.com
 database3.test.com
 ...

代替

ec2-203-3-156-25.compute-1.amazonaws.com
ec2-201-1-191-21.compute-1.amazonaws.com
ec2-208-0-112-03.compute-1.amazonaws.com
...

因为如果我重新部署或重新启动,IP 会改变,我需要再次更改完整的配置,而且这些名称也不容易记住。我想我需要创建私有托管区域,然后将每个IP地址分配给CNAME,但不知道是否可以在cdk中自动完成?

【问题讨论】:

一种方法是设置privateIpAddress。另一个是使用网络负载均衡器并将所有实例添加到目标组。 tnx,有什么建议可以我如何在 cdk 中实现目标组的负载均衡器?欣赏。 【参考方案1】:

您可以为此使用network load balancer (NLB)。

类似于:

import * as elbv2 from '@aws-cdk/aws-elasticloadbalancingv2';
import * as elasticloadbalancingv2_targets from '@aws-cdk/aws-elasticloadbalancingv2-targets';

// vpc = ...

const lb = new elbv2.NetworkLoadBalancer(this, 'lb',  vpc, internetFacing: false );
const listener = lb.addListener('listener',  port: 27017 );
listener.addTargets('target', 
  targets: [
    new elasticloadbalancingv2_targets.InstanceIdTarget(instance1.instanceId),
    new elasticloadbalancingv2_targets.InstanceIdTarget(instance2.instanceId),
    // ... more ...
  ]
);

// get domain name from lb.loadBalancerDnsName

【讨论】:

以上是关于使用 CDK 将私有 DNS 记录映射到 EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章

将 AWS Route 53 DNS 记录静态链接到 EC2 实例

使用 Route 53 服务将 DNS 名称分配给 EC2 实例的最简单方法是啥?

AWS EC2 公共 IP 与私有 IP

使用 CDK、AWS 和 Github 私有存储库部署的最佳实践?

CDK Fargate:将子域映射到不同的容器端口

具有私有 EC2 源的 Cloudfront