AWS-cliを使用して外部からEC2インスタンスのパブリックIPアドレスを取得する[閉じる]

AWS-cliを使用して外部からEC2インスタンスのパブリックIPアドレスを取得する[閉じる]

Amazonの弾力性を活用してAWS cliAWS-cli他のCentos 6サーバーにパッケージをインストールしました。数日間この問題を調査してきましたが、Centos ボックスで実行して Amazon EC2 からインスタンスの IP アドレスを取得できる操作コマンドが見つかりませんでした。 EC2 インスタンスが実行中です。

私が見つけた最も関連性の高い情報は、

aws ec2 describe-instances

しかし、このコマンドから得たものは構文を使用した出力と似ています。また、この情報を抽出するためにスイッチ--queryとキーワードのセットを見つけました(そしてすぐに失われました)。しかし、コマンドを実行すると、--queryパラメータが認識されないという応答が出ます。 Amazonのcli参照を確認しましたが、パラメータのみを許可しているようで、--filter例がまったく機能しないようです。

これを行う方法を知っている人はいますか?

編集する週末に見つかった問題に関する追加情報です。インスタンスからパブリック DNS 情報を取得するには、まずインスタンスに接続する方法が必要です。何をしても、私が所有しているインスタンスに関する情報を取得できません。

$ ec2-describe-instances i-b78a096f
sanity-check: Your system clock is 50 seconds behind.
+----------------------------+---------------------------------------------+
|            Code            |                   Message                   |
+----------------------------+---------------------------------------------+
| InvalidInstanceID.NotFound | The instance ID 'i-b78a096f' does not exist |
+----------------------------+---------------------------------------------+

私は私と変数に正しい変数名が正しく割り当てられていることを知ってAWS_ACCESS_KEYいますAWS_SECRET_KEY。インスタンスIDはAWSマネジメントコンソールからコピーして貼り付けました。テストするために新しいインスタンスを起動し、同じコマンドをテストしましたが、結果は変わりませんでした。ただし、コマンドを実行すると、ec2-describe-regions問題なく利用可能な地域のリストを表示できます。私は今困惑しています。

答え1

EC2インスタンスはインスタンスIDで識別でき、インスタンスを停止して起動してもインスタンスIDは変更されません。したがって、インスタンスIDがあり、そのIPアドレスが必要な場合はこれを試すことができます。

パブリックIPアドレスの場合:

aws ec2 describe-instances --instance-ids i-b78a096f | grep PublicIpAddress | awk -F ":" '{print $2}' | sed 's/[",]//g'

プライベートIPアドレスの場合:

aws ec2 describe-instances --instance-ids i-b78a096f | grep PrivateIpAddress  | head -1 | awk -F ":" '{print $2}' | sed 's/[",]//g'

しかし、個人的に同じことをPythonで試してみる方がはるかに良いと思います。以前の組織ではPython botoライブラリを使用して同じロジックを実装していましたが、はるかに簡単で管理が簡単でした。

仮想環境を設定します。

#!/usr/bin/env bash

set -e
HOME_DIR=/home/$(whoami)

#Dependencies
sudo apt-get install ncurses-devel patch openssl openssl-devel zlib-devel

# Install python locally
mkdir -p $HOME_DIR/src
mkdir -p $HOME_DIR/.localpython
cd $HOME_DIR/src
wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
tar -zxvf Python-2.7.8.tgz
cd Python-2.7.8
./configure --prefix=$HOME_DIR/.localpython 
make
make install

# Install virtualenv locally
cd $HOME_DIR/src
wget --no-check-certificate https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.11.6.tar.gz#md5=f61cdd983d2c4e6aeabb70b1060d6f49
tar -zxvf virtualenv-1.11.6.tar.gz
cd virtualenv-1.11.6/
~/.localpython/bin/python setup.py install 


# Create a test virtual environment
mkdir -p $HOME_DIR/virtualenvs
cd $HOME_DIR/virtualenvs
~/.localpython/bin/virtualenv my_virtual_env --python=$HOME_DIR/.localpython/bin/python2.7
cd my_virtual_env
source bin/activate
pip install awscli

答え2

次のようにstart-instancesコマンドを使用してインスタンスを起動/停止できます。stop-instances

aws ec2 stop-instances --instance-ids i-b78a096f
aws ec2 start-instances --instance-ids i-b78a096f

AWS cliゾーン情報がファイルから読み込まれるため、コマンドラインにゾーン名を指定していないことがわかります。<user_home_directory>/.aws/configファイルは次のとおりです。

[default]
output = json
region = us-east-1

このファイルのゾーン属性値は、インスタンスが存在するゾーンと異なる可能性があります。したがって、あなたが呼び出す地域は、あなたが持っているべきだと思う地域とは異なります。動作しない他の理由はありません。

AWS cliが使用するリージョン値を確認するには、aws configureコマンドラインから呼び出すだけです。 aws キー、シークレット、ゾーン、および応答形式に関する情報を求めるプロンプトが表示されます。また、値を指定しないと、使用する値が表示されます。

AWS cliAWS私はこのようなシナリオでコマンドラインで管理する方がはるかに高速です。しかし、私は多くのリソースを同時に可視化できるオープンソースツールを作成しましたAWS。このツールが役に立ちます。

https://github.com/pistonportal/custom-turbine/wiki/Running-and-operating-Turbine-app 

たとえば、VPC Designerこのツールを開き、VPC にまたがるすべてのアベイラビリティーゾーン、どのサブネットがどのアベイラビリティーゾーンにあるか、どの仮想マシンがどのサブネット上にあるかを確認できます。これを行うには、AWSコンソールで複数回クリックする必要があるか、単に不可能です。

現在はインスタンスを起動/停止できませんが、今後数日以内に提供される予定です。

関連情報