5 votes

Adresse IP EC2 : Comment un serveur web peut-il identifier l'adresse IP d'un serveur de données au démarrage ?

J'ai un arrangement simple à 2 niveaux - un serveur web (Websphere hébergé sous Windows), et un serveur de données Oracle. Le serveur web doit se connecter au serveur de base de données oracle.

J'essaie d'écrire un script qui

  1. Créez une instance EC2 avec la base de données Oracle.
  2. Fait apparaître une instance EC2 avec Websphere
  3. Configure l'instance de Websphere pour communiquer avec la base de données.

Je suis bloqué au point 3. Chaque fois que j'exécute le script, le serveur de la BD obtient une adresse ip différente. Comment puis-je dire à mon instance Websphere "Utilisez cette adresse IP pour la base de données" ?

Quelques solutions que j'ai envisagées -

  1. Configurer Websphere pour se connecter à un nom d'hôte. Lorsque le serveur de base de données est mis en service et qu'une adresse IP lui est attribuée, mettez à jour l'enregistrement DNS (probablement la route 53).
  2. Passer l'adresse ip du serveur DB comme donnée utilisateur lors du lancement de l'instance websphere, et exécuter un script de démarrage pour mettre à jour la configuration.
  3. Utiliser des adresses IP élastiques - mais cela nécessiterait d'acheminer le trafic db sur Internet, non ?

Chacune de ces solutions semble demander plus de travail que d'habitude. Y a-t-il quelque chose qui m'échappe ? Quelle est la méthode standard pour résoudre ce problème ?

EDIT pour Bounty La solution des adresses IP élastiques fonctionne, mais je n'aime pas utiliser des adresses IP publiques gaspillées sur des serveurs qui ne devraient jamais se connecter à Internet. Je suis curieux de connaître toute autre solution que vous avez employée pour résoudre ce problème.

1voto

Shyam Sundar C S Points 1063

La méthode standard consiste à utiliser un outil de gestion de la configuration comme Chef ou Puppet.

Comme j'ai beaucoup d'expérience dans l'utilisation de Chef, je vais parler de l'utilisation de Chef ici.

Dans votre cas, voici comment cela devrait se passer. 1) Au démarrage du serveur, chaque serveur (autrement appelé noeud) doit s'enregistrer auprès du serveur chef. 2) Chaque nœud se verra attribuer une liste d'exécution. Une liste d'exécution contient de nombreux rôles (par exemple : db, web, etc) et/ou des recettes. 3) Chaque rôle aura des recettes pour démarrer et configurer ce composant logiciel.

C'est plus ou moins similaire dans le monde de Puppet aussi.

Liens : Chef Marionnette

Notez que tous ces logiciels sont OpenSource. Opcode propose également une version hébergée de Chef Server. Vous pouvez l'essayer.

0voto

SEBASZCHAN Points 397

Une chose simple que j'aime faire est d'ajouter une balise au serveur.

ec2-create-tags <instance-id> --tag Purpose=DB

Vous pouvez ensuite interroger le serveur en fonction de la balise dans un script powershell en utilisant l'AWSSDKforNET. La méthode New-GenericList que j'ai crée simplement une nouvelle liste dans powershell en utilisant la réflexion.

$client = Create-EC2-Client

# Request a list of all the current AmazonEC2 Instances
$request = New-Object -TypeName Amazon.EC2.Model.DescribeInstancesRequest
$filterList = New-GenericList Amazon.EC2.Model.Filter

# Create a new filter to only get servers with a purpose of webserver
$filter = New-Object -TypeName Amazon.EC2.Model.Filter
$filter = $filter.WithName("tag:Purpose");
$filter = $filter.WithValue("DB");
$filterList.Add($filter);

# Add the filter to the request
$request = $request.WithFilter($filter);
$response = $client.DescribeInstances($request)

$servers = @()
foreach ($instance in $response.DescribeInstancesResult.Reservation)
{
    if($instance.RunningInstance[0].InstanceState.Name -eq "running")
    {
        $servers += $instance.RunningInstance[0].PrivateIpAddress.ToString()
    }
}

$servers

0voto

Thomas Points 251

Regardez http://www.exapark.com/product.html Cet outil met à jour le fichier hosts avec les adresses IP internes actuelles des instances en cours d'exécution.

-1voto

Juergen Brendel Points 27

Vous pourriez utiliser vCider qui vous permet de disposer de réseaux privés virtuels, même entre fournisseurs de nuages (vous pouvez ainsi disposer d'un domaine de diffusion de couche 2 entre votre centre de données, EC2 ou Rackspace, par exemple). Vous avez également un contrôle total sur l'attribution des adresses IP, ce qui signifie que vous aurez une adresse fixe pour votre hôte. En gros, cela vous permet de créer votre propre VPC (nuage privé virtuel), tout en vous gardant indépendant de fournisseurs particuliers et en vous offrant une fonctionnalité de couche 2 complète.

Vous pouvez vous inscrire aquí . L'utilisation de jusqu'à 8 hôtes est gratuite. vCider offre également quelques fonctions de sécurité qui peuvent vous intéresser.

Ah, et concernant votre prime : Vous pouvez utiliser des adresses IP privées dans votre réseau virtuel, ainsi vous n'aurez pas à gaspiller des adresses publiques ou même à exposer vos serveurs via une adresse publique. Sachez qu'une machine EC2 aura toujours une adresse IP publique, mais avec vCider, vous pouvez faire quelque chose appelé "cloud cloaking", qui coupe complètement tout le trafic sur cette adresse publique, faisant essentiellement disparaître votre hôte de l'Internet public.

Je dois mentionner ici que je travaille pour vCider, mais ne laissez pas cela vous empêcher de considérer vCider. Si vous avez des questions, n'hésitez pas à m'en faire part.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X