web-dev-qa-db-fra.com

Solution pour les modifications d'adresse IP locales des instances AWS EC2

Amazon ne vous donne qu'un certain nombre d’adresses IP statiques et les ips locaux (privés) de chaque instance EC2 peuvent changer au redémarrage de la machine. Cela rend la création d'une plate-forme stable où les instances EC2 dépendent les unes des autres d'une manière ridiculement difficile à utiliser, pour autant que je sache.

J'ai effectué de nombreuses recherches en ligne sur diverses solutions et, jusqu'à présent, je n'ai rien trouvé de raisonnable en dehors de l'attribution d'une adresse IP élastique sur un EC2, même si cela ne concerne pas le public. Est-ce que quelqu'un a d'autres bonnes idées qui sont réellement faciles à exécuter?

Merci!

Voir la réponse de l'équipe AWS à la question Adresse IP locale statique :

L'adresse IP interne des instances EC2 est attribuée via DHCP. Sur arrêt d'instance ou lorsque le bail DHCP expire, l'adresse IP est renvoyé au pool d'adresses DHCP EC2 général disponible pour d'autres les instances.

Il n'y a aucun moyen de garantir que vous obtiendrez le même DHCP adresse à travers les redémarrages.

Edit: La réponse consiste à utiliser Amazon VPC. Il n'y a pas d'inconvénient sauf une quantité dérisoire de configuration supplémentaire car vous contrôlez maintenant le routeur. C'est un monde différent de l'ancienne instance EC2 sur AWS. Il est en effet si nécessaire que VPC soit activé par défaut pour toutes les futures configurations AWS. Voir ce post pour plus d'informations: http://www.reddit.com/r/aws/comments/1a3n0r/ec2_update_virtual_private_clouds_for_everyone/

24
Mauvis Ledford

Les réponses du stock sont:

  1. Utilisez AWS VPC pour avoir un contrôle total sur l'adressage d'instance.
  2. Utilisez les adresses IP élastiques, qui se résoudront en l'adresse local de l'instance (et non le public, comme vous le souhaiteriez) lors de la communication entre instances EC2.
16
gabrtv

Je suis tombé sur la troisième option. Il y a ec2-ssh par les gens d'Instragram. C'est un script Shell python que vous installez globalement et vous permet d'interroger les noms de domaine publics de vos instances ec2 par nom de balise, ainsi que ssh dans nom de balise via.

La documentation à ce sujet est pratiquement inexistante. J'ai écrit les étapes à installer ci-dessous:

Pour installer ec2-ssh:

  1. Sudo yum install python-boto (wrapper python pour ec2 api)
  2. git clone https://github.com/Instagram/ec2-ssh
  3. Dans votre ~/.bash_profile, définissez votre clé d’accès AWS et votre secret comme suit:

    exportation AWS_ACCESS_KEY_ID = XYZ123

    exportation AWS_SECRET_ACCESS_KEY = XYZ123

  4. cd dans le dossier bin du référentiel, il y aura deux fichiers:

    ec2-Host et ec2-ssh

copiez-les dans votre /usr/bin ou /usr/local/bin.

Maintenant, vous pouvez faire des choses géniales comme:

$ ec2-Host ZenWorker
ec2-999-xy-999-99.compute-1.amazonaws.com

et

$ ec2-ssh ZenWorker
Connecting to ec2-999-xy-999-99.compute-1.amazonaws.com.

Notez que dans vos scripts Shell habituels, vous pouvez utiliser des backticks pour appeler ces outils globaux. J'ai chronométré ces appels et ils prennent entre 0,25 et 0,5 seconde en utilisant une instance EC2, c'est donc le seul inconvénient. Peut-être pouvez-vous vivre avec le retard, ou utiliser le fait que le DNS public ne change que pour une instance au redémarrage afin de mettre en place une solution.

Notez que ces deux programmes sont des scripts de ligne de commande et que vous n’avez besoin d’aucune connaissance de Python pour les utiliser. Pour les fans de PHP, ou ceux qui veulent aussi un moyen simple de scp fichiers sans connaître le DNS public en constante évolution, vous pouvez utiliser ec2dns .

13
Mauvis Ledford

J'étais dans la même situation une fois. Je n'ai toujours pas l'expertise pour le résoudre correctement. Ma mauvaise solution consistait à utiliser elb non pas vraiment pour équilibrer la charge, mais uniquement pour le point de terminaison.

Mais je pense qu'une bonne solution peut être obtenue en utilisant aws vpc .

1
Josnidhin

Voici une autre solution Ruby pour Mise à jour du DNS de Route 53 à partir d'une instance sur AWS . Vous ne devez pas référencer les adresses IP système brutes de tiers dans vos applications ou vos configurations de serveur.

1
kixorz

vous pouvez changer l’adresse Ip avec Elastic Ip: Vous pouvez faire en utilisant le code C #:

 var associateRequest = new AssociateAddressRequest
            {
                 PublicIp = your Elastic Ip,
                 InstanceId = Your Instance Id Which You Assign
            };    
        amazonEc2Client.AssociateAddress(associateRequest);

après que le désassocient.

        var disAssociateRequest = new isassociateAddressRequest(publicIp.ElasticIpAddress1);
  AmazonEc2Client.DisassociateAddress(your Elastic Ip);

Votre IP public changera

0
Viral Prajapati