Obtenez de l'instance-id de l'instance EC2 via Java
J'ai une AWS EC2 instance déployée, et j'ai besoin de savoir son IP publique. Howver, à savoir que je dois d'abord connaître l'instance-id de mon exemple.
Objectif:
- J'ai un code Java s'exécutant dans mon cas, et je veux que la figure de code la propriété intellectuelle actuelle ou à l'Instance-ID de l'instance où il est en cours d'exécution.
Après la lecture d'Amazon de la documentation, je suis venu avec une méthode Java qui renvoie l'adresse IP de toutes les instances, mais ce n'est pas ce que je veux, je veux une méthode qui retourne uniquement l'instance-id ou l'adresse IP publique de l'instance en cours d'exécution.
/**
* Returns a list with the public IPs of all the active instances, which are
* returned by the {@link #getActiveInstances()} method.
*
* @return a list with the public IPs of all the active instances.
* @see #getActiveInstances()
* */
public List<String> getPublicIPs(){
List<String> publicIpsList = new LinkedList<String>();
//if there are no active instances, we return immediately to avoid extra
//computations.
if(!areAnyActive())
return publicIpsList;
DescribeInstancesRequest request = new DescribeInstancesRequest();
request.setInstanceIds(instanceIds);
DescribeInstancesResult result = ec2.describeInstances(request);
List<Reservation> reservations = result.getReservations();
List<Instance> instances;
for(Reservation res : reservations){
instances = res.getInstances();
for(Instance ins : instances){
LOG.info("PublicIP from " + ins.getImageId() + " is " + ins.getPublicIpAddress());
publicIpsList.add(ins.getPublicIpAddress());
}
}
return publicIpsList;
}
Dans ce code j'ai un tableau avec l'instance-id de toutes les instances actives, mais je ne sais pas si ils sont "moi" ou pas. Donc je suppose que ma première étape serait de savoir qui je suis, et puis à demander mon adresse IP publique.
Est il y a un changement je peux le faire à la méthode précédente pour me donner ce que je veux? Est-il un moyen plus efficace de faire cela?
OriginalL'auteur Flame_Phoenix | 2014-04-15
Vous devez vous connecter pour publier un commentaire.
je ne suis pas un java gars. Cependant, ci-dessous mon code ruby n'a imprimer leInstance ID
etPublic IP
de larunning
d'instances que vous avez besoin de:Tout ce que vous devez faire est de trouver différentes Méthodes/appels dans la documentation SDK JAVA. Le code que vous devriez regarder est:
Dans le bloc ci-dessus, je suis en filtrant uniquement les de course instances.
ET
- Dessus du bloc de code, je suis en cours d'exécution 2
for
boucles et en tirantinstance.instance_id
ainsi queinstance.public_ip_address
.Comme SDK JAVA et Ruby SDK sont à la fois la frappe de la même AWS EC2 Api, il doit y avoir des paramètres similaires dans le SDK JAVA.
Aussi, Votre question est vague dans le sens, vous exécutez le code JAVA à partir de l'instance dont l'id d'Instance est-elle nécessaire? OU Êtes-vous en cours d'exécution du code java à partir d'une instance à l'autre et veulent tirer de l'instance-id de toutes les instances en cours d'exécution?Mise à JOUR:
La mise à jour de la réponse à la question a changé:
AWS fournit des méta-données de service sur chaque instance qui est lancé. Vous pouvez interroger les méta-données de service localement pour trouver les informations nécessaires.
Forme bash promp, ci-dessous fourni par le commandement de l'instance-id et l'adresse IP publique de l'instance
Vous avez besoin de savoir comment vous allez récupérer des données à partir de ci-dessus Url en java. À ce stade , vous en avez assez de l'information et de la pertinence de cette question à l'égard de AWS, parce que maintenant ce n'est plus un JAVA question sur la façon de sondage ci-dessus Url.
J'ai édité ma question d'être aussi clair que possible. J'espère que toutes sortes de flou sont partis maintenant !
voir la mise à jour.
Faux, ce n'est pas un SDK JAVA inconvénient, en Effet, AWS EC2 Api de ne pas avoir une telle fonctionnalité. Il ne peut être tiré à l'aide de méta-données de service comme mentionné ci-dessus et je ne trouve rien de bizarre à ce sujet.
Qui est correct. Comme l'Api elle-même n'ont pas cette fonction, aucun des Kits de développement logiciel peut le faire. Méta-données de service est le seul moyen de sortir.
OriginalL'auteur slayedbylucifer
Je dirais/recommandons l'utilisation du kit SDK AWS pour Java.
À moins de Java8 est disponible, ce sera ont besoin de plus de boilercode. Mais en bref, c'est tout.
https://stackoverflow.com/a/30317951/525238 a déjà mentionné la EC2MetadataUtils, mais ceci comprend le code de travail aussi.
espérons que cela a fonctionné pour vous, mais j'obtiens une erreur dans AmazonEC2ClientBuilder.defaultClient (). dire non à une telle méthode disponible
Peut-être qu'ils ont changé l'api depuis 2015-il y a 3 ans. A noter également pour référence ultérieure: Ce est tout au sujet de AWS SDK Java v1.
OriginalL'auteur knalli
Vous voulez le com.amazonaws.util.EC2MetadataUtils classe à partir de l'aws-java sdk.
OriginalL'auteur heldeen
Pour répondre à la question initiale de
Vous pouvez le faire en Java en utilisant l'API AWS:
Cela va directement vous donner l'adresse IP publique si celle-ci existe
OriginalL'auteur Max Dor
La méthode suivante sera de retour l'Instance EC2 ID.
À partir d'ici, vous pouvez procéder de la façon suivante pour obtenir des informations telles que l'adresse IP (dans cet exemple, le privateIP):
Vous pouvez également l'utiliser pour obtenir toutes sortes d'informations pertinentes sur l'instance en cours le programme Java est en cours d'exécution; il suffit de remplacer
.getPrivateIPAddress()
avec la commande get pour l'info que vous cherchez. Liste des commandes disponibles peuvent être trouvés ici.Edit: Pour ceux qui pourraient hésiter à recourir à ce en raison de "l'inconnu" URL; voir Amazon de la documentation sur le sujet, qui pointe directement vers cette même URL, la seule différence étant qu'ils le font via l'interface cli plutôt qu'à l'intérieur de Java. http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
OriginalL'auteur DGolberg
Vous pouvez utiliser le service de métadonnées pour aller chercher ce à l'aide de HTTP:
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html
ex:
Il semble que votre réponse est bonne, après tout. C'est la seule façon de résoudre ce problème, comme l'AWS EC2 API ne prend pas en charge cette fonctionnalité dans une autre façon. bravo++ Sir.
OriginalL'auteur faermanj
J'ai été avoir besoin de faire de nombreuses opérations avec Amazon EC2. Ensuite, j'ai mis en place une classe utilitaire pour ces opérations. Peut-être il peut être util pour quelqu'un qui arrive ici. J'ai mis en place à l'aide de SDK AWS pour java version 2. Les opérations sont:
AmazonEC2 classe:
AmazonCredentials classe:
CloudManagementException classe:
informations d'identification.profils:
J'espère aider o/
OriginalL'auteur Filipe Luchini