当使用自动缩放创建ec2时,我们可以在云形成模板中为ec2添加cname吗?

x7yiwoj4  于 2021-06-07  发布在  Kafka
关注(0)|答案(3)|浏览(404)

我正在使用aws上的kafka集群,我想给每个代理一个cname,这样我就可以引用它而不是ip地址。
我知道通常使用ec2我们可以在云形成模板中使用这样的东西来实现这一点。。

{
"Parameters": {
    "TestCname":{
        "Description": "The IpAddress for the MyInstance Ec2",
        "Type": "String",
        "Default": "domainName.com"            
    }
},
"Resources": {
    "MyInstanceCNAME": {
        "Type": "Custom::ResourceDNS",
          "Version": "1.0",
          "Properties": {                                            
            "ServiceToken": { "Fn::Sub": "arn:aws:sns:${AWS::Region}:<Account_Num>:custom-resource" },
            "Resource": "CNAME",
            "CNAME": { "Ref": "TestCname" },
            "IpAddress" : { "Fn::GetAtt" : [ "MyInstance", "PrivateIp" ]}
        }
    },
    "MyInstance": {
        "Type": "AWS::EC2::Instance",
        "Properties": {
            "AvailabilityZone": "us-east-1a",
            "ImageId": "ami-a4c7edb2",
            "InstanceType": "t2.micro"}
    }
}

问题是,对于aws,使用合流快速启动脚本
https://github.com/aws-quickstart/quickstart-confluent-kafka/blob/master/templates/confluent-kafka.template
我最初认为ec2的创建必须在引用的模板中。

Fn::Sub": "https://${QSS3BucketName}.s3.amazonaws.com/${QSS3KeyPrefix}templates/nodegroup.template

但是我也看不到模板中的示例,我刚刚通过团队中的一个人发现ec2是通过自动缩放创建的。
我们可以添加一个cname吗?问题是什么?谢谢

epfja78i

epfja78i1#

不确定需要启动多少个代理(我不了解kafka),但如果是一小部分代理…..您可以阻止一组eni并使用基于可用eni池的用户数据脚本附加它们。您可以为enis定义cname。唯一的限制或风险是您不能启用“终止时删除”标志…否则您的eni也会被删除。

7bsow1i6

7bsow1i62#

ec2自动缩放帮助您快速设置ec2的缩放。由它控制的EC2可以根据需要或计划终止或启动。因此,引用任何特定的ec2都没有意义。
我想提出两个备选方案:
每个ec2组使用一个aws弹性负载平衡器,每个负载平衡器都有自己的域,但是如果需要,您可以指定一个自定义域。引用elb域后记。
在每组ec2中使用aws elastic beanstalk,这将为您管理下面的内容,包括自动缩放组、负载平衡器、ec2等。同样,您将拥有一个现成的域,您可以设置自己的自定义域。引用elb域后记。
下面是一个小的cloudformation片段,介绍如何将自定义域名分配给我的elb:

Resources:
  MyAppEnvironment:
    Type: AWS::ElasticBeanstalk::Environment
    Properties:
      # this one also becomes a part of the domain name
      EnvironmentName: !Join ['', [!Ref MyApp, '-env']]
      ApplicationName: !Ref MyApp
      TemplateName: !Ref ConfigurationTemplate
      VersionLabel: !Ref ApplicationVersion
  DNS:
    Type: AWS::Route53::RecordSetGroup
    DependsOn: MyAppEnvironment
    Properties:
      HostedZoneName: your.hosted.zone
      RecordSets:
      - Name: !Join ['.', [!Ref appName, !Ref domain]]
        Type: CNAME
        TTL: 900
        ResourceRecords: [!GetAtt [MyAppEnvironment, EndpointURL]]

其他弹性豆茎片段可以在这里找到。

mznpcxlj

mznpcxlj3#

因为示例是用asg创建的,所以它们不能作为cloudformation资源使用。
要克服这一点,您可以:
创建一个脚本,以检索与asg和setup route53 cnames关联的示例的所有公共ip地址
或者如果你想继续使用 Custom::ResourceDNS ,您可以再次检索示例ip地址,然后将它们作为另一个参数传递给cloudformation堆栈。

相关问题