Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何捕获CLI启动的EC2实例的IP地址以供后续使用?_Amazon Web Services_Amazon Ec2_Aws Cli - Fatal编程技术网

Amazon web services 如何捕获CLI启动的EC2实例的IP地址以供后续使用?

Amazon web services 如何捕获CLI启动的EC2实例的IP地址以供后续使用?,amazon-web-services,amazon-ec2,aws-cli,Amazon Web Services,Amazon Ec2,Aws Cli,我经常需要从命令行启动要使用的AWS EC2实例,然后通过SSH进行操作,我想编写一个简短的脚本来实现这一点,但我仍停留在最基本的步骤上 例如,我可以开始学习 aws ec2 start-instances --instance-ids i-84Sd8jdf 并希望通过获取分配给实例的IP地址并将其用作环境变量或脚本变量来执行后续操作,如 ssh ubuntu@<theIP> ssh ubuntu@ 或 scp ubuntu@:~/soruce\u stuff/*~/dest

我经常需要从命令行启动要使用的AWS EC2实例,然后通过SSH进行操作,我想编写一个简短的脚本来实现这一点,但我仍停留在最基本的步骤上

例如,我可以开始学习

aws ec2 start-instances --instance-ids i-84Sd8jdf 
并希望通过获取分配给实例的IP地址并将其用作环境变量或脚本变量来执行后续操作,如

ssh ubuntu@<theIP>
ssh ubuntu@

scp ubuntu@:~/soruce\u stuff/*~/dest\u文件夹/
但我不知道如何从
start instances
命令或其他命令发出的任何JSON中获取IP地址

如何编写EC2实例的启动脚本、为要分配的IP配戴并捕获分配的IP地址以供后续使用?

bash中的一个示例(基于此优秀的示例),其中实例启动,脚本休眠(以秒为单位指定),公共IP地址保存到一个局部变量:

aws ec2 start-instances --instance-ids i-aaaa1111
sleep 10
ec2Address=$(aws ec2 describe-instances --instance-ids i-aaaa1111 --query "Reservations[*].Instances[*].PublicIpAddress" --output=text)
要验证:

echo $ec2Address
11.1.111.111

Amazon提供了等待条件来等待实例准备就绪,然后才能对其执行其他任务。下面是一个可能对您有所帮助的示例

aws ec2 start-instances --instance-ids $instance_id
aws ec2 wait instance-running --instance-ids $instance_id
aws ec2 describe-instances --instance-ids $instance_id --output text|grep ASSOCIATION |awk '{print $3}'|head -1

可能的副本。只要在实例启动后不久调用
descripe instances
,按照此链接答案中的示例执行即可。@AnthonyNeace:如何从IP地址列表中获取(a)我可以(b)分配给环境变量(例如)的刚启动实例的IP地址?既然您知道实例id,您可以使用
descripe instances
上的
--instance ids
参数向下筛选到单个实例的结果,然后使用该答案中的查询字符串向下筛选到您要查找的单个地址。@AnthonyNeace:很好!这不是一个完全重复的相关问题;因此,我将以此作为答案(特别是如果它另外显示了如何将管道或任何东西连接到env变量和/或脚本变量)。更妙的是:如果有办法让脚本等待IP地址可用。
aws ec2 start-instances --instance-ids $instance_id
aws ec2 wait instance-running --instance-ids $instance_id
aws ec2 describe-instances --instance-ids $instance_id --output text|grep ASSOCIATION |awk '{print $3}'|head -1