When using the AWS CLI, did you know you could run a command that waits for a specific resource or condition to occur before moving on to the next? For example, you might want to write a script that starts an EC2 instance and then, only after it is up and running, perform an additional task. Without the
aws ec2 wait command, this could be a bit of a challenge involving a loop and some polling for the state. However, this is actually kind of trivial with the
wait command at our disposal.
For some of my development work, I keep around an EC2 instance that has some of the tools and applications I need installed. However, I don’t need to have it running all the time — just when I am working with it. Here is a little snippet from a script I use to start that instance:
instance_id=$(terraform output instance-id) echo "starting $instance_id..." aws ec2 start-instances --instance-ids $instance_id aws ec2 wait instance-running --instance-ids $instance_id echo "applying terraform configuration..." terraform apply echo "started."
I use Terraform to provision the instance and associated resources. In this case, there is an associated Route 53 DNS A record that I like to update with the instance’s public IP address. I want to wait for the instance to start so that Terraform can grab an accurate IP and update the DNS record.
You can see that after I call
aws ec2 start-instances, I then run a wait command.
aws ec2 wait instance-running --instance-ids $instance_id
In this case, I am waiting for the
instance-running condition. The command will block until the EC2 instance reaches that state. Once it does, the script will resume.
There are a variety of conditions you can wait on. Many of the various
aws commands have
wait subcommands. You can get the list of conditions you can wait on by looking at the help for that command. For example,
aws ec2 wait help or
aws rds wait help.
If you are working a lot with the AWS CLI, you will quickly find the
wait command invaluable and wonder how you managed without it.