使用 AWS-cli 从外部获取 EC2 实例的公共 IP 地址

Mel*_*lan 7 command-line aws

我正在尝试利用 Amazon 的弹性并使用AWS cli. 但如您所知,每次您使系统脱机并使其恢复生机时,它都会附带一个新的 IP 地址。我AWS-cli在位于其他地方的 Centos 6 服务器上安装了软件包。我已经研究这个好几天了,但找不到可以从我的 Centos 机器发出并在 Amazon EC2 上获取实例的 IP 地址的工作命令。EC2 实例已启动并正在运行。

我找到的最相关的信息是

aws ec2 describe-instances
Run Code Online (Sandbox Code Playgroud)

但是我从这个命令中得到的只是一个用法语法输出。我还发现(并很快丢失了)一个开关,--query后跟一组关键字来提取此信息。但是那个命令给了我一个回应,说--query不是一个公认的论点。我检查了亚马逊对此命令的 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 |
+----------------------------+---------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

我知道 myAWS_ACCESS_KEYAWS_SECRET_KEYvariables 已正确分配给它们正确的变量名称。实例 ID 已从 AWS 管理控制台复制并粘贴。为了测试,我启动了一个新实例并针对它测试了相同的命令,没有不同的结果。虽然,当我运行ec2-describe-regions命令时,我可以毫无问题地看到可用的区域列表。我现在傻眼了。

小智 9

一个 ec2 实例可以通过它的 instance-id 来标识,无论你停止和启动实例多少次,它都不会改变。因此,如果您有实例 ID 并且需要其 IP 地址,则可以尝试此操作。

对于公共 IP 地址:

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

对于私有 IP 地址:

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

不过,我个人认为如果你在 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
Run Code Online (Sandbox Code Playgroud)