Amazon web services 如何捕获CLI启动的EC2实例的IP地址以供后续使用?
我经常需要从命令行启动要使用的AWS EC2实例,然后通过SSH进行操作,我想编写一个简短的脚本来实现这一点,但我仍停留在最基本的步骤上 例如,我可以开始学习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 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