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

How do I capture the IP address of a CLI-started EC2 instance for subsequent use?

我经常需要从命令行启动 AWS EC2 实例以通过 SSH 工作,并且想编写一个简短的脚本来执行此操作,但我停留在最基本的步骤上。

例如,我可以开始

aws ec2 start-instances --instance-ids i-84Sd8jdf 

并希望继续获取分配给实例的 IP 地址并将其用作环境变量或脚本变量以执行后续操作,例如

ssh ubuntu@<theIP>

scp ubuntu@<theIP>:~/soruce_stuff/* ~/dest_folder/

但我不知道如何从 start-instances 命令或其他命令发出的任何 JSON 中获取 IP 地址。

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

bash中的一个例子(基于这个优秀的answer),其中实例启动,脚本休眠(在中指定),以及public 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 }'|head -1