Trouver des points de terminaison AWS ElastiCache avec Java


J'essaie d'obtenir par programme une liste de points de terminaison ElastiCache à partir de mon application Java à l'aide du dernier SDK Java AWS. Les choses ne semblent pas fonctionner-je peux trouver un CacheCluster valide, mais lorsque je liste ses nœuds, il est vide. Voici mon code:

CacheCluster cc = it.next();

System.out.println("Cache node type: " + cc.getCacheNodeType());
System.out.println("Number cache nodes: " + cc.getNumCacheNodes());

List<CacheNode> listCache = cc.getCacheNodes();

System.out.println("List size: " + listCache.size());

Lorsque je l'exécute, j'obtiens la sortie suivante:

Cache node type: cache.m1.small 
Number cache nodes: 1 
List size: 0

, Cela semble si simple, mais ne semble pas fonctionner. J'ai démarré un cluster ElastiCache avec un seul nœud, mais la liste apparaît vide lorsque j'appelle getCacheNodes(). J'ai j'ai essayé d'exécuter ce code localement et sur une instance EC2, et j'obtiens la même chose les deux fois.

Des idées sur ce que je pourrais faire de mal?

Author: Sander Smith, 2012-03-14

1 answers

Selon la réponse de l'équipe AWS à Impossible d'obtenir les nœuds de cache du cluster ElastiCache, vous devrez utiliser l'indicateur ShowDetails facultatif pour obtenir les informations CacheNodesvia le paramètre Class DescribeCacheClustersRequestde la méthode describeCacheClusters(). En regardant de plus près, il n'y a pas de drapeau ShowDetails, bien qu'il soit documenté pour cette classe en effet:

Un indicateur ShowDetails optionnel peut être utilisé pour récupérer les détails informations sur les nœuds de cache associés au cluster de cache. Les détails incluent l'adresse DNS et le port pour le point de terminaison du nœud de cache.

Vraisemblablement, cela cible en fait setShowCacheNodeInfo () , qui est Un indicateur facultatif qui peut être inclus dans la demande DescribeCacheCluster pour récupérer les informations des nœuds de cache .

La réponse de l'équipe AWS semble donc imprécise et ne répond pas à la question, pourquoi la méthodegetCacheNodes () de Class CacheCluster ne renvoie pas cette information, les deux étant assez inhabituels pour de tels messages.

Quoi qu'il en soit, vous voudrez peut-être simplement essayer la méthode getCacheNodes () de Class CacheCluster comme retourné par la méthode getCacheClusters () de Class DescribeCacheClustersResult à la place, espérons que cela fonctionne comme annoncé (c'est-à-dire que je n'ai pas essayé moi-même).

Bonne chance!


Mise à jour

Voici la ponceuse de code utilisée avec succès pour atteindre son objectif, confirmant l'approche décrite ci-dessus:

AmazonElastiCacheClient client = new AmazonElastiCacheClient(credentials);
DescribeCacheClustersRequest dccRequest = new DescribeCacheClustersRequest();
dccRequest.setShowCacheNodeInfo(true);

DescribeCacheClustersResult clusterResult = client.describeCacheClusters(dccRequest);

Les pièces manquantes doivent être similaires à sa solution initiale, par exemple:

List<CacheCluster> cacheClusters = clusterResult.getCacheClusters();
for (CacheCluster cacheCluster : cacheClusters) {
    List<CacheNode> cacheNodes = cacheCluster.getCacheNodes();

    System.out.println("List size: " + cacheNodes.size());
}
 7
Author: Steffen Opel, 2012-03-14 13:18:41