Amazonの弾力性を利用し、AWS cli
を使用してインスタンスをオンラインまたはオフにしようとしています。しかし、ご存知のように、システムをオフラインにして、元に戻すたびに、新しいIPアドレスが割り当てられます。他の場所にあるCentos 6サーバーにAWS-cli
パッケージをインストールしました。私はこれを何日も調査してきましたが、Centosボックスから発行してAmazon EC2でインスタンスのIPアドレスを取得できる有効なコマンドを見つけることができません。 EC2インスタンスが稼働しています。
私が見つけた最も関連する情報は
aws ec2 describe-instances
しかし、このコマンドから返されるのは、使用法の構文出力のようなものだけです。この情報を抽出するためのスイッチ--query
の後に一連のキーワードが続いていることも発見しました(すぐに失いました)。しかし、そのコマンドは私に--query
は認められた議論ではないと言って返答しました。私はこのコマンドについてAmazonのcliリファレンスを確認しましたが、それが受け入れると思われるパラメーターは--filter
のみであり、例はあまり役に立ちません。
誰かがこれを達成する方法を知っていますか?
[〜#〜] edit [〜#〜]週末に発見した問題の詳細。インスタンスからパブリック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
コマンドを実行すると、問題なく使用できるリージョンリストが表示されます。私は今、困惑しています。
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
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
を管理する方がはるかに高速であるこのようなシナリオでは、AWS cli
を使用します。ただし、多くのAWS
リソースを同時に視覚化するためのオープンソースツールを作成しました。
https://github.com/pistonportal/custom-turbine/wiki/Running-and-operating-Turbine-app
たとえば、このツールでVPC Designer
を開き、VPCがまたがるすべてのアベイラビリティゾーン、どのサブネットがどのアベイラビリティゾーンにあり、どのVMがどのサブネットにあるかを確認できます。これは、AWS
コンソールで多くのクリックを必要とするか、まったく不可能であるかのいずれかです。
現在、インスタンスを開始/停止する機能はありませんが、今後数日で利用可能になります。