2013-03-19 8 views
10

EC2とbotoの初心者です。私はインスタンスを実行しているEC2を持っており、例えば以下のようなシェルコマンドを実行したい。 apt-get update〜botoBoto ec2インスタンスでシェルコマンドを実行

run_instancesコマンドで多くを検索して解決策を見つけましたが、インスタンスが既に起動されている場合はどうなりますか?

可能かどうかわかりません。この参照の手掛かりは大きな助けになるでしょう。

+0

編集担当者Steffenありがとうございます。訂正を覚えています。 – vibhor

+0

関連:[SSHを使用してEC2でコマンドを実行する方法はboto3を使用しますか?](https://stackoverflow.com/q/42645196/55075) – kenorb

答えて

20

boto.manage.cmdshellモジュールを使用してこれを行うことができます。それを使用するには、paramikoパッケージがインストールされている必要があります。それの使用の簡単な例:

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') 

メモリから入力されたが、私はそれが正しいことだと思うました。

同様の機能を持つFabric(http://docs.fabfile.org/)もチェックアウトできますが、はるかに洗練された機能も備えています。

+0

ガーネットに感謝します。チェックする必要があるようです。 – vibhor

+0

リンクと簡潔な比較をお寄せください – Forethinker

+0

'' cmdshell''を使いたい場合は、paramikoをインストールする必要があります。一部のプラットフォームにインストールするのが難しく、 '' cmdshell''がbotoの機能の中核ではないため、botoに依存するものとしてリストされていません。 – garnaat

2

私はあなたの要件にファブリックを使用できると思います。ファブリックラッパーを一度チェックしてください。ファブリックライブラリを使用してリモートサーバシェルでコマンドを実行できます。

非常に使いやすく、botoとfabricの両方を統合できます。一緒に彼らは輝かしい働きをします。

プラスn個のノードに対して同じコマンドを実行できます。私はあなたの要求になると信じています

ちょうどそれをチェックアウトしてください。

+0

あなたが正しいと思っています。本当に大きな助けとなりましたが、私の問題はすでに解決されました。私はファブリックのみを使用しています。とにかく私の側から+1と私もあなたの答えを受け入れる – vibhor

関連する問題