Transcript
Page 1: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

November 13, 2014 | Las Vegas, NV

Chetan Dandekar, Senior Product Manager, Amazon Web Services

Page 2: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

Effectiveness

SafetyVisibility

Page 3: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

Design

Templates

App code

Stacks

Iterate

Page 4: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 5: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

Frontend Services

• Consumer Website, Seller Website, Mobile Backend

Backend Services

• Search, Payments, Reviews, Recommendations

Shared Services

• CRM DBs, Common Monitoring /Alarms, Subnets, Security Groups

Base Network

• VPCs, Internet Gateways, VPNs, NATs

Identity • IAM Users, Groups, Roles

Page 6: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

Food Catalog website

Ordering website

Customer DB service

Inventory service

Recommendations service

Analytics service Fulfillment

service

Payment

service

Page 7: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

Food Catalog website

Customer DB service

“Outputs” : {

“CustDBEndPoint”

}

“Parameters” : {

“CustDBEndPoint”

}

Page 8: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

Website1

“Resources” : {“ELB”,“AutoScaling”,“RDS”

}Website2

“Resources” : {“ELB”,“AutoScaling”,“DynamoDB”

}

ELB_AND_AS

“Resources” : {“ELB”,“AutoScaling”

}

Website1

“Resources” : {“NestedStack”,“RDS”

}

Website2

“Resources” : {“NestedStack”,“DynamoDB”

}

Page 9: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 10: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 11: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

AWS::EC2::VPC::Id

List<AWS::EC2::Subnet::Id>

List<AWS::EC2::SecurityGroup::Id>

AWS::EC2::KeyPair::KeyName

Param

validation

Stack creation workflow

App

instances

Page 12: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

MinLength

MaxLength

AllowedPattern

Page 13: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

User/RoleAWS

CloudFormation

Amazon EC2

Amazon RDS

AmazonElastiCache

Etc.

Permissions to call AWS

CloudFormation

Permissions to create ALL

resources specified in a template

Page 14: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

AccountAWS

CloudFormation

Amazon EC2

Amazon RDS

ElastiCache

Etc.

# of AWS CloudFormation stacks

# of EC2 instances, total

Amazon RDS storage, etc.

Page 15: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 16: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

Metadata

AWS::CloudFormation::Init

Declarative

Reusable

Grouping & Ordering

Debug-able

Updatable

Highly Secure

BIOT™ (Bring In Other Tools)

ow.ly/DiNCm

Page 17: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 18: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 19: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

"packages" : {}, "sources" : {}, "files" : {}, "groups" : {}, "users" : {},"commands" : {}, "services" : {}

Page 20: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

commands

recipe[wordpress]

ow.ly/DiNkz

Page 21: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

Securely download

Choose auth type.

IAM Role is

recommended

ow.ly/DqkrB

Page 22: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

UserData

Get the latest

Trigger CloudFormation::Init

Signal completion

Page 23: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

awslogs

awslogs

cfn-logs.conf

file = /var/log/cfn-init.loglog_stream_name = {instance_id}/cfn-init.log

file = /var/log/cfn-hup.loglog_stream_name = {instance_id}/cfn-hup.log

ow.ly/E0zO3

Page 24: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

ow.ly/E0zO3

Page 25: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 26: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

arn:aws:cloudformation:us-west-2:123456789:stack/BaseNet*

arn:aws:cloudformation:us-west-2:123456789:stack/FrontEnd*

Frontend Services

• Consumer Website, Seller Website, Mobile Backend

Backend Services

• Search, Payments, Reviews, Recommendations

Shared Services

• CRM DBs, Common Monitoring /Alarms, Subnets, Security Groups

Base Network

• VPCs, Internet Gateways, VPNs, NATs

Identity • IAM Users, Groups, Roles

Page 27: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 28: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

{"Effect" : "Deny","Action" : [ "ec2:TerminateInstances"

],"Condition": {"Null": {

"ec2:ResourceTag/*cloudformation*" : "true" }},"Resource" : "*"

}

Page 29: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

Description

Metadata

Comment

Page 30: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 31: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

Faster

Cost-efficient

Simpler state and

data migration

No touching of a

working stack

Page 32: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

Textual diff

Refs and Fn::GetAtts

No Interruption Some Interruption Replacement

IAM permissions

drift

AWS Config CloudFormer

Page 33: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

“Do not update the databases”

"Effect" : "Deny",

"Principal" : "*",

"Action" : "Update:*",

"Resource" : "*",

"Condition" : {

"StringEquals" : {

"ResourceType" : ["AWS::RDS::DBInstance",

"AWS::Redshift::Cluster"]

}

}

“Okay to update, unless the update requires replacement”

"Effect" : "Deny",

"Principal": "*",

"Action" : "Update:Replace",

"Resource" : "LogicalResourceId/MyInstance"

ow.ly/E0Njj

Page 34: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

ow.ly/E9nLm

Page 35: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 36: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

security group

Auto Scaling group

EC2

instance

Elastic Load

Balancing

ElastiCache

Memcached cluster

Software pkgs,

config, & dataCloudWatch

alarmsWeb Analytics

ServiceAWS

CloudFormation

Provision

AWS Resources

“Create, Update,

Rollback, or Delete”

Worker

Amazon

SNS Topic

Stack Events

Page 37: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

security group

Auto Scaling group

EC2

instance

Elastic Load

Balancing

ElastiCache

Memcached cluster

Software pkgs,

config, & dataCloudWatch

alarmsWeb Analytics

ServiceAWS

CloudFormation

Provision

AWS Resources

“Success” + Metadata

“Create, Update, Rollback, or Delete”

+ Metadata

ow.ly/DiSXp

Page 38: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 39: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 40: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 41: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

https://console.aws.amazon.com/cost-reports/home?#/custom

ow.ly/E0Ny9

Page 42: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014
Page 43: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

AWS CloudFormationIssue Tracker

App Developers

DevOps Engineers,Infrastructure Developers,

Systems Engineers

Dev Env Code Repo

App Pkgs, AWS CloudFormation Templates, Etc.

CI Server

Test

Staging

ProdCode Review

"Infra-as-Code"

App Code & Templates

Page 44: (APP304) AWS CloudFormation Best Practices | AWS re:Invent 2014

http://bit.ly/awsevals

ow.ly/Ec28a ow.ly/EdMyk


Top Related