SlideShare a Scribd company logo
1 of 169
Orchestrating the
     Cloud


                              Matt Wood
        T E C H N O L O G Y   E VA N G E L I S T
Welcome
AGENDA
     Orchestrating the Cloud



1. Ap   plication architecture
2. Role of orchestration
3 . Pillars of orchestration
4. Orche stration by example
5. Summar y
1


Application
Architecture
Applications
in the cloud
3 tiers
Application tier


Code   Configuration
Application tier


Code   Configuration
Application tier


       Code           Configuration



                                         Service tier
                       Integration
 Operating system
                         settings

                       Services +
Launch configuration
                      configuration
Application tier


       Code           Configuration



                                         Service tier
                       Integration
 Operating system
                         settings

                       Services +
Launch configuration
                      configuration
Application tier


        Code                    Configuration



                                                        Service tier
                                  Integration
 Operating system
                                    settings

                                 Services +
Launch configuration
                                configuration


                                                  Infrastructure tier
   AMIs          Architecture          Multi-AZ


Scaling rules   Security groups      Middleware
Value baked into
    each tier
Value in
application
Value in
service tier
Optimisation        Configuration



     Value in
    service tier
           Technology
             choices
Value in
infrastructure
Engine room   Optimised



     Value in
  infrastructure
 Scalable     Fault tolerant
Maximising
  Orchestration
maximises this value
     value
Ephemeral
Maximising
     to
  value
  concrete
One team
 Maximising
        to
     value
whole organisation
One hit
Maximising
      to
   value
 reproducible
Maximising
Brittle to strong
     value
Maximising
Maximise value
  value
Maximising
 Minimise risk
   value
2


  Role of
Orchestration
Cloud life cycle
Initialisation
Steady state
  run time
Updates
Application updates




Updates
 Service updates
Scale events
Change
management
Ver y me t a !

      Managing
       change
     management
3


  Pillars of
Orchestration
Z   E   R   O   T   H   P   I   L   L   A   R




Version control
F   I   R   S   T   P   I   L   L   A   R




Provisioning
orchestration
CloudFormation
 aws.amazon.com/cloudformation
Template
Define a full
infrastructure
     stack
Auto-scaling
                                      RDS
  EC2        SNS
                           SimpleDB
                                       SQS

         Resources
Elastic Beanstalk             CloudWatch
               Security groups         Tags
Template   CloudFormation


                            Provisioned
                             resources
Complete
definition
Atomic
Idempotent
Free
Anatomy of a
  template
JSON
Perfect for
Plain text
                        version control




             JSON
             Validate-able
Declarative
 language
{
    "AWSTemplateFormatVersion" : "2010-09-09",

    "Description" : "Create an EC2 instances",

    "Parameters" : {
       "KeyName" : {
         "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance",
         "Type" : "String"
       }
    },

    "Mappings" : {
       "RegionMap" : {
         "us-east-1" : {
             "AMI" : "ami-76f0061f"
         },
         "us-west-1" : {
             "AMI" : "ami-655a0a20"
         },
         "eu-west-1" : {
             "AMI" : "ami-7fd4e10b"
         },
         "ap-southeast-1" : {
             "AMI" : "ami-72621c20"
         },
         "ap-northeast-1" : {
             "AMI" : "ami-8e08a38f"
         }
       }
    },

    "Resources" : {
       "Ec2Instance" : {
         "Type" : "AWS::EC2::Instance",
         "Properties" : {
           "KeyName" : { "Ref" : "KeyName" },
           "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]},
           "UserData" : { "Fn::Base64" : "80" }
         }
       }
    },

    "Outputs" : {
      "InstanceId" : {
         "Description" : "InstanceId of the newly created EC2 instance",
         "Value" : { "Ref" : "Ec2Instance" }
      },
      "AZ" : {
         "Description" : "Availability Zone of the newly created EC2 instance",
         "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] }
      },
      "PublicIP" : {
         "Description" : "Public IP address of the newly created EC2 instance",
         "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "PublicIp" ] }
      }
    }
}
{
    "AWSTemplateFormatVersion" : "2010-09-09",

    "Description" : "Create an EC2 instances",                                                     Headers
                                                                                                   Parameters
    "Parameters" : {
       "KeyName" : {
         "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance",
         "Type" : "String"
       }
    },

    "Mappings" : {
       "RegionMap" : {
         "us-east-1" : {
             "AMI" : "ami-76f0061f"
         },
         "us-west-1" : {


                                                                                                   Mappings
             "AMI" : "ami-655a0a20"
         },
         "eu-west-1" : {
             "AMI" : "ami-7fd4e10b"
         },
         "ap-southeast-1" : {
             "AMI" : "ami-72621c20"
         },
         "ap-northeast-1" : {
             "AMI" : "ami-8e08a38f"
         }
       }
    },

    "Resources" : {
       "Ec2Instance" : {
         "Type" : "AWS::EC2::Instance",


                                                                                                   Resources
         "Properties" : {
           "KeyName" : { "Ref" : "KeyName" },
           "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]},
           "UserData" : { "Fn::Base64" : "80" }
         }
       }
    },

    "Outputs" : {
      "InstanceId" : {
         "Description" : "InstanceId of the newly created EC2 instance",
         "Value" : { "Ref" : "Ec2Instance" }
      },

                                                                                                   Outputs
      "AZ" : {
         "Description" : "Availability Zone of the newly created EC2 instance",
         "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] }
      },
      "PublicIP" : {
         "Description" : "Public IP address of the newly created EC2 instance",
         "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "PublicIp" ] }
      }
    }
}
Parameters
Provision-time specification
  Command line options
"Parameters" : {
   "KeyName" : {
     "Description" : "Name of an existing
      EC2 KeyPair to enable SSH access to
      the instance",
     "Type" : "String"
   }
},
Mappings
  Conditionals
 Case statements
"Mappings" : {
   "RegionMap" : {
     "us-east-1" : {
         "AMI" : "ami-76f0061f"
     },
     "us-west-1" : {
         "AMI" : "ami-655a0a20"
     },
     "eu-west-1" : {
         "AMI" : "ami-7fd4e10b"
     },
     "ap-southeast-1" : {
         "AMI" : "ami-72621c20"
     },
     "ap-northeast-1" : {
         "AMI" : "ami-8e08a38f"
     }
   }
},
"Mappings": {
  "AWSInstanceType2Arch" : {
     "t1.micro"    : { "Arch"   :   "64"   },
     "m1.large"    : { "Arch"   :   "64"   },
     "m1.xlarge"   : { "Arch"   :   "64"   },
     "m2.xlarge"   : { "Arch"   :   "64"   },
     "m2.2xlarge" : { "Arch"    :   "64"   },
     "m2.4xlarge" : { "Arch"    :   "64"   },
     "c1.xlarge"   : { "Arch"   :   "64"   },
     "cc1.4xlarge" : { "Arch"   :   "64"   }
  },
Resources
"Resources" : {
    "Ec2Instance" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "KeyName" : { "Ref" : "KeyName" },
        "ImageId" : { "Fn::FindInMap" :
[ "RegionMap", { "Ref" : "AWS::Region" },
"AMI" ]},
        "UserData" : { "Fn::Base64" : "80" }
      }
    }
  }
"Resources" : {
    "Ec2Instance" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "KeyName" : { "Ref" : "KeyName" },
        "ImageId" : { "Fn::FindInMap" :
[ "RegionMap", { "Ref" : "AWS::Region" },
"AMI" ]},
        "UserData" : { "Fn::Base64" : "80" }
      }
    }
  }
"Resources" : {
    "Ec2Instance" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "KeyName" : { "Ref" : "KeyName" },
        "ImageId" : { "Fn::FindInMap" :
[ "RegionMap", { "Ref" : "AWS::Region" },
"AMI" ]},
        "UserData" : { "Fn::Base64" : "80" }
      }
    }
  }
"KeyName" : { "Ref" : "KeyName" },



                  Par  ame  ter
                   re fere nce
"ImageId" : {

     "Fn::FindInMap" :
     [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]

},
M ap c ondit ional
"ImageId" : {

     "Fn::FindInMap" :
     [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]

},
"ImageId" : {

     "Fn::FindInMap" :
     [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]

},


       Nam e of
         map
"ImageId" : {

     "Fn::FindInMap" :
     [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]

},

                     Intrinsic
                     property
                    reference
Outputs
Returned values
"Outputs" : {
      "InstanceId" : {
         "Description" : "InstanceId of the newly created EC2 instance",
         "Value" : { "Ref" : "Ec2Instance" }
      },
      "AZ" : {
         "Description" : "Availability Zone of the newly created EC2 instance",
         "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] }
      },
      "PublicIP" : {
         "Description" : "Public IP address of the newly created EC2 instance",
         "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "PublicIp" ] }
      }
    }
}
Deliver via API
Validate via API
Deliver via S3
Growing library
S   E   C   O   N   D   P   I   L   L   A   R




Configuration
management
Custom AMI
m1.large




100Gb
Template



 m1.large
  AMI         AMI




SNAPSHOT
  100Gb     SNAPSHOT
m1.large
  AMI       m1.large




SNAPSHOT
  100Gb     100Gb
m1.large   m1.large   m1.large   m1.large




100Gb      100Gb      100Gb      100Gb




m1.large   m1.large   m1.large   m1.large




100Gb      100Gb      100Gb      100Gb
Bootstrap
Generic AMI
Custom build
Services       Dependencies




Define manifests
     Configuration
                      Applications
AMI




              SNAPSHOT




Template   CloudFormation
AMI          m1.large
                              AMI




              SNAPSHOT      SNAPSHOT
                              100Gb




Template   CloudFormation
Services
                AMI          m1.large
                              AMI       Dependencies
                                        Applications
                                        Configration
              SNAPSHOT      SNAPSHOT
                              100Gb




Template   CloudFormation
1. Setup users and groups
2. Install Apache
3. Configure Apache
4. Setup directories
5. Start ancillary services
6. Deploy code
Management
  server
Pull
AMI




SNAPSHOT   m1.large    m1.large    m1.large




           100Gb        100Gb      100Gb




                      Management
                        server
Push
m1.large    m1.large    m1.large




100Gb        100Gb      100Gb




           Management
             server
Fewer AMIs to
   manage
Versioned
configuration
Codified updates
Known state
Rolling updates
Simulations
Built for elastic
 architectures
Loose coupling
Address via
 meta-data
And much more!
:(
Extra overhead
Chef
+ Knife
Puppet
+ MCollective
T   H   I   R   D   P   I   L   L   A   R




Performance
 automation
Auto-scaling
ELB




CloudWatch Auto-scaling
Scaling group
DatabaseConnections



                DatabaseConnections




Scaling group             Triggers
                  (Alarms + Policies)
Launch
configurations




                       DatabaseConnections



                       DatabaseConnections




       Scaling group             Triggers
                         (Alarms + Policies)
Additional
performance
Launch
configurations




                       DatabaseConnections



                       DatabaseConnections




       Scaling group             Triggers
                         (Alarms + Policies)
Launch
configurations




                       DatabaseConnections



                       DatabaseConnections




       Scaling group             Triggers
                         (Alarms + Policies)
Launch
configurations




                       DatabaseConnections



                       DatabaseConnections




       Scaling group             Triggers
                         (Alarms + Policies)
Launch
configurations




                       DatabaseConnections



                       DatabaseConnections




       Scaling group             Triggers
                         (Alarms + Policies)
Auto-healing
4


Orchestration
by Example
Web application
 Web application
Initialisation
 with CloudFormation
Design stack
Load balancer



Fault tolerant
web servers




RDS
Create template
{
    "AWSTemplateFormatVersion" : "2010-09-09",


    "Parameters" : {




                                                                                                                          Parameters
       "InstanceType" : {
          "Description" : "Type of EC2 instance to launch",
          "Type" : "String",
          "Default" : "m1.small"
       },
       "WebServerPort" : {
          "Description" : "TCP/IP port of the web server",
          "Type" : "String",
          "Default" : "8888"
       },
       "KeyName" : {
          "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances",
          "Type" : "String"
       }
    },

    "Mappings" : {
       "AWSInstanceType2Arch" : {
          "t1.micro"    : { "Arch" : "64" },
          "m1.small"    : { "Arch" : "32" },
          "m1.large"    : { "Arch" : "64" },
          "m1.xlarge"   : { "Arch" : "64" },
          "m2.xlarge"   : { "Arch" : "64" },




                                                                                                                          Mappings
          "m2.2xlarge" : { "Arch" : "64" },
          "m2.4xlarge" : { "Arch" : "64" },
          "c1.medium"   : { "Arch" : "32" },
          "c1.xlarge"   : { "Arch" : "64" },
          "cc1.4xlarge" : { "Arch" : "64" }
       },
       "AWSRegionArch2AMI" : {
          "us-east-1" : { "32" : "ami-6411e20d", "64"   : "ami-7a11e213" },
          "us-west-1" : { "32" : "ami-c9c7978c", "64"   : "ami-cfc7978a" },
          "eu-west-1" : { "32" : "ami-37c2f643", "64"   : "ami-31c2f645" },
          "ap-southeast-1" : { "32" : "ami-66f28c34",   "64" : "ami-60f28c32" },
          "ap-northeast-1" : { "32" : "ami-9c03a89d",   "64" : "ami-a003a8a1" }
       }
    },

    "Resources" : {
      "WebServerGroup" : {
         "Type" : "AWS::AutoScaling::AutoScalingGroup",
         "Properties" : {
           "AvailabilityZones" : { "Fn::GetAZs" : "" },
           "LaunchConfigurationName" : { "Ref" : "LaunchConfig" },
           "MinSize" : "2",
           "MaxSize" : "2",
           "LoadBalancerNames" : [ { "Ref" : "ElasticLoadBalancer" } ]
         }
      },

      "LaunchConfig" : {
         "Type" : "AWS::AutoScaling::LaunchConfiguration",
         "Properties" : {
           "KeyName" : { "Ref" : "KeyName" },
           "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" },
                                              { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" },
                                              "Arch" ] } ] },
           "UserData" : { "Fn::Base64" : { "Ref" : "WebServerPort" }},
           "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ],
           "InstanceType" : { "Ref" : "InstanceType" }
         }
      },




                                                                                                                          Resources
      "ElasticLoadBalancer" : {
         "Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
         "Properties" : {
           "AvailabilityZones" : { "Fn::GetAZs" : "" },
           "Listeners" : [ {
             "LoadBalancerPort" : "80",
             "InstancePort" : { "Ref" : "WebServerPort" },
             "Protocol" : "HTTP"
           } ],
           "HealthCheck" : {
             "Target" : { "Fn::Join" : [ "", ["HTTP:", { "Ref" : "WebServerPort" }, "/"]]},
             "HealthyThreshold" : "3",
             "UnhealthyThreshold" : "5",
             "Interval" : "30",
             "Timeout" : "5"
           }
         }
      },

      "InstanceSecurityGroup" : {
        "Type" : "AWS::EC2::SecurityGroup",
        "Properties" : {
          "GroupDescription" : "Enable SSH access and HTTP access on the inbound port",
          "SecurityGroupIngress" : [ {
             "IpProtocol" : "tcp",
             "FromPort" : "22",
             "ToPort" : "22",
             "CidrIp" : "0.0.0.0/0"
          },
          {
             "IpProtocol" : "tcp",
             "FromPort" : { "Ref" : "WebServerPort" },
             "ToPort" : { "Ref" : "WebServerPort" },
             "CidrIp" : "0.0.0.0/0"
          } ]
        }
      }




                                                                                                                          Outputs
    },

    "Outputs" : {
      "URL" : {
        "Description" : "URL of the website",
        "Value" : { "Fn::Join" : [ "", [ "http://", { "Fn::GetAtt" : [ "ElasticLoadBalancer", "DNSName" ]}]]}
      }
    }
}
"Parameters" : {
   "InstanceType" : {
      "Description" : "Type of EC2 instance to launch",
      "Type" : "String",
      "Default" : "m1.small"
   },
   "WebServerPort" : {
      "Description" : "TCP/IP port of the web server",
      "Type" : "String",
      "Default" : "8888"
   },
   "DatabaseName": {
      "Default": "SampleDatabase",
      "Description" : "Name of the sample database",
      "Type": "String"
   },
   "DatabaseUser": {
      "Default": "admin",
      "NoEcho": "true",
      "Description" : "Sample database admin account username",
      "Type": "String"
   },
   "DatabasePwd": {
      "Default": "admin",
      "NoEcho": "true",
      "Description" : "Sample database admin account password",
      "Type": "String"
   },
   "DatabasePort": {
      "Default": "8443",
      "Description" : "TCP/IP port for the RDS database",
      "Type": "String"
   },
   "KeyName" : {
      "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances",
      "Type" : "String"
   }
},
"Mappings" : {
   "AWSInstanceType2Arch" : {
      "t1.micro"    : { "Arch" : "64" },
      "m1.small"    : { "Arch" : "32" },
      "m1.large"    : { "Arch" : "64" },
      "m1.xlarge"   : { "Arch" : "64" },
      "m2.xlarge"   : { "Arch" : "64" },
      "m2.2xlarge" : { "Arch" : "64" },
      "m2.4xlarge" : { "Arch" : "64" },
      "c1.medium"   : { "Arch" : "32" },
      "c1.xlarge"   : { "Arch" : "64" },
      "cc1.4xlarge" : { "Arch" : "64" }
   },
   "AWSRegionArch2AMI" : {
      "us-east-1" : { "32" : "ami-6411e20d", "64"   : "ami-7a11e213" },
      "us-west-1" : { "32" : "ami-c9c7978c", "64"   : "ami-cfc7978a" },
      "eu-west-1" : { "32" : "ami-37c2f643", "64"   : "ami-31c2f645" },
      "ap-southeast-1" : { "32" : "ami-66f28c34",   "64" : "ami-60f28c32" },
      "ap-northeast-1" : { "32" : "ami-9c03a89d",   "64" : "ami-a003a8a1" }
   }
},
"Resources" : {
  "WebServerGroup" : {
    "Type" : "AWS::AutoScaling::AutoScalingGroup",
    "Properties" : {
      "AvailabilityZones" : { "Fn::GetAZs" : "" },
      "LaunchConfigurationName" : { "Ref" : "LaunchConfig" },
      "MinSize" : "3",
      "MaxSize" : "3",
      "LoadBalancerNames" : [ { "Ref" : "ElasticLoadBalancer" } ]
    }
  },
"SampleDatabase": {
       "Properties": {
          "Engine": "MySQL5.1",
          "DBName": {
             "Ref": "RailDatabaseName"
          },
          "Port": "8443",
          "MultiAZ" : { "Fn::FindInMap" : [ "AWSRegionCapabilities",
{ "Ref" : "AWS::Region" }, "RDSMultiAZ"] },
          "MasterUsername": {
             "Ref": "DatabaseUser"
          },
          "DBInstanceClass": "db.m1.small",
          "DBSecurityGroups": [
             {
               "Ref": "DBSecurityGroup"
             }
          ],
          "AllocatedStorage": "5",
          "MasterUserPassword": {
             "Ref": "DatabasePwd"
          }
       },
       "Type": "AWS::RDS::DBInstance"
    },
"LaunchConfig" : {
      "Type" : "AWS::AutoScaling::LaunchConfiguration",
      "Properties" : {
        "KeyName" : { "Ref" : "KeyName" },
        "ImageId" : { "Fn::FindInMap" :
[ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" },

{ "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" :
"InstanceType" },
                                           "Arch" ] } ] },
         "SecurityGroups" : [ { "Ref" :
"InstanceSecurityGroup" } ],
         "InstanceType" : { "Ref" : "InstanceType" }
       }
    },
"UserData": {

   
             "Fn::Base64": {

   
               "Fn::Join": [

   
                 ":",

   
                 [

   
                   {

   
                      "Ref": "DatabaseName"

   
                   },

   
                   {

   
                      "Ref": "DatabaseUser"

   
                   },

   
                   {

   
                      "Ref": "DatabasePwd"

   
                   },

   
                   {

   
                      "Ref": "DatabasePort"

   
                   },

   
                   {

   
                      "Fn::GetAtt": [

   
                        "SampleDatabase",

   
                        "Endpoint.Address"

   
                      ]

   
                   },

   
                   {

   
                      "Ref": "WebServerPort"

   
                   }

   
                 ]

   
               ]

   
             }
"ElasticLoadBalancer" : {
       "Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
       "Properties" : {
         "AvailabilityZones" : { "Fn::GetAZs" : "" },
         "Listeners" : [ {
           "LoadBalancerPort" : "80",
           "InstancePort" : { "Ref" : "WebServerPort" },
           "Protocol" : "HTTP"
         } ],
         "HealthCheck" : {
           "Target" : { "Fn::Join" : [ "", ["HTTP:", { "Ref" :
"WebServerPort" }, "/"]]},
           "HealthyThreshold" : "3",
           "UnhealthyThreshold" : "5",
           "Interval" : "30",
           "Timeout" : "5"
         }
       }
    },
"DBSecurityGroup": {
     "Properties": {
        "DBSecurityGroupIngress": {
           "EC2SecurityGroupName": {
             "Ref": "EC2SecurityGroup"
           }
        },
        "GroupDescription": "database access"
     },
     "Type": "AWS::RDS::DBSecurityGroup"
  },

  "InstanceSecurityGroup" : {
    "Type" : "AWS::EC2::SecurityGroup",
    "Properties" : {
      "GroupDescription" : "Enable SSH access and HTTP access on the inbound port",
      "SecurityGroupIngress" : [ {
         "IpProtocol" : "tcp",
         "FromPort" : "22",
         "ToPort" : "22",
         "CidrIp" : "0.0.0.0/0"
      },
      {
         "IpProtocol" : "tcp",
         "FromPort" : { "Ref" : "WebServerPort" },
         "ToPort" : { "Ref" : "WebServerPort" },
         "CidrIp" : "0.0.0.0/0"
      } ]
    }
  }
},
"Outputs" : {
    "URL" : {
      "Description" : "URL of the website",
      "Value" : { "Fn::Join" : [ "", [ "http://",
{ "Fn::GetAtt" : [ "ElasticLoadBalancer", "DNSName" ]}]]}
    }
  }
Create stack
DatabasePort



DatabaseUser

DatabaseName
Example application
Example application
Example application
ApplicationStack




ELB URL            URL of website                         165783690.eu-.west-1.elb.
Steady state
monitoring with CloudWatch
Update
with CloudFormation
Update
with Puppet
Define manifest

 Resource lists, dependencies
define apache::site ( $ensure = 'present', $require_package
= 'apache', $content = '', $source = '') {

 include apache


   $site_file = "${module_dir_path}/apache/sites/${name}"

   config_file {

   
 $site_file:

   
 
 ensure => $ensure,

   
 
 content => $content,

   
 
 source => $source,

   
 
 notify => Exec["reload-apache"]

   }
}
define apache::site ( $ensure = 'present', $require_package
= 'apache', $content = '', $source = '') {

 include apache


   $site_file = "${module_dir_path}/apache/sites/${name}"

   config_file {

   
 $site_file:

   
 
 ensure => $ensure,

   
 
 content => $content,

   
 
 source => $source,

   
 
 notify => Exec["reload-apache"]

   }
}
define apache::site ( $ensure = 'present', $require_package
= 'apache', $content = '', $source = '') {

 include apache


   $site_file = "${module_dir_path}/apache/sites/${name}"

   config_file {

   
 $site_file:

   
 
 ensure => $ensure,

   
 
 content => $content,

   
 
 source => $source,

   
 
 notify => Exec["reload-apache"]

   }
}
Apply manifest
        puppet apply,
Pull/push from the Puppet Master
Performance
 automation
 with EC2 autoscaling
as-create-launch-config
     AppLaunchConfig
     --image-id ami-132216677


     --instance-type m1.large
     --key amazon-web
     --group "Web and SSH"
as-create-auto-scaling-group
 AppScalingGroup
 --launch-configuration AppLaunchConfig
 --availability-zones eu-west-1a, eu-west-1b
 --min-size 10
 --max-size 100
 --load-balancers app-load-balancer
as-put-scaling-policy
 AppScaleUpPolicy
 --auto-scaling-group AppScalingGroup
 --scaling-adjustment 1
 --type ChangeInCapacity
 --cool-down 300
mon-put-metric-alarm
 AppHighCPUAlarm
 --comparison-operator GreaterThanThreshold
 --evaluation-period 1
 --metric-name CPUUtilization
 --namespace “AWS:EC2”
 --period 600
 --statistic Average
 --threshold 80
 --alarm-actions <high-cpu-policy-arn>
 --dimensions
 “AutoscalingGroupName=AppScalingGroup”
as-put-scaling-policy
 AppScaleDownPolicy
 --auto-scaling-group AppScalingGroup
 --scaling-adjustment -1
 --type ChangeInCapacity
 --cool-down 300
mon-put-metric-alarm
 AppLowCPUAlarm
 --comparison-operator LessThanThreshold
 --evaluation-period 1
 --metric-name CPUUtilization
 --namespace “AWS:EC2”
 --period 600
 --statistic Average
 --threshold 80
 --alarm-actions <low-cpu-policy-arn>
 --dimensions
 “AutoscalingGroupName=AppScalingGroup”
aws.amazon.com/cloudformation


       puppetlabs.com

      opscode.com/chef


 aws.amazon.com/whitepapers
AGENDA
     Orchestrating the Cloud



1. Ap   plication architecture
2. Role of orchestration
3 . Pillars of orchestration
4. Orche stration by example
5. Summar y
3 tiers of cloud
application design
Maximising the value
    in each tier
Orchestration
codifies knowledge
Three pillars of
 orchestration
Provisioning
orchestration
Configuration
management
Performance
 automation
CloudFormation
Puppet, Chef
Autoscaling service
aws.amazon.com
Thank you!
Q U E S T I O N S     +     C O M M E N T S



matthew@amazon.com
              @mza
              O N   T W I T T E R

More Related Content

What's hot

AWS Landing Zone Deep Dive (ENT350-R2) - AWS re:Invent 2018
AWS Landing Zone Deep Dive (ENT350-R2) - AWS re:Invent 2018AWS Landing Zone Deep Dive (ENT350-R2) - AWS re:Invent 2018
AWS Landing Zone Deep Dive (ENT350-R2) - AWS re:Invent 2018Amazon Web Services
 
Journey Through the AWS Cloud: Cost Optimisation
Journey Through the AWS Cloud: Cost OptimisationJourney Through the AWS Cloud: Cost Optimisation
Journey Through the AWS Cloud: Cost OptimisationAmazon Web Services
 
Introduction to AWS Lambda and Serverless Applications
Introduction to AWS Lambda and Serverless ApplicationsIntroduction to AWS Lambda and Serverless Applications
Introduction to AWS Lambda and Serverless ApplicationsAmazon Web Services
 
Introduce AWS Lambda for newbie and Non-IT
Introduce AWS Lambda for newbie and Non-ITIntroduce AWS Lambda for newbie and Non-IT
Introduce AWS Lambda for newbie and Non-ITChitpong Wuttanan
 
AWS CodeCommit, CodeDeploy & CodePipeline
AWS CodeCommit, CodeDeploy & CodePipelineAWS CodeCommit, CodeDeploy & CodePipeline
AWS CodeCommit, CodeDeploy & CodePipelineJulien SIMON
 
Terraform introduction
Terraform introductionTerraform introduction
Terraform introductionJason Vance
 
Introduction to AWS Organizations
Introduction to AWS OrganizationsIntroduction to AWS Organizations
Introduction to AWS OrganizationsAmazon Web Services
 
Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...
Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...
Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...Amazon Web Services
 
Webinar aws 101 a walk through the aws cloud- introduction to cloud computi...
Webinar aws 101   a walk through the aws cloud- introduction to cloud computi...Webinar aws 101   a walk through the aws cloud- introduction to cloud computi...
Webinar aws 101 a walk through the aws cloud- introduction to cloud computi...Amazon Web Services
 
Deploy and Govern at Scale with AWS Control Tower
Deploy and Govern at Scale with AWS Control TowerDeploy and Govern at Scale with AWS Control Tower
Deploy and Govern at Scale with AWS Control TowerAmazon 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
 
Landing Zones - Creating a Foundation for Your AWS Migrations
Landing Zones - Creating a Foundation for Your AWS MigrationsLanding Zones - Creating a Foundation for Your AWS Migrations
Landing Zones - Creating a Foundation for Your AWS MigrationsAmazon Web Services
 
Deep Dive on Amazon GuardDuty - AWS Online Tech Talks
Deep Dive on Amazon GuardDuty - AWS Online Tech TalksDeep Dive on Amazon GuardDuty - AWS Online Tech Talks
Deep Dive on Amazon GuardDuty - AWS Online Tech TalksAmazon Web Services
 
Amazon EKS - Elastic Container Service for Kubernetes
Amazon EKS - Elastic Container Service for KubernetesAmazon EKS - Elastic Container Service for Kubernetes
Amazon EKS - Elastic Container Service for KubernetesAmazon Web Services
 

What's hot (20)

AWS Landing Zone Deep Dive (ENT350-R2) - AWS re:Invent 2018
AWS Landing Zone Deep Dive (ENT350-R2) - AWS re:Invent 2018AWS Landing Zone Deep Dive (ENT350-R2) - AWS re:Invent 2018
AWS Landing Zone Deep Dive (ENT350-R2) - AWS re:Invent 2018
 
Journey Through the AWS Cloud: Cost Optimisation
Journey Through the AWS Cloud: Cost OptimisationJourney Through the AWS Cloud: Cost Optimisation
Journey Through the AWS Cloud: Cost Optimisation
 
Introduction to AWS Lambda and Serverless Applications
Introduction to AWS Lambda and Serverless ApplicationsIntroduction to AWS Lambda and Serverless Applications
Introduction to AWS Lambda and Serverless Applications
 
AWS Security by Design
AWS Security by Design AWS Security by Design
AWS Security by Design
 
Introduce AWS Lambda for newbie and Non-IT
Introduce AWS Lambda for newbie and Non-ITIntroduce AWS Lambda for newbie and Non-IT
Introduce AWS Lambda for newbie and Non-IT
 
AWS CodeCommit, CodeDeploy & CodePipeline
AWS CodeCommit, CodeDeploy & CodePipelineAWS CodeCommit, CodeDeploy & CodePipeline
AWS CodeCommit, CodeDeploy & CodePipeline
 
Terraform introduction
Terraform introductionTerraform introduction
Terraform introduction
 
Cloud Security (AWS)
Cloud Security (AWS)Cloud Security (AWS)
Cloud Security (AWS)
 
Introduction to AWS Organizations
Introduction to AWS OrganizationsIntroduction to AWS Organizations
Introduction to AWS Organizations
 
Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...
Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...
Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...
 
Webinar aws 101 a walk through the aws cloud- introduction to cloud computi...
Webinar aws 101   a walk through the aws cloud- introduction to cloud computi...Webinar aws 101   a walk through the aws cloud- introduction to cloud computi...
Webinar aws 101 a walk through the aws cloud- introduction to cloud computi...
 
Deploy and Govern at Scale with AWS Control Tower
Deploy and Govern at Scale with AWS Control TowerDeploy and Govern at Scale with AWS Control Tower
Deploy and Govern at Scale with AWS Control Tower
 
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
 
Introduction to DevOps on AWS
Introduction to DevOps on AWSIntroduction to DevOps on AWS
Introduction to DevOps on AWS
 
AWS CDK Introduction
AWS CDK IntroductionAWS CDK Introduction
AWS CDK Introduction
 
Landing Zones - Creating a Foundation for Your AWS Migrations
Landing Zones - Creating a Foundation for Your AWS MigrationsLanding Zones - Creating a Foundation for Your AWS Migrations
Landing Zones - Creating a Foundation for Your AWS Migrations
 
Deep Dive on Amazon GuardDuty - AWS Online Tech Talks
Deep Dive on Amazon GuardDuty - AWS Online Tech TalksDeep Dive on Amazon GuardDuty - AWS Online Tech Talks
Deep Dive on Amazon GuardDuty - AWS Online Tech Talks
 
Amazon EKS - Elastic Container Service for Kubernetes
Amazon EKS - Elastic Container Service for KubernetesAmazon EKS - Elastic Container Service for Kubernetes
Amazon EKS - Elastic Container Service for Kubernetes
 
AWS networking fundamentals
AWS networking fundamentalsAWS networking fundamentals
AWS networking fundamentals
 
AWS Business Essentials Day
AWS Business Essentials DayAWS Business Essentials Day
AWS Business Essentials Day
 

Similar to Orchestrating the Cloud with CloudFormation

DevOps on AWS: Deep Dive on Infrastructure as Code - Toronto
DevOps on AWS: Deep Dive on Infrastructure as Code - TorontoDevOps on AWS: Deep Dive on Infrastructure as Code - Toronto
DevOps on AWS: Deep Dive on Infrastructure as Code - TorontoAmazon Web Services
 
AWS January 2016 Webinar Series - Managing your Infrastructure as Code
AWS January 2016 Webinar Series - Managing your Infrastructure as CodeAWS January 2016 Webinar Series - Managing your Infrastructure as Code
AWS January 2016 Webinar Series - Managing your 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
 
Scalable and Fault-Tolerant Apps with AWS
Scalable and Fault-Tolerant Apps with AWSScalable and Fault-Tolerant Apps with AWS
Scalable and Fault-Tolerant Apps with AWSFernando Rodriguez
 
Programando sua infraestrutura com o AWS CloudFormation
Programando sua infraestrutura com o AWS CloudFormationProgramando sua infraestrutura com o AWS CloudFormation
Programando sua infraestrutura com o AWS CloudFormationAmazon Web Services LATAM
 
AWS CloudFormation Best Practices
AWS CloudFormation Best PracticesAWS CloudFormation Best Practices
AWS CloudFormation Best PracticesAmazon Web Services
 
How Intuit Leveraged AWS OpsWorks as the Engine of Our PaaS (DMG305) | AWS re...
How Intuit Leveraged AWS OpsWorks as the Engine of Our PaaS (DMG305) | AWS re...How Intuit Leveraged AWS OpsWorks as the Engine of Our PaaS (DMG305) | AWS re...
How Intuit Leveraged AWS OpsWorks as the Engine of Our PaaS (DMG305) | AWS re...Amazon Web Services
 
Managing Your Infrastructure as Code
Managing Your Infrastructure as CodeManaging Your Infrastructure as Code
Managing Your Infrastructure as CodeAmazon 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
 
Self Service Agile Infrastructure for Product Teams - Pop-up Loft Tel Aviv
Self Service Agile Infrastructure for Product Teams - Pop-up Loft Tel AvivSelf Service Agile Infrastructure for Product Teams - Pop-up Loft Tel Aviv
Self Service Agile Infrastructure for Product Teams - Pop-up Loft Tel AvivAmazon Web Services
 
AWS CloudFormation Session
AWS CloudFormation SessionAWS CloudFormation Session
AWS CloudFormation SessionKamal Maiti
 
Deep Dive into AWS SAM: re:Invent 2018 Recap at the AWS Loft - San Francisco
Deep Dive into AWS SAM: re:Invent 2018 Recap at the AWS Loft - San FranciscoDeep Dive into AWS SAM: re:Invent 2018 Recap at the AWS Loft - San Francisco
Deep Dive into AWS SAM: re:Invent 2018 Recap at the AWS Loft - San FranciscoAmazon 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
 
AWS CloudFormation Masterclass
AWS CloudFormation Masterclass AWS CloudFormation Masterclass
AWS CloudFormation Masterclass Ian Massingham
 
AWS CloudFormation Intrinsic Functions and Mappings
AWS CloudFormation Intrinsic Functions and Mappings AWS CloudFormation Intrinsic Functions and Mappings
AWS CloudFormation Intrinsic Functions and Mappings Adam Book
 
Aws summit devops 云端多环境自动化运维和部署
Aws summit devops   云端多环境自动化运维和部署Aws summit devops   云端多环境自动化运维和部署
Aws summit devops 云端多环境自动化运维和部署Leon Li
 

Similar to Orchestrating the Cloud with CloudFormation (20)

DevOps on AWS: Deep Dive on Infrastructure as Code - Toronto
DevOps on AWS: Deep Dive on Infrastructure as Code - TorontoDevOps on AWS: Deep Dive on Infrastructure as Code - Toronto
DevOps on AWS: Deep Dive on Infrastructure as Code - Toronto
 
infrastructure as code
infrastructure as codeinfrastructure as code
infrastructure as code
 
AWS January 2016 Webinar Series - Managing your Infrastructure as Code
AWS January 2016 Webinar Series - Managing your Infrastructure as CodeAWS January 2016 Webinar Series - Managing your Infrastructure as Code
AWS January 2016 Webinar Series - Managing your Infrastructure as Code
 
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
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as Code
 
Scalable and Fault-Tolerant Apps with AWS
Scalable and Fault-Tolerant Apps with AWSScalable and Fault-Tolerant Apps with AWS
Scalable and Fault-Tolerant Apps with AWS
 
Programando sua infraestrutura com o AWS CloudFormation
Programando sua infraestrutura com o AWS CloudFormationProgramando sua infraestrutura com o AWS CloudFormation
Programando sua infraestrutura com o AWS CloudFormation
 
AWS CloudFormation Best Practices
AWS CloudFormation Best PracticesAWS CloudFormation Best Practices
AWS CloudFormation Best Practices
 
How Intuit Leveraged AWS OpsWorks as the Engine of Our PaaS (DMG305) | AWS re...
How Intuit Leveraged AWS OpsWorks as the Engine of Our PaaS (DMG305) | AWS re...How Intuit Leveraged AWS OpsWorks as the Engine of Our PaaS (DMG305) | AWS re...
How Intuit Leveraged AWS OpsWorks as the Engine of Our PaaS (DMG305) | AWS re...
 
Managing Your Infrastructure as Code
Managing Your Infrastructure as CodeManaging Your Infrastructure as Code
Managing Your Infrastructure as Code
 
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,...
 
Self Service Agile Infrastructure for Product Teams - Pop-up Loft Tel Aviv
Self Service Agile Infrastructure for Product Teams - Pop-up Loft Tel AvivSelf Service Agile Infrastructure for Product Teams - Pop-up Loft Tel Aviv
Self Service Agile Infrastructure for Product Teams - Pop-up Loft Tel Aviv
 
AWS CloudFormation Session
AWS CloudFormation SessionAWS CloudFormation Session
AWS CloudFormation Session
 
Deep Dive into AWS SAM: re:Invent 2018 Recap at the AWS Loft - San Francisco
Deep Dive into AWS SAM: re:Invent 2018 Recap at the AWS Loft - San FranciscoDeep Dive into AWS SAM: re:Invent 2018 Recap at the AWS Loft - San Francisco
Deep Dive into AWS SAM: re:Invent 2018 Recap at the AWS Loft - San Francisco
 
Deep Dive into AWS SAM
Deep Dive into AWS SAMDeep Dive into AWS SAM
Deep Dive into AWS SAM
 
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
 
AWS CloudFormation Masterclass
AWS CloudFormation MasterclassAWS CloudFormation Masterclass
AWS CloudFormation Masterclass
 
AWS CloudFormation Masterclass
AWS CloudFormation Masterclass AWS CloudFormation Masterclass
AWS CloudFormation Masterclass
 
AWS CloudFormation Intrinsic Functions and Mappings
AWS CloudFormation Intrinsic Functions and Mappings AWS CloudFormation Intrinsic Functions and Mappings
AWS CloudFormation Intrinsic Functions and Mappings
 
Aws summit devops 云端多环境自动化运维和部署
Aws summit devops   云端多环境自动化运维和部署Aws summit devops   云端多环境自动化运维和部署
Aws summit devops 云端多环境自动化运维和部署
 

More from Amazon Web Services

Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...Amazon Web Services
 
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...Amazon Web Services
 
Esegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS FargateEsegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS FargateAmazon Web Services
 
Costruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWSCostruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWSAmazon Web Services
 
Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot Amazon Web Services
 
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...Amazon Web Services
 
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...Amazon Web Services
 
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows WorkloadsMicrosoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows WorkloadsAmazon Web Services
 
Database Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatareDatabase Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatareAmazon Web Services
 
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJSCrea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJSAmazon Web Services
 
API moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e webAPI moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e webAmazon Web Services
 
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatareDatabase Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatareAmazon Web Services
 
Tools for building your MVP on AWS
Tools for building your MVP on AWSTools for building your MVP on AWS
Tools for building your MVP on AWSAmazon Web Services
 
How to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckHow to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckAmazon Web Services
 
Building a web application without servers
Building a web application without serversBuilding a web application without servers
Building a web application without serversAmazon Web Services
 
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...Amazon Web Services
 
Introduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container ServiceIntroduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container ServiceAmazon Web Services
 

More from Amazon Web Services (20)

Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
 
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
 
Esegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS FargateEsegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS Fargate
 
Costruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWSCostruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWS
 
Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot
 
Open banking as a service
Open banking as a serviceOpen banking as a service
Open banking as a service
 
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
 
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
 
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows WorkloadsMicrosoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
 
Computer Vision con AWS
Computer Vision con AWSComputer Vision con AWS
Computer Vision con AWS
 
Database Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatareDatabase Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatare
 
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJSCrea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
 
API moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e webAPI moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e web
 
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatareDatabase Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
 
Tools for building your MVP on AWS
Tools for building your MVP on AWSTools for building your MVP on AWS
Tools for building your MVP on AWS
 
How to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckHow to Build a Winning Pitch Deck
How to Build a Winning Pitch Deck
 
Building a web application without servers
Building a web application without serversBuilding a web application without servers
Building a web application without servers
 
Fundraising Essentials
Fundraising EssentialsFundraising Essentials
Fundraising Essentials
 
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
 
Introduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container ServiceIntroduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container Service
 

Recently uploaded

Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your QueriesExploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your QueriesSanjay Willie
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 

Recently uploaded (20)

Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your QueriesExploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 

Orchestrating the Cloud with CloudFormation

  • 1. Orchestrating the Cloud Matt Wood T E C H N O L O G Y E VA N G E L I S T
  • 3. AGENDA Orchestrating the Cloud 1. Ap plication architecture 2. Role of orchestration 3 . Pillars of orchestration 4. Orche stration by example 5. Summar y
  • 7. Application tier Code Configuration
  • 8. Application tier Code Configuration
  • 9. Application tier Code Configuration Service tier Integration Operating system settings Services + Launch configuration configuration
  • 10. Application tier Code Configuration Service tier Integration Operating system settings Services + Launch configuration configuration
  • 11. Application tier Code Configuration Service tier Integration Operating system settings Services + Launch configuration configuration Infrastructure tier AMIs Architecture Multi-AZ Scaling rules Security groups Middleware
  • 12. Value baked into each tier
  • 15. Optimisation Configuration Value in service tier Technology choices
  • 17. Engine room Optimised Value in infrastructure Scalable Fault tolerant
  • 19. Ephemeral Maximising to value concrete
  • 20. One team Maximising to value whole organisation
  • 21. One hit Maximising to value reproducible
  • 25. 2 Role of Orchestration
  • 28. Steady state run time
  • 33. Ver y me t a ! Managing change management
  • 34. 3 Pillars of Orchestration
  • 35. Z E R O T H P I L L A R Version control
  • 36. F I R S T P I L L A R Provisioning orchestration
  • 40. Auto-scaling RDS EC2 SNS SimpleDB SQS Resources Elastic Beanstalk CloudWatch Security groups Tags
  • 41. Template CloudFormation Provisioned resources
  • 45. Free
  • 46. Anatomy of a template
  • 47. JSON
  • 48. Perfect for Plain text version control JSON Validate-able
  • 50. { "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "Create an EC2 instances", "Parameters" : { "KeyName" : { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance", "Type" : "String" } }, "Mappings" : { "RegionMap" : { "us-east-1" : { "AMI" : "ami-76f0061f" }, "us-west-1" : { "AMI" : "ami-655a0a20" }, "eu-west-1" : { "AMI" : "ami-7fd4e10b" }, "ap-southeast-1" : { "AMI" : "ami-72621c20" }, "ap-northeast-1" : { "AMI" : "ami-8e08a38f" } } }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}, "UserData" : { "Fn::Base64" : "80" } } } }, "Outputs" : { "InstanceId" : { "Description" : "InstanceId of the newly created EC2 instance", "Value" : { "Ref" : "Ec2Instance" } }, "AZ" : { "Description" : "Availability Zone of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] } }, "PublicIP" : { "Description" : "Public IP address of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "PublicIp" ] } } } }
  • 51. { "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "Create an EC2 instances", Headers Parameters "Parameters" : { "KeyName" : { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance", "Type" : "String" } }, "Mappings" : { "RegionMap" : { "us-east-1" : { "AMI" : "ami-76f0061f" }, "us-west-1" : { Mappings "AMI" : "ami-655a0a20" }, "eu-west-1" : { "AMI" : "ami-7fd4e10b" }, "ap-southeast-1" : { "AMI" : "ami-72621c20" }, "ap-northeast-1" : { "AMI" : "ami-8e08a38f" } } }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", Resources "Properties" : { "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}, "UserData" : { "Fn::Base64" : "80" } } } }, "Outputs" : { "InstanceId" : { "Description" : "InstanceId of the newly created EC2 instance", "Value" : { "Ref" : "Ec2Instance" } }, Outputs "AZ" : { "Description" : "Availability Zone of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] } }, "PublicIP" : { "Description" : "Public IP address of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "PublicIp" ] } } } }
  • 53. "Parameters" : { "KeyName" : { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance", "Type" : "String" } },
  • 54. Mappings Conditionals Case statements
  • 55. "Mappings" : { "RegionMap" : { "us-east-1" : { "AMI" : "ami-76f0061f" }, "us-west-1" : { "AMI" : "ami-655a0a20" }, "eu-west-1" : { "AMI" : "ami-7fd4e10b" }, "ap-southeast-1" : { "AMI" : "ami-72621c20" }, "ap-northeast-1" : { "AMI" : "ami-8e08a38f" } } },
  • 56. "Mappings": { "AWSInstanceType2Arch" : { "t1.micro" : { "Arch" : "64" }, "m1.large" : { "Arch" : "64" }, "m1.xlarge" : { "Arch" : "64" }, "m2.xlarge" : { "Arch" : "64" }, "m2.2xlarge" : { "Arch" : "64" }, "m2.4xlarge" : { "Arch" : "64" }, "c1.xlarge" : { "Arch" : "64" }, "cc1.4xlarge" : { "Arch" : "64" } },
  • 58. "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}, "UserData" : { "Fn::Base64" : "80" } } } }
  • 59. "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}, "UserData" : { "Fn::Base64" : "80" } } } }
  • 60. "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}, "UserData" : { "Fn::Base64" : "80" } } } }
  • 61. "KeyName" : { "Ref" : "KeyName" }, Par ame ter re fere nce
  • 62. "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ] },
  • 63. M ap c ondit ional "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ] },
  • 64. "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ] }, Nam e of map
  • 65. "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ] }, Intrinsic property reference
  • 67. "Outputs" : { "InstanceId" : { "Description" : "InstanceId of the newly created EC2 instance", "Value" : { "Ref" : "Ec2Instance" } }, "AZ" : { "Description" : "Availability Zone of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] } }, "PublicIP" : { "Description" : "Public IP address of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "PublicIp" ] } } } }
  • 72. S E C O N D P I L L A R Configuration management
  • 75. Template m1.large AMI AMI SNAPSHOT 100Gb SNAPSHOT
  • 76. m1.large AMI m1.large SNAPSHOT 100Gb 100Gb
  • 77. m1.large m1.large m1.large m1.large 100Gb 100Gb 100Gb 100Gb m1.large m1.large m1.large m1.large 100Gb 100Gb 100Gb 100Gb
  • 81. Services Dependencies Define manifests Configuration Applications
  • 82. AMI SNAPSHOT Template CloudFormation
  • 83. AMI m1.large AMI SNAPSHOT SNAPSHOT 100Gb Template CloudFormation
  • 84. Services AMI m1.large AMI Dependencies Applications Configration SNAPSHOT SNAPSHOT 100Gb Template CloudFormation
  • 85. 1. Setup users and groups 2. Install Apache 3. Configure Apache 4. Setup directories 5. Start ancillary services 6. Deploy code
  • 87. Pull
  • 88. AMI SNAPSHOT m1.large m1.large m1.large 100Gb 100Gb 100Gb Management server
  • 89. Push
  • 90. m1.large m1.large m1.large 100Gb 100Gb 100Gb Management server
  • 91. Fewer AMIs to manage
  • 97. Built for elastic architectures
  • 104. T H I R D P I L L A R Performance automation
  • 108. DatabaseConnections DatabaseConnections Scaling group Triggers (Alarms + Policies)
  • 109. Launch configurations DatabaseConnections DatabaseConnections Scaling group Triggers (Alarms + Policies)
  • 111. Launch configurations DatabaseConnections DatabaseConnections Scaling group Triggers (Alarms + Policies)
  • 112. Launch configurations DatabaseConnections DatabaseConnections Scaling group Triggers (Alarms + Policies)
  • 113. Launch configurations DatabaseConnections DatabaseConnections Scaling group Triggers (Alarms + Policies)
  • 114. Launch configurations DatabaseConnections DatabaseConnections Scaling group Triggers (Alarms + Policies)
  • 117. Web application Web application
  • 122. { "AWSTemplateFormatVersion" : "2010-09-09", "Parameters" : { Parameters "InstanceType" : { "Description" : "Type of EC2 instance to launch", "Type" : "String", "Default" : "m1.small" }, "WebServerPort" : { "Description" : "TCP/IP port of the web server", "Type" : "String", "Default" : "8888" }, "KeyName" : { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances", "Type" : "String" } }, "Mappings" : { "AWSInstanceType2Arch" : { "t1.micro" : { "Arch" : "64" }, "m1.small" : { "Arch" : "32" }, "m1.large" : { "Arch" : "64" }, "m1.xlarge" : { "Arch" : "64" }, "m2.xlarge" : { "Arch" : "64" }, Mappings "m2.2xlarge" : { "Arch" : "64" }, "m2.4xlarge" : { "Arch" : "64" }, "c1.medium" : { "Arch" : "32" }, "c1.xlarge" : { "Arch" : "64" }, "cc1.4xlarge" : { "Arch" : "64" } }, "AWSRegionArch2AMI" : { "us-east-1" : { "32" : "ami-6411e20d", "64" : "ami-7a11e213" }, "us-west-1" : { "32" : "ami-c9c7978c", "64" : "ami-cfc7978a" }, "eu-west-1" : { "32" : "ami-37c2f643", "64" : "ami-31c2f645" }, "ap-southeast-1" : { "32" : "ami-66f28c34", "64" : "ami-60f28c32" }, "ap-northeast-1" : { "32" : "ami-9c03a89d", "64" : "ami-a003a8a1" } } }, "Resources" : { "WebServerGroup" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "AvailabilityZones" : { "Fn::GetAZs" : "" }, "LaunchConfigurationName" : { "Ref" : "LaunchConfig" }, "MinSize" : "2", "MaxSize" : "2", "LoadBalancerNames" : [ { "Ref" : "ElasticLoadBalancer" } ] } }, "LaunchConfig" : { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Properties" : { "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }, "UserData" : { "Fn::Base64" : { "Ref" : "WebServerPort" }}, "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ], "InstanceType" : { "Ref" : "InstanceType" } } }, Resources "ElasticLoadBalancer" : { "Type" : "AWS::ElasticLoadBalancing::LoadBalancer", "Properties" : { "AvailabilityZones" : { "Fn::GetAZs" : "" }, "Listeners" : [ { "LoadBalancerPort" : "80", "InstancePort" : { "Ref" : "WebServerPort" }, "Protocol" : "HTTP" } ], "HealthCheck" : { "Target" : { "Fn::Join" : [ "", ["HTTP:", { "Ref" : "WebServerPort" }, "/"]]}, "HealthyThreshold" : "3", "UnhealthyThreshold" : "5", "Interval" : "30", "Timeout" : "5" } } }, "InstanceSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable SSH access and HTTP access on the inbound port", "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0" }, { "IpProtocol" : "tcp", "FromPort" : { "Ref" : "WebServerPort" }, "ToPort" : { "Ref" : "WebServerPort" }, "CidrIp" : "0.0.0.0/0" } ] } } Outputs }, "Outputs" : { "URL" : { "Description" : "URL of the website", "Value" : { "Fn::Join" : [ "", [ "http://", { "Fn::GetAtt" : [ "ElasticLoadBalancer", "DNSName" ]}]]} } } }
  • 123. "Parameters" : { "InstanceType" : { "Description" : "Type of EC2 instance to launch", "Type" : "String", "Default" : "m1.small" }, "WebServerPort" : { "Description" : "TCP/IP port of the web server", "Type" : "String", "Default" : "8888" }, "DatabaseName": { "Default": "SampleDatabase", "Description" : "Name of the sample database", "Type": "String" }, "DatabaseUser": { "Default": "admin", "NoEcho": "true", "Description" : "Sample database admin account username", "Type": "String" }, "DatabasePwd": { "Default": "admin", "NoEcho": "true", "Description" : "Sample database admin account password", "Type": "String" }, "DatabasePort": { "Default": "8443", "Description" : "TCP/IP port for the RDS database", "Type": "String" }, "KeyName" : { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances", "Type" : "String" } },
  • 124. "Mappings" : { "AWSInstanceType2Arch" : { "t1.micro" : { "Arch" : "64" }, "m1.small" : { "Arch" : "32" }, "m1.large" : { "Arch" : "64" }, "m1.xlarge" : { "Arch" : "64" }, "m2.xlarge" : { "Arch" : "64" }, "m2.2xlarge" : { "Arch" : "64" }, "m2.4xlarge" : { "Arch" : "64" }, "c1.medium" : { "Arch" : "32" }, "c1.xlarge" : { "Arch" : "64" }, "cc1.4xlarge" : { "Arch" : "64" } }, "AWSRegionArch2AMI" : { "us-east-1" : { "32" : "ami-6411e20d", "64" : "ami-7a11e213" }, "us-west-1" : { "32" : "ami-c9c7978c", "64" : "ami-cfc7978a" }, "eu-west-1" : { "32" : "ami-37c2f643", "64" : "ami-31c2f645" }, "ap-southeast-1" : { "32" : "ami-66f28c34", "64" : "ami-60f28c32" }, "ap-northeast-1" : { "32" : "ami-9c03a89d", "64" : "ami-a003a8a1" } } },
  • 125. "Resources" : { "WebServerGroup" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "AvailabilityZones" : { "Fn::GetAZs" : "" }, "LaunchConfigurationName" : { "Ref" : "LaunchConfig" }, "MinSize" : "3", "MaxSize" : "3", "LoadBalancerNames" : [ { "Ref" : "ElasticLoadBalancer" } ] } },
  • 126. "SampleDatabase": { "Properties": { "Engine": "MySQL5.1", "DBName": { "Ref": "RailDatabaseName" }, "Port": "8443", "MultiAZ" : { "Fn::FindInMap" : [ "AWSRegionCapabilities", { "Ref" : "AWS::Region" }, "RDSMultiAZ"] }, "MasterUsername": { "Ref": "DatabaseUser" }, "DBInstanceClass": "db.m1.small", "DBSecurityGroups": [ { "Ref": "DBSecurityGroup" } ], "AllocatedStorage": "5", "MasterUserPassword": { "Ref": "DatabasePwd" } }, "Type": "AWS::RDS::DBInstance" },
  • 127. "LaunchConfig" : { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Properties" : { "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }, "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ], "InstanceType" : { "Ref" : "InstanceType" } } },
  • 128. "UserData": { "Fn::Base64": { "Fn::Join": [ ":", [ { "Ref": "DatabaseName" }, { "Ref": "DatabaseUser" }, { "Ref": "DatabasePwd" }, { "Ref": "DatabasePort" }, { "Fn::GetAtt": [ "SampleDatabase", "Endpoint.Address" ] }, { "Ref": "WebServerPort" } ] ] }
  • 129. "ElasticLoadBalancer" : { "Type" : "AWS::ElasticLoadBalancing::LoadBalancer", "Properties" : { "AvailabilityZones" : { "Fn::GetAZs" : "" }, "Listeners" : [ { "LoadBalancerPort" : "80", "InstancePort" : { "Ref" : "WebServerPort" }, "Protocol" : "HTTP" } ], "HealthCheck" : { "Target" : { "Fn::Join" : [ "", ["HTTP:", { "Ref" : "WebServerPort" }, "/"]]}, "HealthyThreshold" : "3", "UnhealthyThreshold" : "5", "Interval" : "30", "Timeout" : "5" } } },
  • 130. "DBSecurityGroup": { "Properties": { "DBSecurityGroupIngress": { "EC2SecurityGroupName": { "Ref": "EC2SecurityGroup" } }, "GroupDescription": "database access" }, "Type": "AWS::RDS::DBSecurityGroup" }, "InstanceSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable SSH access and HTTP access on the inbound port", "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0" }, { "IpProtocol" : "tcp", "FromPort" : { "Ref" : "WebServerPort" }, "ToPort" : { "Ref" : "WebServerPort" }, "CidrIp" : "0.0.0.0/0" } ] } } },
  • 131. "Outputs" : { "URL" : { "Description" : "URL of the website", "Value" : { "Fn::Join" : [ "", [ "http://", { "Fn::GetAtt" : [ "ElasticLoadBalancer", "DNSName" ]}]]} } }
  • 133.
  • 134.
  • 135.
  • 139. Example application ApplicationStack ELB URL URL of website 165783690.eu-.west-1.elb.
  • 143. Define manifest Resource lists, dependencies
  • 144. define apache::site ( $ensure = 'present', $require_package = 'apache', $content = '', $source = '') { include apache $site_file = "${module_dir_path}/apache/sites/${name}" config_file { $site_file: ensure => $ensure, content => $content, source => $source, notify => Exec["reload-apache"] } }
  • 145. define apache::site ( $ensure = 'present', $require_package = 'apache', $content = '', $source = '') { include apache $site_file = "${module_dir_path}/apache/sites/${name}" config_file { $site_file: ensure => $ensure, content => $content, source => $source, notify => Exec["reload-apache"] } }
  • 146. define apache::site ( $ensure = 'present', $require_package = 'apache', $content = '', $source = '') { include apache $site_file = "${module_dir_path}/apache/sites/${name}" config_file { $site_file: ensure => $ensure, content => $content, source => $source, notify => Exec["reload-apache"] } }
  • 147. Apply manifest puppet apply, Pull/push from the Puppet Master
  • 148. Performance automation with EC2 autoscaling
  • 149. as-create-launch-config AppLaunchConfig --image-id ami-132216677 --instance-type m1.large --key amazon-web --group "Web and SSH"
  • 150. as-create-auto-scaling-group AppScalingGroup --launch-configuration AppLaunchConfig --availability-zones eu-west-1a, eu-west-1b --min-size 10 --max-size 100 --load-balancers app-load-balancer
  • 151. as-put-scaling-policy AppScaleUpPolicy --auto-scaling-group AppScalingGroup --scaling-adjustment 1 --type ChangeInCapacity --cool-down 300
  • 152. mon-put-metric-alarm AppHighCPUAlarm --comparison-operator GreaterThanThreshold --evaluation-period 1 --metric-name CPUUtilization --namespace “AWS:EC2” --period 600 --statistic Average --threshold 80 --alarm-actions <high-cpu-policy-arn> --dimensions “AutoscalingGroupName=AppScalingGroup”
  • 153. as-put-scaling-policy AppScaleDownPolicy --auto-scaling-group AppScalingGroup --scaling-adjustment -1 --type ChangeInCapacity --cool-down 300
  • 154. mon-put-metric-alarm AppLowCPUAlarm --comparison-operator LessThanThreshold --evaluation-period 1 --metric-name CPUUtilization --namespace “AWS:EC2” --period 600 --statistic Average --threshold 80 --alarm-actions <low-cpu-policy-arn> --dimensions “AutoscalingGroupName=AppScalingGroup”
  • 155. aws.amazon.com/cloudformation puppetlabs.com opscode.com/chef aws.amazon.com/whitepapers
  • 156. AGENDA Orchestrating the Cloud 1. Ap plication architecture 2. Role of orchestration 3 . Pillars of orchestration 4. Orche stration by example 5. Summar y
  • 157. 3 tiers of cloud application design
  • 158. Maximising the value in each tier
  • 160. Three pillars of orchestration
  • 169. Q U E S T I O N S + C O M M E N T S matthew@amazon.com @mza O N T W I T T E R

Editor's Notes

  1. Good morning, my name is X, I&apos;m Y for Amazon Web Services, based in Singapore.\nToday we will talk about Cloud Computing, and explain to you why it&apos;s important to know about it.\n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. \n
  147. \n
  148. \n
  149. \n
  150. \n
  151. \n
  152. \n
  153. \n
  154. \n
  155. \n
  156. \n
  157. \n
  158. \n
  159. \n
  160. \n
  161. \n
  162. \n
  163. \n
  164. \n
  165. \n
  166. \n
  167. \n