SlideShare a Scribd company logo
1 of 70
Download to read offline
Journey Through the Cloud
ianmas@amazon.com
@IanMmmm
Ian Massingham — Technical Evangelist
Dev & Test on AWS
Journey Through the Cloud
Learn from the journeys taken by other AWS customers
Discover best practices that you can use to bootstrap your projects
Common use cases and adoption models for the AWS Cloud
Development & Test on AWS
Explore the benefits of AWS with a ‘non-production’ use case

Create agility in development & test whilst ‘learning cloud’

Exercise elasticity and automation to real advantage
Agenda
Why AWS for development & test workloads?
AWS Services to support Dev & Test workloads
Developing & Testing Business Applications on AWS
Common Dev & Test Patterns
Resources you can use to learn more
WHY AWS FOR DEVELOPMENT
AND TEST WORKLOADS?
COMMON TRAITS
COMMON TRAITS
NUMEROUS
DISPOSABLE
COMMON TRAITS
NUMEROUS
DISPOSABLE
Projects start and stop frequently
Required for short period of time
Golden masters preferred
COMMON TRAITS
NUMEROUS
DISPOSABLE
Many environments support an app
Preservation of known configurations
Overlapping development cycles
DEVELOPMENT & TEST IN THE CLOUD
NUMEROUS
DISPOSABLE
Many environments support an app
Preservation of known configurations
Overlapping development cycles
Projects start and stop frequently
Required for short period of time
Golden masters preferred
DEVELOPMENT & TEST IN THE CLOUD
Infrastructure as Code
Deploy to a known state, quickly
DEVELOPMENT & TEST IN THE CLOUD
Unlimited Elastic Capacity
Infrastructure as Code
Take lots of it when you need it
Deploy to a known state, quickly
DEVELOPMENT & TEST IN THE CLOUD
On-demand Charging ModelUnlimited Elastic Capacity
Infrastructure as Code
Take lots of it when you need it Throw it away when you don’t
Deploy to a known state, quickly
DEVELOPMENT & TEST IN THE CLOUD
On-demand Charging ModelUnlimited Elastic Capacity
Infrastructure as Code Durable Storage
Take lots of it when you need it Throw it away when you don’t
Preserve it for future reference & reuseDeploy to a known state, quickly
AWS SERVICES TO SUPPORT
DEV & TEST WORKLOADS
EC2 + VPC CloudFormation
Tools to Create & Manage an Elastic Datacenter
AMIs, snapshots,

bootstrapping
Elastic Beanstalk
Managed Standard

Application Containers
Declaratively define

AWS environments
Tools to Create & Manage an Elastic Datacenter
AMIs, snapshots,

bootstrapping
Declaratively define

AWS environments
Using core AWS
features to set up an
environment to meet
your needs
Created using the
AWS console or
through simple
scripting
Managed Standard

Application Containers
Give development &
test environments to
developers, controlled
directly from IDEs
Configure containers to
meet your needs
through properties
Take full control of
complex environments
using Cloud Formation
template language
Generate environment
specifications as you
build software
Tools to Create & Manage an Elastic Datacenter
AMIs, snapshots,

bootstrapping
Declaratively define

AWS environments
Using core AWS
features to set up an
environment to meet
your needs
Created using the
AWS console or
through simple
scripting
Managed Standard

Application Containers
Give development &
test environments to
developers, controlled
directly from IDEs
Configure containers to
meet your needs
through properties
Take full control of
complex environments
using Cloud Formation
template language
Generate environment
specifications as you
build software
Amazon EC2
Generic image
Customised
building block
Creating re-usable golden images
Extending an on-premises environment
Amazon VPC
Extending an on-premises environment
Amazon VPC
Extending an on-premises environment
Amazon VPC
Extending an on-premises environment
Amazon VPC
Amazon VPC
Extending an on-premises environment
Tools to Create & Manage an Elastic Datacenter
AMIs, snapshots,

bootstrapping
Declaratively define

AWS environments
Using core AWS
features to set up an
environment to meet
your needs
Created using the
AWS console or
through simple
scripting
Managed Standard

Application Containers
Give development &
test environments to
developers, controlled
directly from IDEs
Configure containers to
meet your needs
through properties
Take full control of
complex environments
using Cloud Formation
template language
Generate environment
specifications as you
build software
AWS Elastic
Beanstalk
AWS Elastic
Beanstalk
AWS Elastic
Beanstalk
AWS Elastic
Beanstalk
AWS Elastic
Beanstalk
AWS Elastic
Beanstalk
AWS Elastic
Beanstalk
AWS Elastic
Beanstalk
AWS Elastic
Beanstalk
Tools to Create & Manage an Elastic Datacenter
AMIs, snapshots,

bootstrapping
Declaratively define

AWS environments
Using core AWS
features to set up an
environment to meet
your needs
Created using the
AWS console or
through simple
scripting
Managed Standard

Application Containers
Give development &
test environments to
developers, controlled
directly from IDEs
Configure containers to
meet your needs
through properties
Take full control of
complex environments
using Cloud Formation
template language
Generate environment
specifications as you
build software
CLOUDFORMATION

TEMPLATE
AWS
CloudFormation
PROCEDURAL

DEFINITION
Create it programmatically
KNOWN
CONFIGURATION
Store stack configuration in source
control
PARAMETER DRIVEN
Dynamic and user-driven
templates
COLLABORATION
Share templates with ease as
they are just text files
CLOUDFORMATION

TEMPLATE
Find out more at : aws.amazon.com/cloudformation
{	
  
	
  	
  "AWSTemplateFormatVersion"	
  :	
  "2010-­‐09-­‐09",	
  
	
  	
  "Description"	
  :	
  "AWS	
  CloudFormation	
  Sample	
  Template	
  WordPress_Multi_AZ:	
  WordPress	
  is	
  web	
  software	
  you	
  can	
  use	
  to	
  create	
  a	
  beautiful	
  website	
  or	
  blog.	
  This	
  template	
  
installs	
  a	
  highly-­‐available,	
  scalable	
  WordPress	
  deployment	
  using	
  a	
  multi-­‐az	
  Amazon	
  RDS	
  database	
  instance	
  for	
  storage.	
  It	
  demonstrates	
  using	
  the	
  AWS	
  CloudFormation	
  bootstrap	
  
scripts	
  to	
  deploy	
  WordPress.	
  **WARNING**	
  This	
  template	
  creates	
  an	
  Amazon	
  EC2	
  instance,	
  an	
  Elastic	
  Load	
  Balancer	
  and	
  an	
  Amazon	
  RDS	
  database	
  instance.	
  You	
  will	
  be	
  billed	
  for	
  
the	
  AWS	
  resources	
  used	
  if	
  you	
  create	
  a	
  stack	
  from	
  this	
  template.",	
  
	
  	
  "Parameters"	
  :	
  {	
  
	
  	
  	
  	
  "KeyName":	
  {	
  
	
  	
  	
  	
  	
  	
  "Description"	
  :	
  "Name	
  of	
  an	
  existing	
  EC2	
  KeyPair	
  to	
  enable	
  SSH	
  access	
  to	
  the	
  instances",	
  
	
  	
  	
  	
  	
  	
  "Type":	
  "AWS::EC2::KeyPair::KeyName",	
  
	
  	
  	
  	
  	
  	
  "ConstraintDescription"	
  :	
  "must	
  be	
  the	
  name	
  of	
  an	
  existing	
  EC2	
  KeyPair."	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "InstanceType"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  "Description"	
  :	
  "WebServer	
  EC2	
  instance	
  type",	
  
	
  	
  	
  	
  	
  	
  "Type"	
  :	
  "String",	
  
	
  	
  	
  	
  	
  	
  "Default"	
  :	
  "m1.small",	
  
	
  	
  	
  	
  	
  	
  "AllowedValues"	
  :	
  [	
  "t1.micro",	
  "t2.micro",	
  "t2.small",	
  "t2.medium",	
  "m1.small",	
  "m1.medium",	
  "m1.large",	
  "m1.xlarge",	
  "m2.xlarge",	
  "m2.2xlarge",	
  "m2.4xlarge",	
  
"m3.medium",	
  "m3.large",	
  "m3.xlarge",	
  "m3.2xlarge",	
  "c1.medium",	
  "c1.xlarge",	
  "c3.large",	
  "c3.xlarge",	
  "c3.2xlarge",	
  "c3.4xlarge",	
  "c3.8xlarge",	
  "c4.large",	
  "c4.xlarge",	
  
"c4.2xlarge",	
  "c4.4xlarge",	
  "c4.8xlarge",	
  "g2.2xlarge",	
  "r3.large",	
  "r3.xlarge",	
  "r3.2xlarge",	
  "r3.4xlarge",	
  "r3.8xlarge",	
  "i2.xlarge",	
  "i2.2xlarge",	
  "i2.4xlarge",	
  
"i2.8xlarge",	
  "hi1.4xlarge",	
  "hs1.8xlarge",	
  "cr1.8xlarge",	
  "cc2.8xlarge",	
  "cg1.4xlarge"]	
  
,	
  
	
  	
  	
  	
  	
  	
  "ConstraintDescription"	
  :	
  "must	
  be	
  a	
  valid	
  EC2	
  instance	
  type."	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "SSHLocation":	
  {	
  
	
  	
  	
  	
  	
  	
  "Description":	
  "The	
  IP	
  address	
  range	
  that	
  can	
  be	
  used	
  to	
  SSH	
  to	
  the	
  EC2	
  instances",	
  
	
  	
  	
  	
  	
  	
  "Type":	
  "String",	
  
	
  	
  	
  	
  	
  	
  "MinLength":	
  "9",	
  
	
  	
  	
  	
  	
  	
  "MaxLength":	
  "18",	
  
	
  	
  	
  	
  	
  	
  "Default":	
  "0.0.0.0/0",	
  
	
  	
  	
  	
  	
  	
  "AllowedPattern":	
  "(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})/(d{1,2})",	
  
	
  	
  	
  	
  	
  	
  "ConstraintDescription":	
  "must	
  be	
  a	
  valid	
  IP	
  CIDR	
  range	
  of	
  the	
  form	
  x.x.x.x/x."	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "DBClass"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  "Description"	
  :	
  "Database	
  instance	
  class",	
  
	
  	
  	
  	
  	
  	
  "Type"	
  :	
  "String",	
  
	
  	
  	
  	
  	
  	
  "Default"	
  :	
  "db.m1.small",	
  
	
  	
  	
  	
  	
  	
  "AllowedValues"	
  :	
  [	
  "db.t1.micro",	
  "db.m1.small",	
  "db.m1.medium",	
  "db.m1.large",	
  "db.m1.xlarge",	
  "db.m2.xlarge",	
  "db.m2.2xlarge",	
  "db.m2.4xlarge",	
  "db.m3.medium",	
  
"db.m3.large",	
  "db.m3.xlarge",	
  "db.m3.2xlarge",	
  "db.r3.large",	
  "db.r3.xlarge",	
  "db.r3.2xlarge",	
  "db.r3.4xlarge",	
  "db.r3.8xlarge",	
  "db.m2.xlarge",	
  "db.m2.2xlarge",	
  
"db.m2.4xlarge",	
  "db.cr1.8xlarge"]	
  
,	
  
	
  	
  	
  	
  	
  	
  "ConstraintDescription"	
  :	
  "must	
  select	
  a	
  valid	
  database	
  instance	
  type."	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "DBName"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  "Default":	
  "wordpressdb",	
  
	
  	
  	
  	
  	
  	
  "Description"	
  :	
  "The	
  WordPress	
  database	
  name",	
  
	
  	
  	
  	
  	
  	
  "Type":	
  "String",	
  
	
  	
  	
  	
  	
  	
  "MinLength":	
  "1",	
  
	
  	
  	
  	
  	
  	
  "MaxLength":	
  "64",	
  
	
  	
  	
  	
  	
  	
  "AllowedPattern"	
  :	
  "[a-­‐zA-­‐Z][a-­‐zA-­‐Z0-­‐9]*",	
  
	
  	
  	
  	
  	
  	
  "ConstraintDescription"	
  :	
  "must	
  begin	
  with	
  a	
  letter	
  and	
  contain	
  only	
  alphanumeric	
  characters."	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "DBUser"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  "NoEcho":	
  "true",	
  
	
  	
  	
  	
  	
  	
  "Description"	
  :	
  "The	
  WordPress	
  database	
  admin	
  account	
  username",	
  
	
  	
  	
  	
  	
  	
  "Type":	
  "String",	
  
	
  	
  	
  	
  	
  	
  "MinLength":	
  "1",	
  
	
  	
  	
  	
  	
  	
  "MaxLength":	
  "16",	
  
	
  	
  	
  	
  	
  	
  "AllowedPattern"	
  :	
  "[a-­‐zA-­‐Z][a-­‐zA-­‐Z0-­‐9]*",	
  
	
  	
  	
  	
  	
  	
  "ConstraintDescription"	
  :	
  "must	
  begin	
  with	
  a	
  letter	
  and	
  contain	
  only	
  alphanumeric	
  characters."	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "DBPassword"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  "NoEcho":	
  "true",	
  
	
  	
  	
  	
  	
  	
  "Description"	
  :	
  "The	
  WordPress	
  database	
  admin	
  account	
  password",	
  
	
  	
  	
  	
  	
  	
  "Type":	
  "String",	
  
	
  	
  	
  	
  	
  	
  "MinLength":	
  "8",	
  
	
  	
  	
  	
  	
  	
  "MaxLength":	
  "41",	
  
	
  	
  	
  	
  	
  	
  "AllowedPattern"	
  :	
  "[a-­‐zA-­‐Z0-­‐9]*",	
  
	
  	
  	
  	
  	
  	
  "ConstraintDescription"	
  :	
  "must	
  contain	
  only	
  alphanumeric	
  characters."	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "MultiAZDatabase":	
  {	
  
	
  	
  	
  	
  	
  	
  "Default":	
  "false",	
  
	
  	
  	
  	
  	
  	
  "Description"	
  :	
  "Create	
  a	
  Multi-­‐AZ	
  MySQL	
  Amazon	
  RDS	
  database	
  instance",	
  
	
  	
  	
  	
  	
  	
  "Type":	
  "String",	
  
	
  	
  	
  	
  	
  	
  "AllowedValues"	
  :	
  [	
  "true",	
  "false"	
  ],	
  
	
  	
  	
  	
  	
  	
  "ConstraintDescription"	
  :	
  "must	
  be	
  either	
  true	
  or	
  false."	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "WebServerCapacity":	
  {	
  
	
  	
  	
  	
  	
  	
  "Default":	
  "1",	
  
	
  	
  	
  	
  	
  	
  "Description"	
  :	
  "The	
  initial	
  number	
  of	
  WebServer	
  instances",	
  
	
  	
  	
  	
  	
  	
  "Type":	
  "Number",	
  
	
  	
  	
  	
  	
  	
  "MinValue":	
  "1",	
  
	
  	
  	
  	
  	
  	
  "MaxValue":	
  "5",	
  
	
  	
  	
  	
  	
  	
  "ConstraintDescription"	
  :	
  "must	
  be	
  between	
  1	
  and	
  5	
  EC2	
  instances."	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "DBAllocatedStorage"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  "Default":	
  "5",	
  
	
  	
  	
  	
  	
  	
  "Description"	
  :	
  "The	
  size	
  of	
  the	
  database	
  (Gb)",	
  
	
  	
  	
  	
  	
  	
  "Type":	
  "Number",	
  
	
  	
  	
  	
  	
  	
  "MinValue":	
  "5",	
  
	
  	
  	
  	
  	
  	
  "MaxValue":	
  "1024",	
  
	
  	
  	
  	
  	
  	
  "ConstraintDescription"	
  :	
  "must	
  be	
  between	
  5	
  and	
  1024Gb."	
  
	
  	
  	
  	
  }	
  
	
  	
  },	
  
	
  	
  "Mappings"	
  :	
  {	
  
	
  	
  	
  	
  "AWSInstanceType2Arch"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  "t1.micro"	
  	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "PV64"	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "t2.micro"	
  	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "t2.small"	
  	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "t2.medium"	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "m1.small"	
  	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "PV64"	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "m1.medium"	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "PV64"	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "m1.large"	
  	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "PV64"	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "m1.xlarge"	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "PV64"	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "m2.xlarge"	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "PV64"	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "m2.2xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "PV64"	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "m2.4xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "PV64"	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "m3.medium"	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "m3.large"	
  	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "m3.xlarge"	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "m3.2xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "c1.medium"	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "PV64"	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "c1.xlarge"	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "PV64"	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "c3.large"	
  	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "c3.xlarge"	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "c3.2xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "c3.4xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "c3.8xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "c4.large"	
  	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "c4.xlarge"	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "c4.2xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "c4.4xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "c4.8xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "g2.2xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVMG2"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "r3.large"	
  	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "r3.xlarge"	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "r3.2xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "r3.4xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "r3.8xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "i2.xlarge"	
  	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "i2.2xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "i2.4xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "i2.8xlarge"	
  	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "hi1.4xlarge"	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "hs1.8xlarge"	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "cr1.8xlarge"	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "cc2.8xlarge"	
  :	
  {	
  "Arch"	
  :	
  "HVM64"	
  	
  }	
  
	
  	
  	
  	
  }	
  
,	
  
	
  	
  	
  	
  "AWSRegionArch2AMI"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  "us-­‐east-­‐1"	
  	
  	
  	
  	
  	
  	
  	
  :	
  {"PV64"	
  :	
  "ami-­‐8e682ce6",	
  "HVM64"	
  :	
  "ami-­‐146e2a7c",	
  "HVMG2"	
  :	
  "ami-­‐7200461a"},	
  
	
  	
  	
  	
  	
  	
  "us-­‐west-­‐2"	
  	
  	
  	
  	
  	
  	
  	
  :	
  {"PV64"	
  :	
  "ami-­‐9fc29baf",	
  "HVM64"	
  :	
  "ami-­‐dfc39aef",	
  "HVMG2"	
  :	
  "ami-­‐0b78203b"},	
  
	
  	
  	
  	
  	
  	
  "us-­‐west-­‐1"	
  	
  	
  	
  	
  	
  	
  	
  :	
  {"PV64"	
  :	
  "ami-­‐f49089b1",	
  "HVM64"	
  :	
  "ami-­‐42908907",	
  "HVMG2"	
  :	
  "ami-­‐244b5361"},	
  
	
  	
  	
  	
  	
  	
  "eu-­‐west-­‐1"	
  	
  	
  	
  	
  	
  	
  	
  :	
  {"PV64"	
  :	
  "ami-­‐7b3db00c",	
  "HVM64"	
  :	
  "ami-­‐9d23aeea",	
  "HVMG2"	
  :	
  "ami-­‐4d7cf03a"},	
  
	
  	
  	
  	
  	
  	
  "eu-­‐central-­‐1"	
  	
  	
  	
  	
  :	
  {"PV64"	
  :	
  "ami-­‐0600331b",	
  "HVM64"	
  :	
  "ami-­‐04003319",	
  "HVMG2"	
  :	
  "NOT_SUPPORTED"},	
  
	
  	
  	
  	
  	
  	
  "ap-­‐northeast-­‐1"	
  	
  	
  :	
  {"PV64"	
  :	
  "ami-­‐3c87993d",	
  "HVM64"	
  :	
  "ami-­‐18869819",	
  "HVMG2"	
  :	
  "ami-­‐2e90892f"},	
  
	
  	
  	
  	
  	
  	
  "ap-­‐southeast-­‐1"	
  	
  	
  :	
  {"PV64"	
  :	
  "ami-­‐58ba910a",	
  "HVM64"	
  :	
  "ami-­‐96bb90c4",	
  "HVMG2"	
  :	
  "ami-­‐3e78526c"},	
  
	
  	
  	
  	
  	
  	
  "ap-­‐southeast-­‐2"	
  	
  	
  :	
  {"PV64"	
  :	
  "ami-­‐1500742f",	
  "HVM64"	
  :	
  "ami-­‐d50773ef",	
  "HVMG2"	
  :	
  "ami-­‐315e2a0b"},	
  
	
  	
  	
  	
  	
  	
  "sa-­‐east-­‐1"	
  	
  	
  	
  	
  	
  	
  	
  :	
  {"PV64"	
  :	
  "ami-­‐fd9925e0",	
  "HVM64"	
  :	
  "ami-­‐af9925b2",	
  "HVMG2"	
  :	
  "NOT_SUPPORTED"},	
  
	
  	
  	
  	
  	
  	
  "cn-­‐north-­‐1"	
  	
  	
  	
  	
  	
  	
  :	
  {"PV64"	
  :	
  "ami-­‐8a1d8fb3",	
  "HVM64"	
  :	
  "ami-­‐981d8fa1",	
  "HVMG2"	
  :	
  "NOT_SUPPORTED"}	
  
	
  	
  	
  	
  }	
  
	
  	
  },	
  
	
  	
  "Conditions"	
  :	
  {	
  
	
  	
  	
  	
  "Is-­‐EC2-­‐VPC"	
  	
  	
  	
  	
  :	
  {	
  "Fn::Or"	
  :	
  [	
  {"Fn::Equals"	
  :	
  [{"Ref"	
  :	
  "AWS::Region"},	
  "eu-­‐central-­‐1"	
  ]},	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {"Fn::Equals"	
  :	
  [{"Ref"	
  :	
  "AWS::Region"},	
  "cn-­‐north-­‐1"	
  ]}]},	
  
	
  	
  	
  	
  "Is-­‐EC2-­‐Classic"	
  :	
  {	
  "Fn::Not"	
  :	
  [{	
  "Condition"	
  :	
  "Is-­‐EC2-­‐VPC"}]}	
  
	
  	
  },	
  
	
  	
  "Resources"	
  :	
  {	
  
	
  	
  	
  	
  "ElasticLoadBalancer"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  "Type"	
  :	
  "AWS::ElasticLoadBalancing::LoadBalancer",	
  
	
  	
  	
  	
  	
  	
  "Properties"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "AvailabilityZones"	
  :	
  {	
  "Fn::GetAZs"	
  :	
  ""	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "CrossZone"	
  :	
  "true",	
  
	
  	
  	
  	
  	
  	
  	
  	
  "LBCookieStickinessPolicy"	
  :	
  [	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "PolicyName"	
  :	
  "CookieBasedPolicy",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "CookieExpirationPeriod"	
  :	
  "30"	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  ],	
  
	
  	
  	
  	
  	
  	
  	
  	
  "Listeners"	
  :	
  [	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "LoadBalancerPort"	
  :	
  "80",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "InstancePort"	
  :	
  "80",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Protocol"	
  :	
  "HTTP",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "PolicyNames"	
  :	
  [	
  "CookieBasedPolicy"	
  ]	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  ],	
  
	
  	
  	
  	
  	
  	
  	
  	
  "HealthCheck"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Target"	
  :	
  "HTTP:80/wordpress/wp-­‐admin/install.php",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "HealthyThreshold"	
  :	
  "2",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "UnhealthyThreshold"	
  :	
  "5",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Interval"	
  :	
  "10",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Timeout"	
  :	
  "5"	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "WebServerSecurityGroup"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  "Type"	
  :	
  "AWS::EC2::SecurityGroup",	
  
	
  	
  	
  	
  	
  	
  "Properties"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "GroupDescription"	
  :	
  "Enable	
  HTTP	
  access	
  via	
  port	
  80	
  locked	
  down	
  to	
  the	
  load	
  balancer	
  +	
  SSH	
  access",	
  
	
  	
  	
  	
  	
  	
  	
  	
  "SecurityGroupIngress"	
  :	
  [	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {"IpProtocol"	
  :	
  "tcp",	
  "FromPort"	
  :	
  "80",	
  "ToPort"	
  :	
  "80",	
  "SourceSecurityGroupOwnerId"	
  :	
  {"Fn::GetAtt"	
  :	
  ["ElasticLoadBalancer",	
  
"SourceSecurityGroup.OwnerAlias"]},"SourceSecurityGroupName"	
  :	
  {"Fn::GetAtt"	
  :	
  ["ElasticLoadBalancer",	
  "SourceSecurityGroup.GroupName"]}},	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {"IpProtocol"	
  :	
  "tcp",	
  "FromPort"	
  :	
  "22",	
  "ToPort"	
  :	
  "22",	
  "CidrIp"	
  :	
  {	
  "Ref"	
  :	
  "SSHLocation"}}	
  
	
  	
  	
  	
  	
  	
  	
  	
  ]	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "WebServerGroup"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  "Type"	
  :	
  "AWS::AutoScaling::AutoScalingGroup",	
  
	
  	
  	
  	
  	
  	
  "Properties"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "AvailabilityZones"	
  :	
  {	
  "Fn::GetAZs"	
  :	
  ""	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "LaunchConfigurationName"	
  :	
  {	
  "Ref"	
  :	
  "LaunchConfig"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "MinSize"	
  :	
  "1",	
  
	
  	
  	
  	
  	
  	
  	
  	
  "MaxSize"	
  :	
  "5",	
  
	
  	
  	
  	
  	
  	
  	
  	
  "DesiredCapacity"	
  :	
  {	
  "Ref"	
  :	
  "WebServerCapacity"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "LoadBalancerNames"	
  :	
  [	
  {	
  "Ref"	
  :	
  "ElasticLoadBalancer"	
  }	
  ]	
  
	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "CreationPolicy"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "ResourceSignal"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Timeout"	
  :	
  "PT15M"	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "UpdatePolicy":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "AutoScalingRollingUpdate":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "MinInstancesInService":	
  "1",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "MaxBatchSize":	
  "1",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "PauseTime"	
  :	
  "PT15M",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "WaitOnResourceSignals":	
  "true"	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "LaunchConfig":	
  {	
  
	
  	
  	
  	
  	
  	
  "Type"	
  :	
  "AWS::AutoScaling::LaunchConfiguration",	
  
	
  	
  	
  	
  	
  	
  "Metadata"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "AWS::CloudFormation::Init"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "configSets"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "wordpress_install"	
  :	
  ["install_cfn",	
  "install_wordpress"	
  ]	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "install_cfn"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "files":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "/etc/cfn/cfn-­‐hup.conf":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "content":	
  {	
  "Fn::Join":	
  [	
  "",	
  [	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "[main]n",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "stack=",	
  {	
  "Ref":	
  "AWS::StackId"	
  },	
  "n",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "region=",	
  {	
  "Ref":	
  "AWS::Region"	
  },	
  "n"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ]]},	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "mode"	
  	
  :	
  "000400",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "owner"	
  :	
  "root",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "group"	
  :	
  "root"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "/etc/cfn/hooks.d/cfn-­‐auto-­‐reloader.conf":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "content":	
  {	
  "Fn::Join":	
  [	
  "",	
  [	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "[cfn-­‐auto-­‐reloader-­‐hook]n",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "triggers=post.updaten",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Initn",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "action=/opt/aws/bin/cfn-­‐init	
  -­‐v	
  ",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐stack	
  ",	
  {	
  "Ref"	
  :	
  "AWS::StackName"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐resource	
  LaunchConfig	
  ",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐configsets	
  wordpress_install	
  ",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐region	
  ",	
  {	
  "Ref"	
  :	
  "AWS::Region"	
  },	
  "n"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ]]},	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "mode"	
  	
  :	
  "000400",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "owner"	
  :	
  "root",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "group"	
  :	
  "root"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "services"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "sysvinit"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "cfn-­‐hup"	
  :	
  {	
  "enabled"	
  :	
  "true",	
  "ensureRunning"	
  :	
  "true",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "files"	
  :	
  ["/etc/cfn/cfn-­‐hup.conf",	
  "/etc/cfn/hooks.d/cfn-­‐auto-­‐reloader.conf"]}	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "install_wordpress"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "packages"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "yum"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "php"	
  	
  	
  	
  	
  	
  	
  :	
  [],	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "php-­‐mysql"	
  :	
  [],	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "mysql"	
  	
  	
  	
  	
  :	
  [],	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "httpd"	
  	
  	
  	
  	
  :	
  []	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "sources"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "/var/www/html"	
  :	
  "http://wordpress.org/latest.tar.gz"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "files"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "/tmp/create-­‐wp-­‐config"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "content"	
  :	
  {	
  "Fn::Join"	
  :	
  [	
  "",	
  [	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "#!/bin/bashn",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "cp	
  /var/www/html/wordpress/wp-­‐config-­‐sample.php	
  /var/www/html/wordpress/wp-­‐config.phpn",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "sed	
  -­‐i	
  "s/'database_name_here'/'",{	
  "Ref"	
  :	
  "DBName"	
  },	
  "'/g"	
  wp-­‐config.phpn",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "sed	
  -­‐i	
  "s/'username_here'/'",{	
  "Ref"	
  :	
  "DBUser"	
  },	
  "'/g"	
  wp-­‐config.phpn",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "sed	
  -­‐i	
  "s/'password_here'/'",{	
  "Ref"	
  :	
  "DBPassword"	
  },	
  "'/g"	
  wp-­‐config.phpn",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "sed	
  -­‐i	
  "s/'localhost'/'",{	
  "Fn::GetAtt"	
  :	
  [	
  "DBInstance",	
  "Endpoint.Address"	
  ]	
  },	
  "'/g"	
  wp-­‐config.phpn"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ]]},	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "mode"	
  :	
  "000500",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "owner"	
  :	
  "root",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "group"	
  :	
  "root"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "commands"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "01_configure_wordpress"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "command"	
  :	
  "/tmp/create-­‐wp-­‐config",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "cwd"	
  :	
  "/var/www/html/wordpress"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "services"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "sysvinit"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "httpd"	
  :	
  {	
  "enabled"	
  :	
  "true",	
  "ensureRunning"	
  :	
  "true"	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  "Properties":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "ImageId"	
  :	
  {	
  "Fn::FindInMap"	
  :	
  [	
  "AWSRegionArch2AMI",	
  {	
  "Ref"	
  :	
  "AWS::Region"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {	
  "Fn::FindInMap"	
  :	
  [	
  "AWSInstanceType2Arch",	
  {	
  "Ref"	
  :	
  "InstanceType"	
  },	
  "Arch"	
  ]	
  }	
  ]	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "InstanceType"	
  	
  	
  :	
  {	
  "Ref"	
  :	
  "InstanceType"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "SecurityGroups"	
  :	
  [	
  {"Ref"	
  :	
  "WebServerSecurityGroup"}	
  ],	
  
	
  	
  	
  	
  	
  	
  	
  	
  "KeyName"	
  	
  	
  	
  	
  	
  	
  	
  :	
  {	
  "Ref"	
  :	
  "KeyName"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "UserData"	
  :	
  {	
  "Fn::Base64"	
  :	
  {	
  "Fn::Join"	
  :	
  ["",	
  [	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "#!/bin/bash	
  -­‐xen",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "yum	
  update	
  -­‐y	
  aws-­‐cfn-­‐bootstrapn",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "/opt/aws/bin/cfn-­‐init	
  -­‐v	
  ",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐stack	
  ",	
  {	
  "Ref"	
  :	
  "AWS::StackName"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐resource	
  LaunchConfig	
  ",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐configsets	
  wordpress_install	
  ",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐region	
  ",	
  {	
  "Ref"	
  :	
  "AWS::Region"	
  },	
  "n",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "/opt/aws/bin/cfn-­‐signal	
  -­‐e	
  $?	
  ",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐stack	
  ",	
  {	
  "Ref"	
  :	
  "AWS::StackName"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐resource	
  WebServerGroup	
  ",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐region	
  ",	
  {	
  "Ref"	
  :	
  "AWS::Region"	
  },	
  "n"	
  
	
  	
  	
  	
  	
  	
  	
  	
  ]]}}	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "DBSecurityGroup":	
  {	
  
	
  	
  	
  	
  	
  	
  "Type":	
  "AWS::RDS::DBSecurityGroup",	
  
	
  	
  	
  	
  	
  	
  "Condition"	
  :	
  "Is-­‐EC2-­‐Classic",	
  
	
  	
  	
  	
  	
  	
  "Properties":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "DBSecurityGroupIngress":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "EC2SecurityGroupName":	
  {	
  "Ref":	
  "WebServerSecurityGroup"	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "GroupDescription":	
  "database	
  access"	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "DBEC2SecurityGroup":	
  {	
  
	
  	
  	
  	
  	
  	
  "Type":	
  "AWS::EC2::SecurityGroup",	
  
	
  	
  	
  	
  	
  	
  "Condition"	
  :	
  "Is-­‐EC2-­‐VPC",	
  
	
  	
  	
  	
  	
  	
  "Properties"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "GroupDescription":	
  "Open	
  database	
  for	
  access",	
  
	
  	
  	
  	
  	
  	
  	
  	
  "SecurityGroupIngress"	
  :	
  [{	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "IpProtocol"	
  :	
  "tcp",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "FromPort"	
  :	
  "3306",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "ToPort"	
  :	
  "3306",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "SourceSecurityGroupName"	
  :	
  {	
  "Ref"	
  :	
  "WebServerSecurityGroup"	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  }]	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "DBInstance"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  "Type":	
  "AWS::RDS::DBInstance",	
  
	
  	
  	
  	
  	
  	
  "Properties":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "DBName"	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :	
  {	
  "Ref"	
  :	
  "DBName"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "Engine"	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :	
  "MySQL",	
  
	
  	
  	
  	
  	
  	
  	
  	
  "MultiAZ"	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :	
  {	
  "Ref":	
  "MultiAZDatabase"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "MasterUsername"	
  	
  	
  	
  :	
  {	
  "Ref"	
  :	
  "DBUser"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "MasterUserPassword":	
  {	
  "Ref"	
  :	
  "DBPassword"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "DBInstanceClass"	
  	
  	
  :	
  {	
  "Ref"	
  :	
  "DBClass"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "AllocatedStorage"	
  	
  :	
  {	
  "Ref"	
  :	
  "DBAllocatedStorage"	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  "VPCSecurityGroups":	
  {	
  "Fn::If"	
  :	
  [	
  "Is-­‐EC2-­‐VPC",	
  [	
  {	
  "Fn::GetAtt":	
  [	
  "DBEC2SecurityGroup",	
  "GroupId"	
  ]	
  }	
  ],	
  {	
  "Ref"	
  :	
  "AWS::NoValue"}]},	
  
	
  	
  	
  	
  	
  	
  	
  	
  "DBSecurityGroups":	
  {	
  "Fn::If"	
  :	
  [	
  "Is-­‐EC2-­‐Classic",	
  [	
  {	
  "Ref":	
  "DBSecurityGroup"	
  }	
  ],	
  {	
  "Ref"	
  :	
  "AWS::NoValue"}]}	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
	
  	
  },	
  
	
  	
  "Outputs"	
  :	
  {	
  
	
  	
  	
  	
  "WebsiteURL"	
  :	
  {	
  
	
  	
  	
  	
  	
  	
  "Value"	
  :	
  {	
  "Fn::Join"	
  :	
  ["",	
  ["http://",	
  {	
  "Fn::GetAtt"	
  :	
  [	
  "ElasticLoadBalancer",	
  "DNSName"	
  ]},	
  "/wordpress"	
  ]]},	
  
	
  	
  	
  	
  	
  	
  "Description"	
  :	
  "WordPress	
  Website"	
  
	
  	
  	
  	
  }	
  
	
  	
  }	
  
}
CloudFormation Template to Deploy Wordpress
https://s3-us-west-1.amazonaws.com/cloudformation-templates-us-west-1/WordPress_Multi_AZ.template
Amazon ECS AWS CodeDeploy
Tools to Create & Manage an Elastic Datacenter
Code
Build
Test
aws.amazon.com/ecs/ aws.amazon.com/codedeploy/
DEVELOPING & TESTING BUSINESS
APPLICATIONS ON AWS
Install software in the AWS Cloud or use preconfigured images from the AWS Marketplace
Microsoft SQL Server, Microsoft SharePoint, Microsoft Exchange, SAP HANA, SAP HANA
One, Oracle 11g, PeopleSoft, IBM DB2, the IBM WebSphere family of products are available
License portability allows you to move some existing licenses to the AWS Cloud, refer to the
appropriate pages on the AWS website for details
aws.amazon.com/microsoft
aws.amazon.com/oracle
aws.amazon.com/sap
aws.amazon.com/ibm
COMMON DEV & TEST PATTERNS
Frameworks & Environments
Source Control

Amazon EC2 to run popular source
control systems, integrate with GitHub or
use AWS CodeCommit (coming soon)
Project Management

Add integrated project management
and issue tracking applications from the
AWS Marketplace
Workstations

Provide standard build developer/test
workstations with Amazon WorkSpaces
CI/Build Servers

Use EC2 instances as continuous
integration and build servers
Pattern
SOURCE CODE
REPOSITORY
DNS
CONTINUOUS
INTEGRATION SERVER
PROJECT MANAGEMENT
SERVER
BUILDS
AW
S
M
arketplace
CLOUDFORMATION
TEMPLATE
Testing at Scale
Unit & Regression

Scale up and parallel run unit and
regression plans in a fraction of the time
Load & Performance

Use EC2 instances from the spot
market to generating load and test how
applications perform with auto-scaling
A/B 

Run A/B scenario testing with multiple
replicated stacks
Security

Create sandboxes for aggressive
security testing
Parallel Testing
1 instance for 100 hours
==
100 instances for 1 hour
A/B
Testing
A/B
Testing
Load
Testing
Load
Testing
Load
Testing
Load
Testing
2.4 MILLION PLAYERS
USING AMAZON EC2 TO SIMULATE
DEVELOPMENT & TEST IN THE CLOUD
On-demand Charging ModelUnlimited Elastic Capacity
Infrastructure as Code Durable Storage
Take lots of it when you need it Throw it away when you don’t
Preserve it for future reference & reuseDeploy to a known state, quickly
00:00 01:00 02:00 03:00 04:00 05:00 06:00 07:00 08:00 09:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 21:00 22:00 23:00
Development Environment: CPU Utilisation/Time
00:00 01:00 02:00 03:00 04:00 05:00 06:00 07:00 08:00 09:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 21:00 22:00 23:00
Development Environment: CPU Utilisation/Time
Auto-scaling
by schedule
Auto-scaling
by schedule
00:00 01:00 02:00 03:00 04:00 05:00 06:00 07:00 08:00 09:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 21:00 22:00 23:00
Development Environment: CPU Utilisation/Time
46% Savings
DEVELOPMENT & TEST IN THE CLOUD
On-demand Charging ModelUnlimited Elastic Capacity
Infrastructure as Code Durable Storage
Take lots of it when you need it Throw it away when you don’t
Preserve it for future reference & reuseDeploy to a known state, quickly
Durable Storage
AMIs

Create a catalog of AMIs for each
iteration of an application
Stored in Amazon S3
Templates

Source control infrastructure templates
with every application version
Snapshots

Save disk images with ‘frozen’ data sets
and attach to instances when needed
Stored in Amazon S3
Durable Storage
AMIs

Create a catalog of AMIs for each
iteration of an application
Stored in Amazon S3
Templates

Source control infrastructure templates
with every application version
Snapshots

Save disk images with ‘frozen’ data sets
and attach to instances when needed
Stored in Amazon S3
Enables you to roll back and recreate an environment for any given application version
SUMMARY
The cloud makes software development & testing easy1
You can make significant savings by making use of elasticity2
AWS provides unique tools to help you create & manage environments3
Enables you to operate at a scale & speed beyond traditional infrastructure4
RESOURCES YOU CAN USE
TO LEARN MORE
aws.amazon.com/dev-test/
Certification
aws.amazon.com/certification
Self-Paced Labs
aws.amazon.com/training/

self-paced-labs
Try products, gain new skills, and
get hands-on practice working
with AWS technologies
aws.amazon.com/training
Training
Validate your proven skills and
expertise with the AWS platform
Build technical expertise to
design and operate scalable,
efficient applications on AWS
AWS Training & Certification
LONDON
15 APRIL 2015
aws.amazon.com/summits/london/
Follow
us
for m
ore
events
&
w
ebinars
@AWScloud for Global AWS News & Announcements
@AWS_UKI for local AWS events & news
@IanMmmm
Ian Massingham — Technical Evangelist

More Related Content

What's hot

DevOps for the Enterprise: Automated Testing and Monitoring
DevOps for the Enterprise: Automated Testing and Monitoring DevOps for the Enterprise: Automated Testing and Monitoring
DevOps for the Enterprise: Automated Testing and Monitoring Amazon Web Services
 
Masterclass Webinar - AWS CloudFormation
Masterclass Webinar - AWS CloudFormationMasterclass Webinar - AWS CloudFormation
Masterclass Webinar - AWS CloudFormationAmazon Web Services
 
The AWS DevOps combo (January 2017)
The AWS DevOps combo (January 2017)The AWS DevOps combo (January 2017)
The AWS DevOps combo (January 2017)Julien SIMON
 
AWS re:Invent 2016 recap (part 1)
AWS re:Invent 2016 recap (part 1)AWS re:Invent 2016 recap (part 1)
AWS re:Invent 2016 recap (part 1)Julien SIMON
 
Monitoring Containers at Scale - September Webinar Series
Monitoring Containers at Scale - September Webinar SeriesMonitoring Containers at Scale - September Webinar Series
Monitoring Containers at Scale - September Webinar SeriesAmazon Web Services
 
Running Docker clusters on AWS (November 2016)
Running Docker clusters on AWS (November 2016)Running Docker clusters on AWS (November 2016)
Running Docker clusters on AWS (November 2016)Julien SIMON
 
AWS CloudFormation Best Practices
AWS CloudFormation Best PracticesAWS CloudFormation Best Practices
AWS CloudFormation Best PracticesAmazon Web Services
 
Infrastructure as Code - AWS CloudFormation
Infrastructure as Code - AWS CloudFormationInfrastructure as Code - AWS CloudFormation
Infrastructure as Code - AWS CloudFormationChamila de Alwis
 
(SOV204) Scaling Up to Your First 10 Million Users | AWS re:Invent 2014
(SOV204) Scaling Up to Your First 10 Million Users | AWS re:Invent 2014(SOV204) Scaling Up to Your First 10 Million Users | AWS re:Invent 2014
(SOV204) Scaling Up to Your First 10 Million Users | AWS re:Invent 2014Amazon Web Services
 
AWS Infrastructure as Code - September 2016 Webinar Series
AWS Infrastructure as Code - September 2016 Webinar SeriesAWS Infrastructure as Code - September 2016 Webinar Series
AWS Infrastructure as Code - September 2016 Webinar SeriesAmazon Web Services
 
AWS May Webinar Series - Deep Dive: Infrastructure as Code
AWS May Webinar Series - Deep Dive: Infrastructure as CodeAWS May Webinar Series - Deep Dive: Infrastructure as Code
AWS May Webinar Series - Deep Dive: Infrastructure as CodeAmazon Web Services
 
ARC204 AWS Infrastructure Automation - AWS re: Invent 2012
ARC204 AWS Infrastructure Automation - AWS re: Invent 2012ARC204 AWS Infrastructure Automation - AWS re: Invent 2012
ARC204 AWS Infrastructure Automation - AWS re: Invent 2012Amazon Web Services
 
AWS OpsWorks Under the Hood (DMG304) | AWS re:Invent 2013
AWS OpsWorks Under the Hood (DMG304) | AWS re:Invent 2013AWS OpsWorks Under the Hood (DMG304) | AWS re:Invent 2013
AWS OpsWorks Under the Hood (DMG304) | AWS re:Invent 2013Amazon Web Services
 
ECS & ECR Deep Dive - 김기완 솔루션즈 아키텍트 :: AWS Container Day
ECS & ECR Deep Dive - 김기완 솔루션즈 아키텍트 :: AWS Container DayECS & ECR Deep Dive - 김기완 솔루션즈 아키텍트 :: AWS Container Day
ECS & ECR Deep Dive - 김기완 솔루션즈 아키텍트 :: AWS Container DayAmazon Web Services Korea
 
Infrastructure as Code in AWS using Cloudformation
Infrastructure as Code in AWS using CloudformationInfrastructure as Code in AWS using Cloudformation
Infrastructure as Code in AWS using CloudformationJohn Reilly Pospos
 

What's hot (20)

Orchestrating the Cloud
Orchestrating the CloudOrchestrating the Cloud
Orchestrating the Cloud
 
DevOps for the Enterprise: Automated Testing and Monitoring
DevOps for the Enterprise: Automated Testing and Monitoring DevOps for the Enterprise: Automated Testing and Monitoring
DevOps for the Enterprise: Automated Testing and Monitoring
 
Masterclass Webinar - AWS CloudFormation
Masterclass Webinar - AWS CloudFormationMasterclass Webinar - AWS CloudFormation
Masterclass Webinar - AWS CloudFormation
 
The AWS DevOps combo (January 2017)
The AWS DevOps combo (January 2017)The AWS DevOps combo (January 2017)
The AWS DevOps combo (January 2017)
 
AWS re:Invent 2016 recap (part 1)
AWS re:Invent 2016 recap (part 1)AWS re:Invent 2016 recap (part 1)
AWS re:Invent 2016 recap (part 1)
 
infrastructure as code
infrastructure as codeinfrastructure as code
infrastructure as code
 
Monitoring Containers at Scale - September Webinar Series
Monitoring Containers at Scale - September Webinar SeriesMonitoring Containers at Scale - September Webinar Series
Monitoring Containers at Scale - September Webinar Series
 
Running Docker clusters on AWS (November 2016)
Running Docker clusters on AWS (November 2016)Running Docker clusters on AWS (November 2016)
Running Docker clusters on AWS (November 2016)
 
AWS CloudFormation Best Practices
AWS CloudFormation Best PracticesAWS CloudFormation Best Practices
AWS CloudFormation Best Practices
 
Infrastructure as Code - AWS CloudFormation
Infrastructure as Code - AWS CloudFormationInfrastructure as Code - AWS CloudFormation
Infrastructure as Code - AWS CloudFormation
 
(SOV204) Scaling Up to Your First 10 Million Users | AWS re:Invent 2014
(SOV204) Scaling Up to Your First 10 Million Users | AWS re:Invent 2014(SOV204) Scaling Up to Your First 10 Million Users | AWS re:Invent 2014
(SOV204) Scaling Up to Your First 10 Million Users | AWS re:Invent 2014
 
AWS Infrastructure as Code - September 2016 Webinar Series
AWS Infrastructure as Code - September 2016 Webinar SeriesAWS Infrastructure as Code - September 2016 Webinar Series
AWS Infrastructure as Code - September 2016 Webinar Series
 
Cloudformation101
Cloudformation101Cloudformation101
Cloudformation101
 
AWS May Webinar Series - Deep Dive: Infrastructure as Code
AWS May Webinar Series - Deep Dive: Infrastructure as CodeAWS May Webinar Series - Deep Dive: Infrastructure as Code
AWS May Webinar Series - Deep Dive: Infrastructure as Code
 
Deep Dive: AWS CloudFormation
Deep Dive: AWS CloudFormationDeep Dive: AWS CloudFormation
Deep Dive: AWS CloudFormation
 
ARC204 AWS Infrastructure Automation - AWS re: Invent 2012
ARC204 AWS Infrastructure Automation - AWS re: Invent 2012ARC204 AWS Infrastructure Automation - AWS re: Invent 2012
ARC204 AWS Infrastructure Automation - AWS re: Invent 2012
 
AWS OpsWorks Under the Hood (DMG304) | AWS re:Invent 2013
AWS OpsWorks Under the Hood (DMG304) | AWS re:Invent 2013AWS OpsWorks Under the Hood (DMG304) | AWS re:Invent 2013
AWS OpsWorks Under the Hood (DMG304) | AWS re:Invent 2013
 
CloudFormation Best Practices
CloudFormation Best PracticesCloudFormation Best Practices
CloudFormation Best Practices
 
ECS & ECR Deep Dive - 김기완 솔루션즈 아키텍트 :: AWS Container Day
ECS & ECR Deep Dive - 김기완 솔루션즈 아키텍트 :: AWS Container DayECS & ECR Deep Dive - 김기완 솔루션즈 아키텍트 :: AWS Container Day
ECS & ECR Deep Dive - 김기완 솔루션즈 아키텍트 :: AWS Container Day
 
Infrastructure as Code in AWS using Cloudformation
Infrastructure as Code in AWS using CloudformationInfrastructure as Code in AWS using Cloudformation
Infrastructure as Code in AWS using Cloudformation
 

Viewers also liked

AWS AWSome Day London July 2015
AWS AWSome Day London July 2015 AWS AWSome Day London July 2015
AWS AWSome Day London July 2015 Ian Massingham
 
AWS AWSome Day London October 2015
AWS AWSome Day London October 2015 AWS AWSome Day London October 2015
AWS AWSome Day London October 2015 Ian Massingham
 
An Introduction to AWS
An Introduction to AWSAn Introduction to AWS
An Introduction to AWSIan Massingham
 
AWS re:Invent 2016 Day 2 Keynote re:Cap
AWS re:Invent 2016 Day 2 Keynote re:CapAWS re:Invent 2016 Day 2 Keynote re:Cap
AWS re:Invent 2016 Day 2 Keynote re:CapIan Massingham
 
AWS re:Invent 2016 Day 1 Keynote re:Cap
AWS re:Invent 2016 Day 1 Keynote re:CapAWS re:Invent 2016 Day 1 Keynote re:Cap
AWS re:Invent 2016 Day 1 Keynote re:CapIan Massingham
 
AWS 101: Introduction to AWS
AWS 101: Introduction to AWSAWS 101: Introduction to AWS
AWS 101: Introduction to AWSIan Massingham
 
AWS Foundational and Platform Services - Module 1 Parts 2 & 3 - AWSome Day 2017
AWS Foundational and Platform Services - Module 1 Parts 2 & 3 - AWSome Day 2017AWS Foundational and Platform Services - Module 1 Parts 2 & 3 - AWSome Day 2017
AWS Foundational and Platform Services - Module 1 Parts 2 & 3 - AWSome Day 2017Amazon Web Services
 
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017Amazon Web Services
 

Viewers also liked (9)

AWS AWSome Day London July 2015
AWS AWSome Day London July 2015 AWS AWSome Day London July 2015
AWS AWSome Day London July 2015
 
AWS AWSome Day London October 2015
AWS AWSome Day London October 2015 AWS AWSome Day London October 2015
AWS AWSome Day London October 2015
 
An Introduction to AWS
An Introduction to AWSAn Introduction to AWS
An Introduction to AWS
 
AWS re:Invent 2016 Day 2 Keynote re:Cap
AWS re:Invent 2016 Day 2 Keynote re:CapAWS re:Invent 2016 Day 2 Keynote re:Cap
AWS re:Invent 2016 Day 2 Keynote re:Cap
 
Introduction to Amazon EC2
Introduction to Amazon EC2Introduction to Amazon EC2
Introduction to Amazon EC2
 
AWS re:Invent 2016 Day 1 Keynote re:Cap
AWS re:Invent 2016 Day 1 Keynote re:CapAWS re:Invent 2016 Day 1 Keynote re:Cap
AWS re:Invent 2016 Day 1 Keynote re:Cap
 
AWS 101: Introduction to AWS
AWS 101: Introduction to AWSAWS 101: Introduction to AWS
AWS 101: Introduction to AWS
 
AWS Foundational and Platform Services - Module 1 Parts 2 & 3 - AWSome Day 2017
AWS Foundational and Platform Services - Module 1 Parts 2 & 3 - AWSome Day 2017AWS Foundational and Platform Services - Module 1 Parts 2 & 3 - AWSome Day 2017
AWS Foundational and Platform Services - Module 1 Parts 2 & 3 - AWSome Day 2017
 
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017
 

Similar to Dev & Test on AWS - Journey Through the Cloud

Dev & Test on AWS Webinar October 2017 - IL Webinar
Dev & Test on AWS Webinar October 2017 - IL WebinarDev & Test on AWS Webinar October 2017 - IL Webinar
Dev & Test on AWS Webinar October 2017 - IL WebinarAmazon Web Services
 
Deployment and Management on AWS:
 A Deep Dive on Options and Tools
Deployment and Management on AWS:
 A Deep Dive on Options and ToolsDeployment and Management on AWS:
 A Deep Dive on Options and Tools
Deployment and Management on AWS:
 A Deep Dive on Options and ToolsDanilo Poccia
 
無伺服器架構和Containers on AWS入門
無伺服器架構和Containers on AWS入門 無伺服器架構和Containers on AWS入門
無伺服器架構和Containers on AWS入門 Amazon Web Services
 
Day 4 - Cloud Migration - But How?
Day 4 - Cloud Migration - But How?Day 4 - Cloud Migration - But How?
Day 4 - Cloud Migration - But How?Amazon Web Services
 
Managing Your Infrastructure as Code by Travis Williams, Solutions Architect,...
Managing Your Infrastructure as Code by Travis Williams, Solutions Architect,...Managing Your Infrastructure as Code by Travis Williams, Solutions Architect,...
Managing Your Infrastructure as Code by Travis Williams, Solutions Architect,...Amazon Web Services
 
Managing Your Infrastructure as Code
Managing Your Infrastructure as CodeManaging Your Infrastructure as Code
Managing Your Infrastructure as CodeAmazon Web Services
 
Journey Through the AWS Cloud; Development and Test
Journey Through the AWS Cloud; Development and TestJourney Through the AWS Cloud; Development and Test
Journey Through the AWS Cloud; Development and TestAmazon Web Services
 
윈도 닷넷 개발자를 위한 솔루션 클라우드 데브옵스 솔루션
윈도 닷넷 개발자를 위한 솔루션 클라우드 데브옵스 솔루션윈도 닷넷 개발자를 위한 솔루션 클라우드 데브옵스 솔루션
윈도 닷넷 개발자를 위한 솔루션 클라우드 데브옵스 솔루션Amazon Web Services Korea
 
Running Microservices and Docker with AWS Elastic Beanstalk
Running Microservices and Docker with AWS Elastic BeanstalkRunning Microservices and Docker with AWS Elastic Beanstalk
Running Microservices and Docker with AWS Elastic BeanstalkAmazon Web Services
 
Getting Started with Serverless and Container Architectures
Getting Started with Serverless and Container ArchitecturesGetting Started with Serverless and Container Architectures
Getting Started with Serverless and Container ArchitecturesAmazon Web Services
 
T2 – Continuous integration on aws
T2 – Continuous integration on awsT2 – Continuous integration on aws
T2 – Continuous integration on awsAmazon Web Services
 
AWS Presents: Infrastructure as Code on AWS - ChefConf 2015
AWS Presents: Infrastructure as Code on AWS - ChefConf 2015AWS Presents: Infrastructure as Code on AWS - ChefConf 2015
AWS Presents: Infrastructure as Code on AWS - ChefConf 2015Chef
 
AWS Elastic Beanstalk - Running Microservices and Docker
AWS Elastic Beanstalk - Running Microservices and DockerAWS Elastic Beanstalk - Running Microservices and Docker
AWS Elastic Beanstalk - Running Microservices and DockerAmazon Web Services
 
An introduction to AWS CloudFormation - Pop-up Loft Tel Aviv
An introduction to AWS CloudFormation - Pop-up Loft Tel AvivAn introduction to AWS CloudFormation - Pop-up Loft Tel Aviv
An introduction to AWS CloudFormation - Pop-up Loft Tel AvivAmazon Web Services
 
AWS Elastic Beanstalk運作微服務與Docker
AWS Elastic Beanstalk運作微服務與Docker AWS Elastic Beanstalk運作微服務與Docker
AWS Elastic Beanstalk運作微服務與Docker Amazon Web Services
 
Automating your Infrastructure Deployment with AWS CloudFormation and AWS Ops...
Automating your Infrastructure Deployment with AWS CloudFormation and AWS Ops...Automating your Infrastructure Deployment with AWS CloudFormation and AWS Ops...
Automating your Infrastructure Deployment with AWS CloudFormation and AWS Ops...Amazon Web Services
 
Continuous Deployment with Amazon Web Services by Carlos Conde
Continuous Deployment with Amazon Web Services by Carlos Conde Continuous Deployment with Amazon Web Services by Carlos Conde
Continuous Deployment with Amazon Web Services by Carlos Conde Codemotion
 
AWS Architecting Cloud Apps - Best Practices and Design Patterns By Jinesh Varia
AWS Architecting Cloud Apps - Best Practices and Design Patterns By Jinesh VariaAWS Architecting Cloud Apps - Best Practices and Design Patterns By Jinesh Varia
AWS Architecting Cloud Apps - Best Practices and Design Patterns By Jinesh VariaAmazon Web Services
 
Increase Speed and Agility with Amazon Web Services
Increase Speed and Agility with Amazon Web ServicesIncrease Speed and Agility with Amazon Web Services
Increase Speed and Agility with Amazon Web ServicesAmazon Web Services
 

Similar to Dev & Test on AWS - Journey Through the Cloud (20)

Dev & Test on AWS Webinar October 2017 - IL Webinar
Dev & Test on AWS Webinar October 2017 - IL WebinarDev & Test on AWS Webinar October 2017 - IL Webinar
Dev & Test on AWS Webinar October 2017 - IL Webinar
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as Code
 
Deployment and Management on AWS:
 A Deep Dive on Options and Tools
Deployment and Management on AWS:
 A Deep Dive on Options and ToolsDeployment and Management on AWS:
 A Deep Dive on Options and Tools
Deployment and Management on AWS:
 A Deep Dive on Options and Tools
 
無伺服器架構和Containers on AWS入門
無伺服器架構和Containers on AWS入門 無伺服器架構和Containers on AWS入門
無伺服器架構和Containers on AWS入門
 
Day 4 - Cloud Migration - But How?
Day 4 - Cloud Migration - But How?Day 4 - Cloud Migration - But How?
Day 4 - Cloud Migration - But How?
 
Managing Your Infrastructure as Code by Travis Williams, Solutions Architect,...
Managing Your Infrastructure as Code by Travis Williams, Solutions Architect,...Managing Your Infrastructure as Code by Travis Williams, Solutions Architect,...
Managing Your Infrastructure as Code by Travis Williams, Solutions Architect,...
 
Managing Your Infrastructure as Code
Managing Your Infrastructure as CodeManaging Your Infrastructure as Code
Managing Your Infrastructure as Code
 
Journey Through the AWS Cloud; Development and Test
Journey Through the AWS Cloud; Development and TestJourney Through the AWS Cloud; Development and Test
Journey Through the AWS Cloud; Development and Test
 
윈도 닷넷 개발자를 위한 솔루션 클라우드 데브옵스 솔루션
윈도 닷넷 개발자를 위한 솔루션 클라우드 데브옵스 솔루션윈도 닷넷 개발자를 위한 솔루션 클라우드 데브옵스 솔루션
윈도 닷넷 개발자를 위한 솔루션 클라우드 데브옵스 솔루션
 
Running Microservices and Docker with AWS Elastic Beanstalk
Running Microservices and Docker with AWS Elastic BeanstalkRunning Microservices and Docker with AWS Elastic Beanstalk
Running Microservices and Docker with AWS Elastic Beanstalk
 
Getting Started with Serverless and Container Architectures
Getting Started with Serverless and Container ArchitecturesGetting Started with Serverless and Container Architectures
Getting Started with Serverless and Container Architectures
 
T2 – Continuous integration on aws
T2 – Continuous integration on awsT2 – Continuous integration on aws
T2 – Continuous integration on aws
 
AWS Presents: Infrastructure as Code on AWS - ChefConf 2015
AWS Presents: Infrastructure as Code on AWS - ChefConf 2015AWS Presents: Infrastructure as Code on AWS - ChefConf 2015
AWS Presents: Infrastructure as Code on AWS - ChefConf 2015
 
AWS Elastic Beanstalk - Running Microservices and Docker
AWS Elastic Beanstalk - Running Microservices and DockerAWS Elastic Beanstalk - Running Microservices and Docker
AWS Elastic Beanstalk - Running Microservices and Docker
 
An introduction to AWS CloudFormation - Pop-up Loft Tel Aviv
An introduction to AWS CloudFormation - Pop-up Loft Tel AvivAn introduction to AWS CloudFormation - Pop-up Loft Tel Aviv
An introduction to AWS CloudFormation - Pop-up Loft Tel Aviv
 
AWS Elastic Beanstalk運作微服務與Docker
AWS Elastic Beanstalk運作微服務與Docker AWS Elastic Beanstalk運作微服務與Docker
AWS Elastic Beanstalk運作微服務與Docker
 
Automating your Infrastructure Deployment with AWS CloudFormation and AWS Ops...
Automating your Infrastructure Deployment with AWS CloudFormation and AWS Ops...Automating your Infrastructure Deployment with AWS CloudFormation and AWS Ops...
Automating your Infrastructure Deployment with AWS CloudFormation and AWS Ops...
 
Continuous Deployment with Amazon Web Services by Carlos Conde
Continuous Deployment with Amazon Web Services by Carlos Conde Continuous Deployment with Amazon Web Services by Carlos Conde
Continuous Deployment with Amazon Web Services by Carlos Conde
 
AWS Architecting Cloud Apps - Best Practices and Design Patterns By Jinesh Varia
AWS Architecting Cloud Apps - Best Practices and Design Patterns By Jinesh VariaAWS Architecting Cloud Apps - Best Practices and Design Patterns By Jinesh Varia
AWS Architecting Cloud Apps - Best Practices and Design Patterns By Jinesh Varia
 
Increase Speed and Agility with Amazon Web Services
Increase Speed and Agility with Amazon Web ServicesIncrease Speed and Agility with Amazon Web Services
Increase Speed and Agility with Amazon Web Services
 

More from Ian Massingham

Some thoughts on measuring the impact of developer relations
Some thoughts on measuring the impact of developer relationsSome thoughts on measuring the impact of developer relations
Some thoughts on measuring the impact of developer relationsIan Massingham
 
Leeds IoT Meetup - Nov 2017
Leeds IoT Meetup - Nov 2017Leeds IoT Meetup - Nov 2017
Leeds IoT Meetup - Nov 2017Ian Massingham
 
What's New & What's Next from AWS?
What's New & What's Next from AWS?What's New & What's Next from AWS?
What's New & What's Next from AWS?Ian Massingham
 
DevTalks Romania - Getting Started with AWS Lambda & the Serverless Cloud
DevTalks Romania - Getting Started with AWS Lambda & the Serverless CloudDevTalks Romania - Getting Started with AWS Lambda & the Serverless Cloud
DevTalks Romania - Getting Started with AWS Lambda & the Serverless CloudIan Massingham
 
Getting started with AWS Lambda and the Serverless Cloud
Getting started with AWS Lambda and the Serverless CloudGetting started with AWS Lambda and the Serverless Cloud
Getting started with AWS Lambda and the Serverless CloudIan Massingham
 
AWS AWSome Day - Getting Started Best Practices
AWS AWSome Day - Getting Started Best PracticesAWS AWSome Day - Getting Started Best Practices
AWS AWSome Day - Getting Started Best PracticesIan Massingham
 
AWS IoT Workshop Keynote
AWS IoT Workshop KeynoteAWS IoT Workshop Keynote
AWS IoT Workshop KeynoteIan Massingham
 
Security Best Practices: AWS AWSome Day Management Track
Security Best Practices: AWS AWSome Day Management TrackSecurity Best Practices: AWS AWSome Day Management Track
Security Best Practices: AWS AWSome Day Management TrackIan Massingham
 
Getting Started with AWS Lambda & Serverless Cloud
Getting Started with AWS Lambda & Serverless CloudGetting Started with AWS Lambda & Serverless Cloud
Getting Started with AWS Lambda & Serverless CloudIan Massingham
 
Building Better IoT Applications without Servers
Building Better IoT Applications without ServersBuilding Better IoT Applications without Servers
Building Better IoT Applications without ServersIan Massingham
 
AWS AWSome Day Roadshow
AWS AWSome Day RoadshowAWS AWSome Day Roadshow
AWS AWSome Day RoadshowIan Massingham
 
AWS AWSome Day Roadshow Intro
AWS AWSome Day Roadshow IntroAWS AWSome Day Roadshow Intro
AWS AWSome Day Roadshow IntroIan Massingham
 
Hashiconf AWS Lambda Breakout
Hashiconf AWS Lambda BreakoutHashiconf AWS Lambda Breakout
Hashiconf AWS Lambda BreakoutIan Massingham
 
Getting started with AWS IoT on Raspberry Pi
Getting started with AWS IoT on Raspberry PiGetting started with AWS IoT on Raspberry Pi
Getting started with AWS IoT on Raspberry PiIan Massingham
 
AWSome Day Dublin Intro & Closing Slides
AWSome Day Dublin Intro & Closing Slides AWSome Day Dublin Intro & Closing Slides
AWSome Day Dublin Intro & Closing Slides Ian Massingham
 
GOTO Stockholm - AWS Lambda - Logic in the cloud without a back-end
GOTO Stockholm - AWS Lambda - Logic in the cloud without a back-endGOTO Stockholm - AWS Lambda - Logic in the cloud without a back-end
GOTO Stockholm - AWS Lambda - Logic in the cloud without a back-endIan Massingham
 
What's New at AWS Update for AWS User Groups
What's New at AWS Update for AWS User Groups What's New at AWS Update for AWS User Groups
What's New at AWS Update for AWS User Groups Ian Massingham
 
Advanced Security Masterclass - Tel Aviv Loft
Advanced Security Masterclass - Tel Aviv LoftAdvanced Security Masterclass - Tel Aviv Loft
Advanced Security Masterclass - Tel Aviv LoftIan Massingham
 
Cost Optimisation with AWS
Cost Optimisation with AWSCost Optimisation with AWS
Cost Optimisation with AWSIan Massingham
 
Security Best Practices
Security Best PracticesSecurity Best Practices
Security Best PracticesIan Massingham
 

More from Ian Massingham (20)

Some thoughts on measuring the impact of developer relations
Some thoughts on measuring the impact of developer relationsSome thoughts on measuring the impact of developer relations
Some thoughts on measuring the impact of developer relations
 
Leeds IoT Meetup - Nov 2017
Leeds IoT Meetup - Nov 2017Leeds IoT Meetup - Nov 2017
Leeds IoT Meetup - Nov 2017
 
What's New & What's Next from AWS?
What's New & What's Next from AWS?What's New & What's Next from AWS?
What's New & What's Next from AWS?
 
DevTalks Romania - Getting Started with AWS Lambda & the Serverless Cloud
DevTalks Romania - Getting Started with AWS Lambda & the Serverless CloudDevTalks Romania - Getting Started with AWS Lambda & the Serverless Cloud
DevTalks Romania - Getting Started with AWS Lambda & the Serverless Cloud
 
Getting started with AWS Lambda and the Serverless Cloud
Getting started with AWS Lambda and the Serverless CloudGetting started with AWS Lambda and the Serverless Cloud
Getting started with AWS Lambda and the Serverless Cloud
 
AWS AWSome Day - Getting Started Best Practices
AWS AWSome Day - Getting Started Best PracticesAWS AWSome Day - Getting Started Best Practices
AWS AWSome Day - Getting Started Best Practices
 
AWS IoT Workshop Keynote
AWS IoT Workshop KeynoteAWS IoT Workshop Keynote
AWS IoT Workshop Keynote
 
Security Best Practices: AWS AWSome Day Management Track
Security Best Practices: AWS AWSome Day Management TrackSecurity Best Practices: AWS AWSome Day Management Track
Security Best Practices: AWS AWSome Day Management Track
 
Getting Started with AWS Lambda & Serverless Cloud
Getting Started with AWS Lambda & Serverless CloudGetting Started with AWS Lambda & Serverless Cloud
Getting Started with AWS Lambda & Serverless Cloud
 
Building Better IoT Applications without Servers
Building Better IoT Applications without ServersBuilding Better IoT Applications without Servers
Building Better IoT Applications without Servers
 
AWS AWSome Day Roadshow
AWS AWSome Day RoadshowAWS AWSome Day Roadshow
AWS AWSome Day Roadshow
 
AWS AWSome Day Roadshow Intro
AWS AWSome Day Roadshow IntroAWS AWSome Day Roadshow Intro
AWS AWSome Day Roadshow Intro
 
Hashiconf AWS Lambda Breakout
Hashiconf AWS Lambda BreakoutHashiconf AWS Lambda Breakout
Hashiconf AWS Lambda Breakout
 
Getting started with AWS IoT on Raspberry Pi
Getting started with AWS IoT on Raspberry PiGetting started with AWS IoT on Raspberry Pi
Getting started with AWS IoT on Raspberry Pi
 
AWSome Day Dublin Intro & Closing Slides
AWSome Day Dublin Intro & Closing Slides AWSome Day Dublin Intro & Closing Slides
AWSome Day Dublin Intro & Closing Slides
 
GOTO Stockholm - AWS Lambda - Logic in the cloud without a back-end
GOTO Stockholm - AWS Lambda - Logic in the cloud without a back-endGOTO Stockholm - AWS Lambda - Logic in the cloud without a back-end
GOTO Stockholm - AWS Lambda - Logic in the cloud without a back-end
 
What's New at AWS Update for AWS User Groups
What's New at AWS Update for AWS User Groups What's New at AWS Update for AWS User Groups
What's New at AWS Update for AWS User Groups
 
Advanced Security Masterclass - Tel Aviv Loft
Advanced Security Masterclass - Tel Aviv LoftAdvanced Security Masterclass - Tel Aviv Loft
Advanced Security Masterclass - Tel Aviv Loft
 
Cost Optimisation with AWS
Cost Optimisation with AWSCost Optimisation with AWS
Cost Optimisation with AWS
 
Security Best Practices
Security Best PracticesSecurity Best Practices
Security Best Practices
 

Recently uploaded

Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 

Recently uploaded (20)

Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 

Dev & Test on AWS - Journey Through the Cloud

  • 1. Journey Through the Cloud ianmas@amazon.com @IanMmmm Ian Massingham — Technical Evangelist Dev & Test on AWS
  • 2. Journey Through the Cloud Learn from the journeys taken by other AWS customers Discover best practices that you can use to bootstrap your projects Common use cases and adoption models for the AWS Cloud
  • 3. Development & Test on AWS Explore the benefits of AWS with a ‘non-production’ use case
 Create agility in development & test whilst ‘learning cloud’
 Exercise elasticity and automation to real advantage
  • 4. Agenda Why AWS for development & test workloads? AWS Services to support Dev & Test workloads Developing & Testing Business Applications on AWS Common Dev & Test Patterns Resources you can use to learn more
  • 5. WHY AWS FOR DEVELOPMENT AND TEST WORKLOADS?
  • 8. COMMON TRAITS NUMEROUS DISPOSABLE Projects start and stop frequently Required for short period of time Golden masters preferred
  • 9. COMMON TRAITS NUMEROUS DISPOSABLE Many environments support an app Preservation of known configurations Overlapping development cycles
  • 10. DEVELOPMENT & TEST IN THE CLOUD NUMEROUS DISPOSABLE Many environments support an app Preservation of known configurations Overlapping development cycles Projects start and stop frequently Required for short period of time Golden masters preferred
  • 11. DEVELOPMENT & TEST IN THE CLOUD Infrastructure as Code Deploy to a known state, quickly
  • 12. DEVELOPMENT & TEST IN THE CLOUD Unlimited Elastic Capacity Infrastructure as Code Take lots of it when you need it Deploy to a known state, quickly
  • 13. DEVELOPMENT & TEST IN THE CLOUD On-demand Charging ModelUnlimited Elastic Capacity Infrastructure as Code Take lots of it when you need it Throw it away when you don’t Deploy to a known state, quickly
  • 14. DEVELOPMENT & TEST IN THE CLOUD On-demand Charging ModelUnlimited Elastic Capacity Infrastructure as Code Durable Storage Take lots of it when you need it Throw it away when you don’t Preserve it for future reference & reuseDeploy to a known state, quickly
  • 15. AWS SERVICES TO SUPPORT DEV & TEST WORKLOADS
  • 16. EC2 + VPC CloudFormation Tools to Create & Manage an Elastic Datacenter AMIs, snapshots, bootstrapping Elastic Beanstalk Managed Standard Application Containers Declaratively define AWS environments
  • 17. Tools to Create & Manage an Elastic Datacenter AMIs, snapshots, bootstrapping Declaratively define AWS environments Using core AWS features to set up an environment to meet your needs Created using the AWS console or through simple scripting Managed Standard Application Containers Give development & test environments to developers, controlled directly from IDEs Configure containers to meet your needs through properties Take full control of complex environments using Cloud Formation template language Generate environment specifications as you build software
  • 18. Tools to Create & Manage an Elastic Datacenter AMIs, snapshots, bootstrapping Declaratively define AWS environments Using core AWS features to set up an environment to meet your needs Created using the AWS console or through simple scripting Managed Standard Application Containers Give development & test environments to developers, controlled directly from IDEs Configure containers to meet your needs through properties Take full control of complex environments using Cloud Formation template language Generate environment specifications as you build software
  • 19. Amazon EC2 Generic image Customised building block Creating re-usable golden images
  • 20. Extending an on-premises environment Amazon VPC
  • 21. Extending an on-premises environment Amazon VPC
  • 22. Extending an on-premises environment Amazon VPC
  • 23. Extending an on-premises environment Amazon VPC
  • 24. Amazon VPC Extending an on-premises environment
  • 25. Tools to Create & Manage an Elastic Datacenter AMIs, snapshots, bootstrapping Declaratively define AWS environments Using core AWS features to set up an environment to meet your needs Created using the AWS console or through simple scripting Managed Standard Application Containers Give development & test environments to developers, controlled directly from IDEs Configure containers to meet your needs through properties Take full control of complex environments using Cloud Formation template language Generate environment specifications as you build software
  • 35. Tools to Create & Manage an Elastic Datacenter AMIs, snapshots, bootstrapping Declaratively define AWS environments Using core AWS features to set up an environment to meet your needs Created using the AWS console or through simple scripting Managed Standard Application Containers Give development & test environments to developers, controlled directly from IDEs Configure containers to meet your needs through properties Take full control of complex environments using Cloud Formation template language Generate environment specifications as you build software
  • 37. PROCEDURAL
 DEFINITION Create it programmatically KNOWN CONFIGURATION Store stack configuration in source control PARAMETER DRIVEN Dynamic and user-driven templates COLLABORATION Share templates with ease as they are just text files CLOUDFORMATION
 TEMPLATE Find out more at : aws.amazon.com/cloudformation
  • 38. {      "AWSTemplateFormatVersion"  :  "2010-­‐09-­‐09",      "Description"  :  "AWS  CloudFormation  Sample  Template  WordPress_Multi_AZ:  WordPress  is  web  software  you  can  use  to  create  a  beautiful  website  or  blog.  This  template   installs  a  highly-­‐available,  scalable  WordPress  deployment  using  a  multi-­‐az  Amazon  RDS  database  instance  for  storage.  It  demonstrates  using  the  AWS  CloudFormation  bootstrap   scripts  to  deploy  WordPress.  **WARNING**  This  template  creates  an  Amazon  EC2  instance,  an  Elastic  Load  Balancer  and  an  Amazon  RDS  database  instance.  You  will  be  billed  for   the  AWS  resources  used  if  you  create  a  stack  from  this  template.",      "Parameters"  :  {          "KeyName":  {              "Description"  :  "Name  of  an  existing  EC2  KeyPair  to  enable  SSH  access  to  the  instances",              "Type":  "AWS::EC2::KeyPair::KeyName",              "ConstraintDescription"  :  "must  be  the  name  of  an  existing  EC2  KeyPair."          },          "InstanceType"  :  {              "Description"  :  "WebServer  EC2  instance  type",              "Type"  :  "String",              "Default"  :  "m1.small",              "AllowedValues"  :  [  "t1.micro",  "t2.micro",  "t2.small",  "t2.medium",  "m1.small",  "m1.medium",  "m1.large",  "m1.xlarge",  "m2.xlarge",  "m2.2xlarge",  "m2.4xlarge",   "m3.medium",  "m3.large",  "m3.xlarge",  "m3.2xlarge",  "c1.medium",  "c1.xlarge",  "c3.large",  "c3.xlarge",  "c3.2xlarge",  "c3.4xlarge",  "c3.8xlarge",  "c4.large",  "c4.xlarge",   "c4.2xlarge",  "c4.4xlarge",  "c4.8xlarge",  "g2.2xlarge",  "r3.large",  "r3.xlarge",  "r3.2xlarge",  "r3.4xlarge",  "r3.8xlarge",  "i2.xlarge",  "i2.2xlarge",  "i2.4xlarge",   "i2.8xlarge",  "hi1.4xlarge",  "hs1.8xlarge",  "cr1.8xlarge",  "cc2.8xlarge",  "cg1.4xlarge"]   ,              "ConstraintDescription"  :  "must  be  a  valid  EC2  instance  type."          },          "SSHLocation":  {              "Description":  "The  IP  address  range  that  can  be  used  to  SSH  to  the  EC2  instances",              "Type":  "String",              "MinLength":  "9",              "MaxLength":  "18",              "Default":  "0.0.0.0/0",              "AllowedPattern":  "(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})/(d{1,2})",              "ConstraintDescription":  "must  be  a  valid  IP  CIDR  range  of  the  form  x.x.x.x/x."          },          "DBClass"  :  {              "Description"  :  "Database  instance  class",              "Type"  :  "String",              "Default"  :  "db.m1.small",              "AllowedValues"  :  [  "db.t1.micro",  "db.m1.small",  "db.m1.medium",  "db.m1.large",  "db.m1.xlarge",  "db.m2.xlarge",  "db.m2.2xlarge",  "db.m2.4xlarge",  "db.m3.medium",   "db.m3.large",  "db.m3.xlarge",  "db.m3.2xlarge",  "db.r3.large",  "db.r3.xlarge",  "db.r3.2xlarge",  "db.r3.4xlarge",  "db.r3.8xlarge",  "db.m2.xlarge",  "db.m2.2xlarge",   "db.m2.4xlarge",  "db.cr1.8xlarge"]   ,              "ConstraintDescription"  :  "must  select  a  valid  database  instance  type."          },          "DBName"  :  {              "Default":  "wordpressdb",              "Description"  :  "The  WordPress  database  name",              "Type":  "String",              "MinLength":  "1",              "MaxLength":  "64",              "AllowedPattern"  :  "[a-­‐zA-­‐Z][a-­‐zA-­‐Z0-­‐9]*",              "ConstraintDescription"  :  "must  begin  with  a  letter  and  contain  only  alphanumeric  characters."          },          "DBUser"  :  {              "NoEcho":  "true",              "Description"  :  "The  WordPress  database  admin  account  username",              "Type":  "String",              "MinLength":  "1",              "MaxLength":  "16",              "AllowedPattern"  :  "[a-­‐zA-­‐Z][a-­‐zA-­‐Z0-­‐9]*",              "ConstraintDescription"  :  "must  begin  with  a  letter  and  contain  only  alphanumeric  characters."          },          "DBPassword"  :  {              "NoEcho":  "true",              "Description"  :  "The  WordPress  database  admin  account  password",              "Type":  "String",              "MinLength":  "8",              "MaxLength":  "41",              "AllowedPattern"  :  "[a-­‐zA-­‐Z0-­‐9]*",              "ConstraintDescription"  :  "must  contain  only  alphanumeric  characters."          },          "MultiAZDatabase":  {              "Default":  "false",              "Description"  :  "Create  a  Multi-­‐AZ  MySQL  Amazon  RDS  database  instance",              "Type":  "String",              "AllowedValues"  :  [  "true",  "false"  ],              "ConstraintDescription"  :  "must  be  either  true  or  false."          },          "WebServerCapacity":  {              "Default":  "1",              "Description"  :  "The  initial  number  of  WebServer  instances",              "Type":  "Number",              "MinValue":  "1",              "MaxValue":  "5",              "ConstraintDescription"  :  "must  be  between  1  and  5  EC2  instances."          },          "DBAllocatedStorage"  :  {              "Default":  "5",              "Description"  :  "The  size  of  the  database  (Gb)",              "Type":  "Number",              "MinValue":  "5",              "MaxValue":  "1024",              "ConstraintDescription"  :  "must  be  between  5  and  1024Gb."          }      },      "Mappings"  :  {          "AWSInstanceType2Arch"  :  {              "t1.micro"        :  {  "Arch"  :  "PV64"      },              "t2.micro"        :  {  "Arch"  :  "HVM64"    },              "t2.small"        :  {  "Arch"  :  "HVM64"    },              "t2.medium"      :  {  "Arch"  :  "HVM64"    },              "m1.small"        :  {  "Arch"  :  "PV64"      },              "m1.medium"      :  {  "Arch"  :  "PV64"      },              "m1.large"        :  {  "Arch"  :  "PV64"      },              "m1.xlarge"      :  {  "Arch"  :  "PV64"      },              "m2.xlarge"      :  {  "Arch"  :  "PV64"      },              "m2.2xlarge"    :  {  "Arch"  :  "PV64"      },              "m2.4xlarge"    :  {  "Arch"  :  "PV64"      },              "m3.medium"      :  {  "Arch"  :  "HVM64"    },              "m3.large"        :  {  "Arch"  :  "HVM64"    },              "m3.xlarge"      :  {  "Arch"  :  "HVM64"    },              "m3.2xlarge"    :  {  "Arch"  :  "HVM64"    },              "c1.medium"      :  {  "Arch"  :  "PV64"      },              "c1.xlarge"      :  {  "Arch"  :  "PV64"      },              "c3.large"        :  {  "Arch"  :  "HVM64"    },              "c3.xlarge"      :  {  "Arch"  :  "HVM64"    },              "c3.2xlarge"    :  {  "Arch"  :  "HVM64"    },              "c3.4xlarge"    :  {  "Arch"  :  "HVM64"    },              "c3.8xlarge"    :  {  "Arch"  :  "HVM64"    },              "c4.large"        :  {  "Arch"  :  "HVM64"    },              "c4.xlarge"      :  {  "Arch"  :  "HVM64"    },              "c4.2xlarge"    :  {  "Arch"  :  "HVM64"    },              "c4.4xlarge"    :  {  "Arch"  :  "HVM64"    },              "c4.8xlarge"    :  {  "Arch"  :  "HVM64"    },              "g2.2xlarge"    :  {  "Arch"  :  "HVMG2"    },              "r3.large"        :  {  "Arch"  :  "HVM64"    },              "r3.xlarge"      :  {  "Arch"  :  "HVM64"    },              "r3.2xlarge"    :  {  "Arch"  :  "HVM64"    },              "r3.4xlarge"    :  {  "Arch"  :  "HVM64"    },              "r3.8xlarge"    :  {  "Arch"  :  "HVM64"    },              "i2.xlarge"      :  {  "Arch"  :  "HVM64"    },              "i2.2xlarge"    :  {  "Arch"  :  "HVM64"    },              "i2.4xlarge"    :  {  "Arch"  :  "HVM64"    },              "i2.8xlarge"    :  {  "Arch"  :  "HVM64"    },              "hi1.4xlarge"  :  {  "Arch"  :  "HVM64"    },              "hs1.8xlarge"  :  {  "Arch"  :  "HVM64"    },              "cr1.8xlarge"  :  {  "Arch"  :  "HVM64"    },              "cc2.8xlarge"  :  {  "Arch"  :  "HVM64"    }          }   ,          "AWSRegionArch2AMI"  :  {              "us-­‐east-­‐1"                :  {"PV64"  :  "ami-­‐8e682ce6",  "HVM64"  :  "ami-­‐146e2a7c",  "HVMG2"  :  "ami-­‐7200461a"},              "us-­‐west-­‐2"                :  {"PV64"  :  "ami-­‐9fc29baf",  "HVM64"  :  "ami-­‐dfc39aef",  "HVMG2"  :  "ami-­‐0b78203b"},              "us-­‐west-­‐1"                :  {"PV64"  :  "ami-­‐f49089b1",  "HVM64"  :  "ami-­‐42908907",  "HVMG2"  :  "ami-­‐244b5361"},              "eu-­‐west-­‐1"                :  {"PV64"  :  "ami-­‐7b3db00c",  "HVM64"  :  "ami-­‐9d23aeea",  "HVMG2"  :  "ami-­‐4d7cf03a"},              "eu-­‐central-­‐1"          :  {"PV64"  :  "ami-­‐0600331b",  "HVM64"  :  "ami-­‐04003319",  "HVMG2"  :  "NOT_SUPPORTED"},              "ap-­‐northeast-­‐1"      :  {"PV64"  :  "ami-­‐3c87993d",  "HVM64"  :  "ami-­‐18869819",  "HVMG2"  :  "ami-­‐2e90892f"},              "ap-­‐southeast-­‐1"      :  {"PV64"  :  "ami-­‐58ba910a",  "HVM64"  :  "ami-­‐96bb90c4",  "HVMG2"  :  "ami-­‐3e78526c"},              "ap-­‐southeast-­‐2"      :  {"PV64"  :  "ami-­‐1500742f",  "HVM64"  :  "ami-­‐d50773ef",  "HVMG2"  :  "ami-­‐315e2a0b"},              "sa-­‐east-­‐1"                :  {"PV64"  :  "ami-­‐fd9925e0",  "HVM64"  :  "ami-­‐af9925b2",  "HVMG2"  :  "NOT_SUPPORTED"},              "cn-­‐north-­‐1"              :  {"PV64"  :  "ami-­‐8a1d8fb3",  "HVM64"  :  "ami-­‐981d8fa1",  "HVMG2"  :  "NOT_SUPPORTED"}          }      },      "Conditions"  :  {          "Is-­‐EC2-­‐VPC"          :  {  "Fn::Or"  :  [  {"Fn::Equals"  :  [{"Ref"  :  "AWS::Region"},  "eu-­‐central-­‐1"  ]},                                                                              {"Fn::Equals"  :  [{"Ref"  :  "AWS::Region"},  "cn-­‐north-­‐1"  ]}]},          "Is-­‐EC2-­‐Classic"  :  {  "Fn::Not"  :  [{  "Condition"  :  "Is-­‐EC2-­‐VPC"}]}      },      "Resources"  :  {          "ElasticLoadBalancer"  :  {              "Type"  :  "AWS::ElasticLoadBalancing::LoadBalancer",              "Properties"  :  {                  "AvailabilityZones"  :  {  "Fn::GetAZs"  :  ""  },                  "CrossZone"  :  "true",                  "LBCookieStickinessPolicy"  :  [  {                      "PolicyName"  :  "CookieBasedPolicy",                      "CookieExpirationPeriod"  :  "30"                  }  ],                  "Listeners"  :  [  {                      "LoadBalancerPort"  :  "80",                      "InstancePort"  :  "80",                      "Protocol"  :  "HTTP",                      "PolicyNames"  :  [  "CookieBasedPolicy"  ]                  }  ],                  "HealthCheck"  :  {                      "Target"  :  "HTTP:80/wordpress/wp-­‐admin/install.php",                      "HealthyThreshold"  :  "2",                      "UnhealthyThreshold"  :  "5",                      "Interval"  :  "10",                      "Timeout"  :  "5"                  }              }          },          "WebServerSecurityGroup"  :  {              "Type"  :  "AWS::EC2::SecurityGroup",              "Properties"  :  {                  "GroupDescription"  :  "Enable  HTTP  access  via  port  80  locked  down  to  the  load  balancer  +  SSH  access",                  "SecurityGroupIngress"  :  [                      {"IpProtocol"  :  "tcp",  "FromPort"  :  "80",  "ToPort"  :  "80",  "SourceSecurityGroupOwnerId"  :  {"Fn::GetAtt"  :  ["ElasticLoadBalancer",   "SourceSecurityGroup.OwnerAlias"]},"SourceSecurityGroupName"  :  {"Fn::GetAtt"  :  ["ElasticLoadBalancer",  "SourceSecurityGroup.GroupName"]}},                      {"IpProtocol"  :  "tcp",  "FromPort"  :  "22",  "ToPort"  :  "22",  "CidrIp"  :  {  "Ref"  :  "SSHLocation"}}                  ]              }          },          "WebServerGroup"  :  {              "Type"  :  "AWS::AutoScaling::AutoScalingGroup",              "Properties"  :  {                  "AvailabilityZones"  :  {  "Fn::GetAZs"  :  ""  },                  "LaunchConfigurationName"  :  {  "Ref"  :  "LaunchConfig"  },                  "MinSize"  :  "1",                  "MaxSize"  :  "5",                  "DesiredCapacity"  :  {  "Ref"  :  "WebServerCapacity"  },                  "LoadBalancerNames"  :  [  {  "Ref"  :  "ElasticLoadBalancer"  }  ]              },              "CreationPolicy"  :  {                  "ResourceSignal"  :  {                      "Timeout"  :  "PT15M"                  }              },              "UpdatePolicy":  {                  "AutoScalingRollingUpdate":  {                      "MinInstancesInService":  "1",                      "MaxBatchSize":  "1",                      "PauseTime"  :  "PT15M",                      "WaitOnResourceSignals":  "true"                  }              }          },          "LaunchConfig":  {              "Type"  :  "AWS::AutoScaling::LaunchConfiguration",              "Metadata"  :  {                  "AWS::CloudFormation::Init"  :  {                      "configSets"  :  {                          "wordpress_install"  :  ["install_cfn",  "install_wordpress"  ]                      },                      "install_cfn"  :  {                          "files":  {                              "/etc/cfn/cfn-­‐hup.conf":  {                                  "content":  {  "Fn::Join":  [  "",  [                                      "[main]n",                                      "stack=",  {  "Ref":  "AWS::StackId"  },  "n",                                      "region=",  {  "Ref":  "AWS::Region"  },  "n"                                  ]]},                                  "mode"    :  "000400",                                  "owner"  :  "root",                                  "group"  :  "root"                              },                              "/etc/cfn/hooks.d/cfn-­‐auto-­‐reloader.conf":  {                                  "content":  {  "Fn::Join":  [  "",  [                                      "[cfn-­‐auto-­‐reloader-­‐hook]n",                                      "triggers=post.updaten",                                      "path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Initn",                                      "action=/opt/aws/bin/cfn-­‐init  -­‐v  ",                                                      "                  -­‐-­‐stack  ",  {  "Ref"  :  "AWS::StackName"  },                                                      "                  -­‐-­‐resource  LaunchConfig  ",                                                      "                  -­‐-­‐configsets  wordpress_install  ",                                                      "                  -­‐-­‐region  ",  {  "Ref"  :  "AWS::Region"  },  "n"                                  ]]},                                                      "mode"    :  "000400",                                  "owner"  :  "root",                                  "group"  :  "root"                              }                          },                          "services"  :  {                              "sysvinit"  :  {                                  "cfn-­‐hup"  :  {  "enabled"  :  "true",  "ensureRunning"  :  "true",                                                              "files"  :  ["/etc/cfn/cfn-­‐hup.conf",  "/etc/cfn/hooks.d/cfn-­‐auto-­‐reloader.conf"]}                              }                          }                      },                      "install_wordpress"  :  {                          "packages"  :  {                              "yum"  :  {                                  "php"              :  [],                                  "php-­‐mysql"  :  [],                                  "mysql"          :  [],                                  "httpd"          :  []                              }                          },                          "sources"  :  {                              "/var/www/html"  :  "http://wordpress.org/latest.tar.gz"                          },                          "files"  :  {                              "/tmp/create-­‐wp-­‐config"  :  {                                  "content"  :  {  "Fn::Join"  :  [  "",  [                                      "#!/bin/bashn",                                      "cp  /var/www/html/wordpress/wp-­‐config-­‐sample.php  /var/www/html/wordpress/wp-­‐config.phpn",                                      "sed  -­‐i  "s/'database_name_here'/'",{  "Ref"  :  "DBName"  },  "'/g"  wp-­‐config.phpn",                                      "sed  -­‐i  "s/'username_here'/'",{  "Ref"  :  "DBUser"  },  "'/g"  wp-­‐config.phpn",                                      "sed  -­‐i  "s/'password_here'/'",{  "Ref"  :  "DBPassword"  },  "'/g"  wp-­‐config.phpn",                                      "sed  -­‐i  "s/'localhost'/'",{  "Fn::GetAtt"  :  [  "DBInstance",  "Endpoint.Address"  ]  },  "'/g"  wp-­‐config.phpn"                                  ]]},                                  "mode"  :  "000500",                                  "owner"  :  "root",                                  "group"  :  "root"                              }                          },                          "commands"  :  {                              "01_configure_wordpress"  :  {                                  "command"  :  "/tmp/create-­‐wp-­‐config",                                  "cwd"  :  "/var/www/html/wordpress"                              }                          },                          "services"  :  {                              "sysvinit"  :  {                                  "httpd"  :  {  "enabled"  :  "true",  "ensureRunning"  :  "true"  }                              }                          }                      }                  }              },              "Properties":  {                  "ImageId"  :  {  "Fn::FindInMap"  :  [  "AWSRegionArch2AMI",  {  "Ref"  :  "AWS::Region"  },                                                      {  "Fn::FindInMap"  :  [  "AWSInstanceType2Arch",  {  "Ref"  :  "InstanceType"  },  "Arch"  ]  }  ]  },                  "InstanceType"      :  {  "Ref"  :  "InstanceType"  },                  "SecurityGroups"  :  [  {"Ref"  :  "WebServerSecurityGroup"}  ],                  "KeyName"                :  {  "Ref"  :  "KeyName"  },                  "UserData"  :  {  "Fn::Base64"  :  {  "Fn::Join"  :  ["",  [                                                "#!/bin/bash  -­‐xen",                                                "yum  update  -­‐y  aws-­‐cfn-­‐bootstrapn",                                                "/opt/aws/bin/cfn-­‐init  -­‐v  ",                                                "                  -­‐-­‐stack  ",  {  "Ref"  :  "AWS::StackName"  },                                                "                  -­‐-­‐resource  LaunchConfig  ",                                                "                  -­‐-­‐configsets  wordpress_install  ",                                                "                  -­‐-­‐region  ",  {  "Ref"  :  "AWS::Region"  },  "n",                                                "/opt/aws/bin/cfn-­‐signal  -­‐e  $?  ",                                                "                  -­‐-­‐stack  ",  {  "Ref"  :  "AWS::StackName"  },                                                "                  -­‐-­‐resource  WebServerGroup  ",                                                "                  -­‐-­‐region  ",  {  "Ref"  :  "AWS::Region"  },  "n"                  ]]}}              }          },          "DBSecurityGroup":  {              "Type":  "AWS::RDS::DBSecurityGroup",              "Condition"  :  "Is-­‐EC2-­‐Classic",              "Properties":  {                  "DBSecurityGroupIngress":  {                      "EC2SecurityGroupName":  {  "Ref":  "WebServerSecurityGroup"  }                  },                  "GroupDescription":  "database  access"              }          },          "DBEC2SecurityGroup":  {              "Type":  "AWS::EC2::SecurityGroup",              "Condition"  :  "Is-­‐EC2-­‐VPC",              "Properties"  :  {                  "GroupDescription":  "Open  database  for  access",                  "SecurityGroupIngress"  :  [{                      "IpProtocol"  :  "tcp",                      "FromPort"  :  "3306",                      "ToPort"  :  "3306",                      "SourceSecurityGroupName"  :  {  "Ref"  :  "WebServerSecurityGroup"  }                  }]              }          },          "DBInstance"  :  {              "Type":  "AWS::RDS::DBInstance",              "Properties":  {                  "DBName"                        :  {  "Ref"  :  "DBName"  },                  "Engine"                        :  "MySQL",                  "MultiAZ"                      :  {  "Ref":  "MultiAZDatabase"  },                  "MasterUsername"        :  {  "Ref"  :  "DBUser"  },                  "MasterUserPassword":  {  "Ref"  :  "DBPassword"  },                  "DBInstanceClass"      :  {  "Ref"  :  "DBClass"  },                  "AllocatedStorage"    :  {  "Ref"  :  "DBAllocatedStorage"  },                  "VPCSecurityGroups":  {  "Fn::If"  :  [  "Is-­‐EC2-­‐VPC",  [  {  "Fn::GetAtt":  [  "DBEC2SecurityGroup",  "GroupId"  ]  }  ],  {  "Ref"  :  "AWS::NoValue"}]},                  "DBSecurityGroups":  {  "Fn::If"  :  [  "Is-­‐EC2-­‐Classic",  [  {  "Ref":  "DBSecurityGroup"  }  ],  {  "Ref"  :  "AWS::NoValue"}]}              }          }      },      "Outputs"  :  {          "WebsiteURL"  :  {              "Value"  :  {  "Fn::Join"  :  ["",  ["http://",  {  "Fn::GetAtt"  :  [  "ElasticLoadBalancer",  "DNSName"  ]},  "/wordpress"  ]]},              "Description"  :  "WordPress  Website"          }      }   } CloudFormation Template to Deploy Wordpress https://s3-us-west-1.amazonaws.com/cloudformation-templates-us-west-1/WordPress_Multi_AZ.template
  • 39. Amazon ECS AWS CodeDeploy Tools to Create & Manage an Elastic Datacenter Code Build Test aws.amazon.com/ecs/ aws.amazon.com/codedeploy/
  • 40. DEVELOPING & TESTING BUSINESS APPLICATIONS ON AWS
  • 41. Install software in the AWS Cloud or use preconfigured images from the AWS Marketplace Microsoft SQL Server, Microsoft SharePoint, Microsoft Exchange, SAP HANA, SAP HANA One, Oracle 11g, PeopleSoft, IBM DB2, the IBM WebSphere family of products are available License portability allows you to move some existing licenses to the AWS Cloud, refer to the appropriate pages on the AWS website for details aws.amazon.com/microsoft aws.amazon.com/oracle aws.amazon.com/sap aws.amazon.com/ibm
  • 42. COMMON DEV & TEST PATTERNS
  • 43. Frameworks & Environments Source Control Amazon EC2 to run popular source control systems, integrate with GitHub or use AWS CodeCommit (coming soon) Project Management Add integrated project management and issue tracking applications from the AWS Marketplace Workstations Provide standard build developer/test workstations with Amazon WorkSpaces CI/Build Servers Use EC2 instances as continuous integration and build servers
  • 47. Testing at Scale Unit & Regression Scale up and parallel run unit and regression plans in a fraction of the time Load & Performance Use EC2 instances from the spot market to generating load and test how applications perform with auto-scaling A/B Run A/B scenario testing with multiple replicated stacks Security Create sandboxes for aggressive security testing
  • 48. Parallel Testing 1 instance for 100 hours == 100 instances for 1 hour
  • 55.
  • 56. 2.4 MILLION PLAYERS USING AMAZON EC2 TO SIMULATE
  • 57. DEVELOPMENT & TEST IN THE CLOUD On-demand Charging ModelUnlimited Elastic Capacity Infrastructure as Code Durable Storage Take lots of it when you need it Throw it away when you don’t Preserve it for future reference & reuseDeploy to a known state, quickly
  • 58. 00:00 01:00 02:00 03:00 04:00 05:00 06:00 07:00 08:00 09:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 21:00 22:00 23:00 Development Environment: CPU Utilisation/Time
  • 59. 00:00 01:00 02:00 03:00 04:00 05:00 06:00 07:00 08:00 09:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 21:00 22:00 23:00 Development Environment: CPU Utilisation/Time Auto-scaling by schedule Auto-scaling by schedule
  • 60. 00:00 01:00 02:00 03:00 04:00 05:00 06:00 07:00 08:00 09:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 21:00 22:00 23:00 Development Environment: CPU Utilisation/Time 46% Savings
  • 61. DEVELOPMENT & TEST IN THE CLOUD On-demand Charging ModelUnlimited Elastic Capacity Infrastructure as Code Durable Storage Take lots of it when you need it Throw it away when you don’t Preserve it for future reference & reuseDeploy to a known state, quickly
  • 62. Durable Storage AMIs Create a catalog of AMIs for each iteration of an application Stored in Amazon S3 Templates Source control infrastructure templates with every application version Snapshots Save disk images with ‘frozen’ data sets and attach to instances when needed Stored in Amazon S3
  • 63. Durable Storage AMIs Create a catalog of AMIs for each iteration of an application Stored in Amazon S3 Templates Source control infrastructure templates with every application version Snapshots Save disk images with ‘frozen’ data sets and attach to instances when needed Stored in Amazon S3 Enables you to roll back and recreate an environment for any given application version
  • 65. The cloud makes software development & testing easy1 You can make significant savings by making use of elasticity2 AWS provides unique tools to help you create & manage environments3 Enables you to operate at a scale & speed beyond traditional infrastructure4
  • 66. RESOURCES YOU CAN USE TO LEARN MORE
  • 68. Certification aws.amazon.com/certification Self-Paced Labs aws.amazon.com/training/
 self-paced-labs Try products, gain new skills, and get hands-on practice working with AWS technologies aws.amazon.com/training Training Validate your proven skills and expertise with the AWS platform Build technical expertise to design and operate scalable, efficient applications on AWS AWS Training & Certification
  • 70. Follow us for m ore events & w ebinars @AWScloud for Global AWS News & Announcements @AWS_UKI for local AWS events & news @IanMmmm Ian Massingham — Technical Evangelist