AWS CLI has a nifty useful command to enable/opt-in a region on your account – account enable-region e.g.
aws account enable-region --region-name af-south-1
There is a caveat though – this command only begins to enable the region. The process could take a while, but the command exits right away. But what if you need do something with the region when it becomes available? Say you’re running a script and you need to bootstrap the region when its enabled. You need some way to wait for the enablement to finish. Luckily there is another AWS CLI command that lets you check the status of the region – ec2 describe-regions, e.g.
aws ec2 describe-regions --region-names af-south-1
One of the properties it return is whether the region is enabled/opted-in or not. Combining this with a little of bash magic – we can come up with a waiting routine:
aws account enable-region --region-name af-south-1 state=not-opted-in until [ "$state" = "opted-in" ] do echo Waiting for af-south-1... sleep 5 state=$(aws ec2 describe-regions --region-names af-south-1 --query "Regions.OptInStatus" --output text) done
Here on the Line 1 we execute command that initiates enabling region. And the rest is a loop: wait 5 seconds, and check the status of the region. Loop exits when the status becomes “opted-in”. At this point we know that the region has been enabled, and can proceed with using it.