3
votes

Pouvons-nous ajouter un CNAME pour un modèle EC2 dans Cloud Formation lorsque les ec2 sont créés à l'aide de la mise à l'échelle automatique?

Je travaille avec un cluster kafka sur AWS, je voudrais donner à chaque courtier un CNAME afin que je puisse référencer cela plutôt que l'adresse IP.

Je sais généralement qu'avec un EC2, nous pouvons le faire dans le modèle de formation du cloud en utilisant quelque chose comme ça ..

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

Le problème est qu'avec un script de démarrage rapide confluent pour AWS

https: //github.com/aws-quickstart/quickstart-confluent-kafka/blob/master/templates/confluent-kafka.template

Au départ, je pensais que la création des ec2 devait se faire dans le modèles référencés, par exemple.

{
"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"}
    }
}

Mais je n'ai pas non plus pu voir l'instanciation dans ce modèle et je viens de découvrir par l'intermédiaire d'un membre de mon équipe que les ec2 sont créés par mise à l'échelle automatique. p >

Pouvons-nous ajouter un CNAME et comment est la question? Merci


1 commentaires

Avez-vous un lien vers les autres piles? Sont-ils derrière les ELB?


3 Réponses :


2
votes

Étant donné que les instances sont créées avec un ASG, elles ne sont pas disponibles en tant que ressources CloudFormation.

Pour surmonter cela, vous pouvez:

  • créer un script pour récupérer toutes les adresses IP publiques des instances associées à l'ASG et configurer les CNAME Route53 dans votre hébergement
  • ou si vous souhaitez continuer à utiliser Custom :: ResourceDNS , vous pouvez à nouveau récupérer les adresses IP de l'instance, puis les transmettre à votre pile CloudFormation en tant qu'autre paramètre.

9 commentaires

Pour être juste, cela ne ressemble pas vraiment à une réponse 😂


Le problème est-il que vous ne pouvez pas obtenir l'adresse IP de l'autre pile?


Eh bien, le problème est que je ne peux pas référencer l'IP de ce cft parce que je voudrais l'utiliser pour définir le CNAME. Je ne suis pas sûr d'avoir accès aux autres modèles


C'est peut-être ce que j'ai besoin de faire pour les modifier en fait, je pensais qu'ils étaient standardisés mais peut-être pas vu car ils utilisent le nom du bucket s3?


Lorsque vous créez votre pile, d'autres piles sont-elles créées à l'aide des CFT référencés?


Je ne sais pas ce que vous voulez dire, vraiment nouveau dans ce domaine et je n'ai pas créé la pile que l'on vient de me demander de donner des cnames aux ec2, afin que nous puissions les référencer à partir des applications si l'adresse IP change. D'après ce que je comprends, c'est que la collection d'ec2 que je vois sur Amazon a été créée à l'origine à partir d'un script de démarrage rapide comme celui que j'ai lié. Je pense que rien d'autre n'est créé


Pas sur un PC donc je devrai creuser davantage dans le modèle demain. Cependant, il est possible de référencer des ressources dans d'autres piles. c'est à dire. Les instances EC2 dont vous avez besoin. Cela pourrait vous aider - docs.aws.amazon.com/ AWSCloudFormation / latest / UserGuide /… . Je mettrai également à jour la réponse avec des informations plus pertinentes sur re. références croisées de pile.


Super, je serai aussi au PC demain, alors je vérifierai alors, merci!


nouvelle mise à jour, un membre de mon équipe m'a informé que les ec2 sont créés par mise à l'échelle automatique, il n'est donc pas sûr que nous puissions référencer les instances. des idées s'il existe encore un moyen de leur donner un cname?



3
votes

La mise à l'échelle automatique EC2 vous aide à configurer rapidement la mise à l'échelle de votre EC2. Les EC2 contrôlés par celui-ci peuvent être arrêtés ou démarrés en fonction de la demande ou des horaires. Pour cette raison, cela n'a aucun sens de faire référence à un EC2 en particulier.

Je voudrais suggérer deux alternatives:

  1. En utilisant un AWS Elastic Load Balancer par groupe d'EC2, chaque équilibreur de charge est livré avec son propre domaine, mais vous pouvez attribuer un custom one si vous le souhaitez. Référencez les mots-clés du domaine ELB.
  2. En utilisant un AWS Elastic Beanstalk par groupe d'EC2, cela gérera ce qui se trouve en dessous pour vous, y compris le groupe AutoScaling, l'équilibreur de charge, EC2, etc. Encore une fois, vous aurez un domaine prêt à l'emploi et vous pourrez définir votre propre personnalisé domaine. Référencez les mots-clés du domaine ELB.

Voici un petit extrait de cloudformation sur la façon dont j'attribue un nom de domaine personnalisé à mon 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]]

D'autres extraits de haricot élastique peuvent être trouvés ici .


0 commentaires

0
votes

Je ne sais pas combien de courtiers vous devez lancer (je ne connais pas Kafka), mais s'il s'agit d'un petit groupe de courtiers ..... vous pouvez bloquer un ensemble d'ENI et les attacher à l'aide de l'utilisateur- script de données basé sur un pool d'ENI disponibles. Vous pouvez définir un CNAME pour les ENI. La seule limitation ou risque est que vous ne pouvez pas activer le drapeau "Supprimer en cas de résiliation" ... sinon votre ENI est également supprimé.


0 commentaires