2013-03-19 19 views
10

Jestem początkującym użytkownikiem EC2 i boto. Mam instancję uruchomioną EC2 i chcę wykonać polecenie powłoki, np. apt-get update poprzez boto.Boto Wykonaj polecenie powłoki na instancji EC2

Szukałem dużo i znalazłem rozwiązanie, używając user_data w poleceniu run_instances, ale co, jeśli instancja jest już uruchomiona?

Nie wiem nawet, czy to możliwe. Każda wskazówka w tym odnośniku będzie bardzo pomocna.

+0

Dzięki Steffen za montaż. Zapamięta poprawki. – vibhor

+0

Powiązane: [Jak korzystać z SSH i uruchamiać polecenia w EC2 przy użyciu boto3?] (Https://stackoverflow.com/q/42645196/55075) – kenorb

Odpowiedz

20

Do tego celu można użyć modułu boto.manage.cmdshell. Aby z niego skorzystać, musisz mieć zainstalowany pakiet Paramiko. Prosty przykład użycia:

import boto.ec2 
from boto.manage.cmdshell import sshclient_from_instance 

# Connect to your region of choice 
conn = boto.ec2.connect_to_region('us-west-2') 

# Find the instance object related to my instanceId 
instance = conn.get_all_instances(['i-12345678'])[0].instances[0] 

# Create an SSH client for our instance 
# key_path is the path to the SSH private key associated with instance 
# user_name is the user to login as on the instance (e.g. ubuntu, ec2-user, etc.) 
ssh_client = sshclient_from_instance(instance, 
            '<path to SSH keyfile>', 
            user_name='ec2-user') 
# Run the command. Returns a tuple consisting of: 
# The integer status of the command 
# A string containing the output of the command 
# A string containing the stderr output of the command 
status, stdout, stderr = ssh_client.run('ls -al') 

To zostało wpisane z pamięci, ale uważam, że jest poprawne.

Można również sprawdzić Fabric (http://docs.fabfile.org/), który ma podobną funkcjonalność, ale ma również znacznie bardziej zaawansowane funkcje i możliwości.

+0

dzięki bardzo dużo. wygląda dobrze, trzeba to sprawdzić. – vibhor

+0

Dzięki za link i zwięzłe porównanie – Forethinker

+0

Jeśli chcesz użyć '' cmdshell'', musisz zainstalować paramiko. Nie jest wymieniony jako zależność w boto, ponieważ może być trudny do zainstalowania na niektórych platformach, a '' cmdshell'' nie jest podstawą do funkcjonalności. – garnaat

2

Myślę, że możesz użyć materiału do swoich wymagań. Wystarczy raz sprawdzić opakowanie tkaniny. Możesz wykonać polecenie na zdalnej powłoce serwera poprzez bibliotekę tkanin.

Jest bardzo łatwy w użyciu i można zintegrować zarówno boto, jak i materiał. Razem działają znakomicie.

Plus to samo polecenie może zostać wykonane na n liczby węzłów. Które według mnie mogą być Twoje wymagania.

Po prostu to sprawdź.

+0

Tak, george, że byłeś poprawny. To była naprawdę świetna pomoc, ale mój problem został już rozwiązany. i używam tylko tkaniny. W każdym razie +1 z mojej strony i również akceptuję twój oddzwonienie – vibhor