Можем ли мы добавить CNAME для EC2 в шаблоне формирования облака, когда ec2 создаются с использованием автоматического масштабирования? - PullRequest
0 голосов
/ 04 января 2019

Я работаю с кластером kafka в AWS, я хотел бы дать каждому брокеру 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 и как вопрос? Спасибо

Ответы [ 3 ]

0 голосов
/ 10 января 2019

EC2 Autoscaling поможет вам быстро настроить масштабирование для вашего EC2. Контролируемые этим EC2 могут быть прекращены или запущены в зависимости от спроса или расписаний. Из-за этого нет смысла ссылаться на какой-либо конкретный EC2.

Я хотел бы предложить две альтернативы:

  1. Используя AWS Elastic Load Balancer для каждой группы EC2, каждый балансировщик нагрузки поставляется со своим собственным доменом, но вы можете назначить пользовательский , если хотите. Ссылка на слова домена ELB.
  2. Используя AWS Elastic Beanstalk для каждой группы EC2, это будет управлять тем, что вам нужно, включая группу AutoScaling, балансировщик нагрузки, EC2 и т. Д. Опять же, у вас будет готовый домен, и вы можете установить свой собственный домен. Ссылка на слова домена ELB.

Вот небольшой фрагмент облачной информации о том, как назначить собственное доменное имя для моего 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]]

Другие фрагменты упругого бобового стебля можно найти здесь .

0 голосов
/ 12 января 2019

Не уверен, сколько брокеров вам нужно раскрутить (я не знаком с кафкой), но если это небольшой набор брокеров ..... вы можете заблокировать набор ENI и прикрепить их, используя скрипт данных, основанный на пуле доступных ENI. Вы можете определить CNAME для ENI. Единственным ограничением или риском является то, что вы не можете включить флаг «Удалить при завершении» ... иначе ваш ENI также будет удален.

0 голосов
/ 06 января 2019

Поскольку экземпляры создаются с помощью ASG, они недоступны в качестве ресурсов CloudFormation.

Чтобы преодолеть это, вы можете:

  • создать сценарий для получения всех общедоступных IP-адресов.адреса экземпляров, связанных с ASG, и настройте CNAMEs Route53 в вашем хосте
  • или, если вы хотите продолжать использовать Custom::ResourceDNS, вы можете снова получить IP-адреса экземпляра и затем передать их в ваш стек CloudFormation какдругой параметр.
...