The state of the art here is to use AWS CloudFormation to bring up the instance.
With CloudFormation you can specify the base AMI and other resources, such as an Elastic IP, and AWS will either bring up the stack or rollback the entire transaction if something goes wrong.
Then, you specify the script to set up the AMI as a userdata script, and that will be run as root when the instance boots.
The downside here is that the CloudFormation syntax is very funky, and 100% AWS specific. This might justify sticking with your strategy of simple fabric scripts.
The state of the art here is to use AWS CloudFormation to bring up the instance.
With CloudFormation you can specify the base AMI and other resources, such as an Elastic IP, and AWS will either bring up the stack or rollback the entire transaction if something goes wrong.
Then, you specify the script to set up the AMI as a userdata script, and that will be run as root when the instance boots.
The downside here is that the CloudFormation syntax is very funky, and 100% AWS specific. This might justify sticking with your strategy of simple fabric scripts.