2012-10-06 5 views
6

Ich fange gerade mit Boto zu arbeiten, um Amazon Cloud zu verbinden.Wie stelle ich eine Verbindung zu einer vorhandenen CloudSearch-Domäne in Boto her?

habe ich die Beispiele arbeiten, aber ich kann keine Beispiele nicht zu einer vorhandenen Domäne zu verbinden finden, alle Beispiele eine neue Domäne erstellen.

Stochern, fand ich get_domain, aber das schlägt fehl, wenn ich es auf dem Verbindungsobjekt aufrufen.

>>> conn.get_domain('foo') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'Layer2' object has no attribute 'get_domain' 

Irgendwelche Vorschläge, wie ich eine Verbindung zu einer bestehenden Domäne herstellen kann?

[Bearbeiten] ich von diesem Autor: http://boto.cloudhackers.com/en/latest/cloudsearch_tut.html

Also, alles, was ich mache dieses

import boto 
conn = boto.connect_cloudsearch() 

Antwort

10

Sie können entweder conn.list_domains() tun, die eine Liste von Domain für alle Ihre Objekte zurückkehren aktuelle Domänen oder Sie können conn.lookup('foo') tun, die ein Domain-Objekt für den angegebenen Domänennamen zurückgibt.

+0

Dank! (Ich habe einen früheren Kommentar gelöscht, der nicht funktionierte; es war ein Bedienungsfehler). – ThoughtfulHacking

+1

Anruf Conn.lookup ('name') löst den folgenden Fehler aus: AttributeError: 'Layer2' -Objekt hat kein Attribut 'Lookup'. Wenn ich den Code durchsuche, kann ich in CloudSearch keine Suchmethode finden. – waigani

+0

Hmm. Das cloudsearch.layer2-Modul definiert definitiv eine "Lookup" -Methode. Es hat es seit 2012/08/22, als es mit diesem Commit hinzugefügt wurde (https://github.com/boto/boto/commit/87cc02e496f0f803a07274b8976d14a45663a4ee). Vielleicht verwenden Sie eine ältere Version von Boto? – garnaat

0

dies für mich gearbeitet,
wir nur eine Domain, haben
dom = Domain (con, con.describe_domains() [0])

2

Mit Boto 2,36 ich diese Arbeit bekam durch, einen Blick im Quellcode.

import boto.cloudsearch 
# login to AWS 
conn = boto.connect_cloudsearch2(region="us-west-1", 
       aws_access_key_id='xxxxx', 
       aws_secret_access_key='xxxxx') 


# get the right Domain: 
domain = conn.lookup('toolbox') 

print domain 
7

Dies ist die perfekte Lösung. Ich benutze Boto 2.38.0

Ich hatte das gleiche Problem, die andere konfrontiert sind. Dann habe ich dieses Skript aws Such-Domain zu verbinden und führt bekommen

import boto.cloudsearch2 
from boto.cloudsearch2.layer2 import Layer2 
from boto.cloudsearch2.domain import Domain 

# from boto.cloudsearch.domain import Domain 
conn = boto.cloudsearch2.connect_to_region("xxxxxx", 
       aws_access_key_id='xxxxxxxxxx', 
       aws_secret_access_key='xxxxxxxxx') 

domain_data = conn.describe_domains('domaainname') 

domain_data = (domain_data['DescribeDomainsResponse'] 
          ['DescribeDomainsResult'] 
          ['DomainStatusList']) 

domain = Domain(conn, domain_data[0]) 
search_service = domain.get_search_service() 
results = search_service.search(q="abc") 

print map(lambda x: x, results) 

ich einen Fehler wissen lassen. Ich hoffe, das wird für alle funktionieren.

0

I umgesetzt zunächst die Verbindung der Ansatz Layer2 mit:

Layer2(region='region name').lookup('domain name').

Nach einigen Profilerstellung fand ich jedoch die Latenz beim Erstellen einer Verbindung sehr hoch.

Als ich noch sehr hoch sage, meine ich die Zeit, um eine Verbindung zu schaffen, wurde rivalisierenden die Zeit, um tatsächlich die Abfrage durchzuführen und eine Antwort (> 500 ms in den meisten Fällen) zu bekommen.

Meine Lösung war daher die Domain direkt zu erstellen. Hinweis: Diese Lösung ist spröde, aber es funktioniert Abnahme Latenz signifikant

Sie die Domain, indem Sie so etwas wie schaffen können (viele dieser Werte können, indem Sie aws cloudsearch describe-domains zu finden):

 domain = Domain(boto.cloudsearch2.connect_to_region('region name'), { 
      'Created': True, 
      'Deleted': False, 
      'Processing': False, 
      'RequiresIndexDocuments': False, 
      'DomainId': 'domain_id', 
      'DomainName': 'domain_name', 
      'SearchInstanceCount': 2, 
      'SearchPartitionCount': 1, 
      'DocService': { 
       'Endpoint': 'doc_service_endpoint', 
      }, 
      'ARN': 'domain_arn', 
      'SearchService': { 
       'Endpoint': 'search_service_endpoint' 
      } 
     })