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