11 March 2018
I'm not sure I like AWS CloudFormation (CF). Beside the obvious lock-in I currently would rather use TerraForm or similar to describe what infrastructure I want. However CF will always have the most complete features especially for new AWS services, so it's probably good to know. And one day you'd possibly have to modify a CF configuration file, so it's a really good thing to know if you work with AWS.
Anyway, my observations:
- I do not recommend to use JSON for CF. Use YAML. It's much shorter and much easier to read. I usually like JSON, but here it's outclassed by YAML.
-
As a PowerUser, to use CF you need some extra permissions:
- iam:CreateInstanceProfile
- iam:DeleteInstanceProfile
- iam:PassRole
- iam:DeleteRole
- iam:AddRoleToInstanceProfile
- iam:RemoveRoleFromInstanceProfile
Here are the command lines to use:
aws cloudformation create-stack --template-body file://OneEC2AndDNS.yaml --stack-name OneEC2 \ --parameters ParameterKey=InstanceType,ParameterValue=t2.nano --capabilities CAPABILITY_IAM
To see what was created (takes about 4 min 20 sec):
aws cloudformation describe-stacks --stack-name=OneEC2-6
gives you this output (some data replaced by X):
aws cloudformation describe-stacks --stack-name=OneEC2-6 "Stacks": [ { "StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXXXXX:stack/OneEC2-6/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "Description": "Build EC2 instance with current AWS Linux and create a DNS entry in aws.qw2.org", "Parameters": [ { "ParameterValue": "aws.qw2.org", "ParameterKey": "HostedZone" }, { "ParameterValue": "t2.nano", "ParameterKey": "InstanceType" } ], "Tags": [], "Outputs": [ { "Description": "Fully qualified domain name", "OutputKey": "DomainName", "OutputValue": "i-034dcbb1c60d1e062.ap-northeast-1.aws.qw2.org" } ], "CreationTime": "2018-03-11T12:57:50.851Z", "Capabilities": [ "CAPABILITY_IAM" ], "StackName": "OneEC2-6", "NotificationARNs": [], "StackStatus": "CREATE_COMPLETE", "DisableRollback": false, "RollbackConfiguration": {} } ] }
And to delete it all (takes about 3 min 30 sec):
aws cloudformation delete-stack --stack-name=OneEC2-6