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   Conļ¬guration
Application tier


Code   Conļ¬guration
Application tier


       Code           Conļ¬guration



                                         Service tier
                       Integration
 Operating system
                         settings

                       Services +
Launch conļ¬guration
                      conļ¬guration
Application tier


       Code           Conļ¬guration



                                         Service tier
                       Integration
 Operating system
                         settings

                       Services +
Launch conļ¬guration
                      conļ¬guration
Application tier


        Code                    Conļ¬guration



                                                        Service tier
                                  Integration
 Operating system
                                    settings

                                 Services +
Launch conļ¬guration
                                conļ¬guration


                                                  Infrastructure tier
   AMIs          Architecture          Multi-AZ


Scaling rules   Security groups      Middleware
Value baked into
    each tier
Value in
application
Value in
service tier
Optimisation        Conļ¬guration



     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
Deļ¬ne a full
infrastructure
     stack
Auto-scaling
                                      RDS
  EC2        SNS
                           SimpleDB
                                       SQS

         Resources
Elastic Beanstalk             CloudWatch
               Security groups         Tags
Template   CloudFormation


                            Provisioned
                             resources
Complete
deļ¬nition
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 speciļ¬cation
  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




Conļ¬guration
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




Deļ¬ne manifests
     Conļ¬guration
                      Applications
AMI




              SNAPSHOT




Template   CloudFormation
AMI          m1.large
                              AMI




              SNAPSHOT      SNAPSHOT
                              100Gb




Template   CloudFormation
Services
                AMI          m1.large
                              AMI       Dependencies
                                        Applications
                                        Conļ¬gration
              SNAPSHOT      SNAPSHOT
                              100Gb




Template   CloudFormation
1. Setup users and groups
2. Install Apache
3. Conļ¬gure 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
conļ¬guration
Codiļ¬ed 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
conļ¬gurations




                       DatabaseConnections



                       DatabaseConnections




       Scaling group             Triggers
                         (Alarms + Policies)
Additional
performance
Launch
conļ¬gurations




                       DatabaseConnections



                       DatabaseConnections




       Scaling group             Triggers
                         (Alarms + Policies)
Launch
conļ¬gurations




                       DatabaseConnections



                       DatabaseConnections




       Scaling group             Triggers
                         (Alarms + Policies)
Launch
conļ¬gurations




                       DatabaseConnections



                       DatabaseConnections




       Scaling group             Triggers
                         (Alarms + Policies)
Launch
conļ¬gurations




                       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
Deļ¬ne 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
codiļ¬es knowledge
Three pillars of
 orchestration
Provisioning
orchestration
Conļ¬guration
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

CloudFormation Best Practices
CloudFormation Best PracticesCloudFormation Best Practices
CloudFormation Best PracticesAmazon Web Services
Ā 
AWS CloudFormation Masterclass
AWS CloudFormation MasterclassAWS CloudFormation Masterclass
AWS CloudFormation MasterclassAmazon Web Services
Ā 
Deep Dive on MySQL Databases on Amazon RDS (DAT322) - AWS re:Invent 2018
Deep Dive on MySQL Databases on Amazon RDS (DAT322) - AWS re:Invent 2018Deep Dive on MySQL Databases on Amazon RDS (DAT322) - AWS re:Invent 2018
Deep Dive on MySQL Databases on Amazon RDS (DAT322) - AWS re:Invent 2018Amazon Web Services
Ā 
Introduction to AWS Security
Introduction to AWS SecurityIntroduction to AWS Security
Introduction to AWS SecurityAmazon Web Services
Ā 
Amazon SageMaker ėŖØėø ė¹Œė”© ķŒŒģ“ķ”„ė¼ģø ģ†Œź°œ::ģ“ģœ ė™, AI/ML ģŠ¤ķŽ˜ģ…œė¦¬ģŠ¤ķŠø ģ†”ė£Øģ…˜ģ¦ˆ ģ•„ķ‚¤ķ…ķŠø, AWS::AWS AIML ģŠ¤...
Amazon SageMaker ėŖØėø ė¹Œė”© ķŒŒģ“ķ”„ė¼ģø ģ†Œź°œ::ģ“ģœ ė™, AI/ML ģŠ¤ķŽ˜ģ…œė¦¬ģŠ¤ķŠø ģ†”ė£Øģ…˜ģ¦ˆ ģ•„ķ‚¤ķ…ķŠø, AWS::AWS AIML ģŠ¤...Amazon SageMaker ėŖØėø ė¹Œė”© ķŒŒģ“ķ”„ė¼ģø ģ†Œź°œ::ģ“ģœ ė™, AI/ML ģŠ¤ķŽ˜ģ…œė¦¬ģŠ¤ķŠø ģ†”ė£Øģ…˜ģ¦ˆ ģ•„ķ‚¤ķ…ķŠø, AWS::AWS AIML ģŠ¤...
Amazon SageMaker ėŖØėø ė¹Œė”© ķŒŒģ“ķ”„ė¼ģø ģ†Œź°œ::ģ“ģœ ė™, AI/ML ģŠ¤ķŽ˜ģ…œė¦¬ģŠ¤ķŠø ģ†”ė£Øģ…˜ģ¦ˆ ģ•„ķ‚¤ķ…ķŠø, AWS::AWS AIML ģŠ¤...Amazon Web Services Korea
Ā 
Encryption and Key Management in AWS
Encryption and Key Management in AWSEncryption and Key Management in AWS
Encryption and Key Management in AWSAmazon Web Services
Ā 
Deep dive ECS & Fargate Deep Dive
Deep dive ECS & Fargate Deep DiveDeep dive ECS & Fargate Deep Dive
Deep dive ECS & Fargate Deep DiveAmazon Web Services
Ā 
Threat detection on AWS: An introduction to Amazon GuardDuty - FND216 - AWS r...
Threat detection on AWS: An introduction to Amazon GuardDuty - FND216 - AWS r...Threat detection on AWS: An introduction to Amazon GuardDuty - FND216 - AWS r...
Threat detection on AWS: An introduction to Amazon GuardDuty - FND216 - AWS r...Amazon Web Services
Ā 
Introduction to Amazon Athena
Introduction to Amazon AthenaIntroduction to Amazon Athena
Introduction to Amazon AthenaAmazon Web Services
Ā 
Improving Infrastructure Governance on AWS - AWS June 2016 Webinar Series
Improving Infrastructure Governance on AWS - AWS June 2016 Webinar SeriesImproving Infrastructure Governance on AWS - AWS June 2016 Webinar Series
Improving Infrastructure Governance on AWS - AWS June 2016 Webinar SeriesAmazon Web Services
Ā 
How to Move to Amazon WorkSpaces and Replace Your Legacy VDI (BAP305) - AWS r...
How to Move to Amazon WorkSpaces and Replace Your Legacy VDI (BAP305) - AWS r...How to Move to Amazon WorkSpaces and Replace Your Legacy VDI (BAP305) - AWS r...
How to Move to Amazon WorkSpaces and Replace Your Legacy VDI (BAP305) - AWS r...Amazon Web Services
Ā 
AWS Lake Formation Deep Dive
AWS Lake Formation Deep DiveAWS Lake Formation Deep Dive
AWS Lake Formation Deep DiveCobus Bernard
Ā 
Building a Modern Data Architecture on AWS - Webinar
Building a Modern Data Architecture on AWS - WebinarBuilding a Modern Data Architecture on AWS - Webinar
Building a Modern Data Architecture on AWS - WebinarAmazon Web Services
Ā 
(DVO315) Log, Monitor and Analyze your IT with Amazon CloudWatch
(DVO315) Log, Monitor and Analyze your IT with Amazon CloudWatch(DVO315) Log, Monitor and Analyze your IT with Amazon CloudWatch
(DVO315) Log, Monitor and Analyze your IT with Amazon CloudWatchAmazon Web Services
Ā 
Architecting security and governance across your AWS environment
Architecting security and governance across your AWS environmentArchitecting security and governance across your AWS environment
Architecting security and governance across your AWS environmentAmazon Web Services
Ā 
Boot camp - Migration to AWS
Boot camp - Migration to AWSBoot camp - Migration to AWS
Boot camp - Migration to AWSAmazon Web Services
Ā 
VMware Cloud on AWS -- A Technical Deep Dive PPT
VMware Cloud on AWS -- A Technical Deep Dive PPTVMware Cloud on AWS -- A Technical Deep Dive PPT
VMware Cloud on AWS -- A Technical Deep Dive PPTAmazon Web Services
Ā 
Introduction to Amazon Athena
Introduction to Amazon AthenaIntroduction to Amazon Athena
Introduction to Amazon AthenaAmazon Web Services
Ā 

What's hot (20)

CloudFormation Best Practices
CloudFormation Best PracticesCloudFormation Best Practices
CloudFormation Best Practices
Ā 
AWS CloudFormation Masterclass
AWS CloudFormation MasterclassAWS CloudFormation Masterclass
AWS CloudFormation Masterclass
Ā 
Deep Dive on MySQL Databases on Amazon RDS (DAT322) - AWS re:Invent 2018
Deep Dive on MySQL Databases on Amazon RDS (DAT322) - AWS re:Invent 2018Deep Dive on MySQL Databases on Amazon RDS (DAT322) - AWS re:Invent 2018
Deep Dive on MySQL Databases on Amazon RDS (DAT322) - AWS re:Invent 2018
Ā 
Introduction to AWS Security
Introduction to AWS SecurityIntroduction to AWS Security
Introduction to AWS Security
Ā 
Amazon SageMaker ėŖØėø ė¹Œė”© ķŒŒģ“ķ”„ė¼ģø ģ†Œź°œ::ģ“ģœ ė™, AI/ML ģŠ¤ķŽ˜ģ…œė¦¬ģŠ¤ķŠø ģ†”ė£Øģ…˜ģ¦ˆ ģ•„ķ‚¤ķ…ķŠø, AWS::AWS AIML ģŠ¤...
Amazon SageMaker ėŖØėø ė¹Œė”© ķŒŒģ“ķ”„ė¼ģø ģ†Œź°œ::ģ“ģœ ė™, AI/ML ģŠ¤ķŽ˜ģ…œė¦¬ģŠ¤ķŠø ģ†”ė£Øģ…˜ģ¦ˆ ģ•„ķ‚¤ķ…ķŠø, AWS::AWS AIML ģŠ¤...Amazon SageMaker ėŖØėø ė¹Œė”© ķŒŒģ“ķ”„ė¼ģø ģ†Œź°œ::ģ“ģœ ė™, AI/ML ģŠ¤ķŽ˜ģ…œė¦¬ģŠ¤ķŠø ģ†”ė£Øģ…˜ģ¦ˆ ģ•„ķ‚¤ķ…ķŠø, AWS::AWS AIML ģŠ¤...
Amazon SageMaker ėŖØėø ė¹Œė”© ķŒŒģ“ķ”„ė¼ģø ģ†Œź°œ::ģ“ģœ ė™, AI/ML ģŠ¤ķŽ˜ģ…œė¦¬ģŠ¤ķŠø ģ†”ė£Øģ…˜ģ¦ˆ ģ•„ķ‚¤ķ…ķŠø, AWS::AWS AIML ģŠ¤...
Ā 
Encryption and Key Management in AWS
Encryption and Key Management in AWSEncryption and Key Management in AWS
Encryption and Key Management in AWS
Ā 
Deep dive ECS & Fargate Deep Dive
Deep dive ECS & Fargate Deep DiveDeep dive ECS & Fargate Deep Dive
Deep dive ECS & Fargate Deep Dive
Ā 
Threat detection on AWS: An introduction to Amazon GuardDuty - FND216 - AWS r...
Threat detection on AWS: An introduction to Amazon GuardDuty - FND216 - AWS r...Threat detection on AWS: An introduction to Amazon GuardDuty - FND216 - AWS r...
Threat detection on AWS: An introduction to Amazon GuardDuty - FND216 - AWS r...
Ā 
Introduction to Amazon Athena
Introduction to Amazon AthenaIntroduction to Amazon Athena
Introduction to Amazon Athena
Ā 
Improving Infrastructure Governance on AWS - AWS June 2016 Webinar Series
Improving Infrastructure Governance on AWS - AWS June 2016 Webinar SeriesImproving Infrastructure Governance on AWS - AWS June 2016 Webinar Series
Improving Infrastructure Governance on AWS - AWS June 2016 Webinar Series
Ā 
How to Move to Amazon WorkSpaces and Replace Your Legacy VDI (BAP305) - AWS r...
How to Move to Amazon WorkSpaces and Replace Your Legacy VDI (BAP305) - AWS r...How to Move to Amazon WorkSpaces and Replace Your Legacy VDI (BAP305) - AWS r...
How to Move to Amazon WorkSpaces and Replace Your Legacy VDI (BAP305) - AWS r...
Ā 
AWS Lake Formation Deep Dive
AWS Lake Formation Deep DiveAWS Lake Formation Deep Dive
AWS Lake Formation Deep Dive
Ā 
Building a Modern Data Architecture on AWS - Webinar
Building a Modern Data Architecture on AWS - WebinarBuilding a Modern Data Architecture on AWS - Webinar
Building a Modern Data Architecture on AWS - Webinar
Ā 
Aws VPC
Aws VPCAws VPC
Aws VPC
Ā 
(DVO315) Log, Monitor and Analyze your IT with Amazon CloudWatch
(DVO315) Log, Monitor and Analyze your IT with Amazon CloudWatch(DVO315) Log, Monitor and Analyze your IT with Amazon CloudWatch
(DVO315) Log, Monitor and Analyze your IT with Amazon CloudWatch
Ā 
Architecting security and governance across your AWS environment
Architecting security and governance across your AWS environmentArchitecting security and governance across your AWS environment
Architecting security and governance across your AWS environment
Ā 
Amazon CloudFront 101
Amazon CloudFront 101Amazon CloudFront 101
Amazon CloudFront 101
Ā 
Boot camp - Migration to AWS
Boot camp - Migration to AWSBoot camp - Migration to AWS
Boot camp - Migration to AWS
Ā 
VMware Cloud on AWS -- A Technical Deep Dive PPT
VMware Cloud on AWS -- A Technical Deep Dive PPTVMware Cloud on AWS -- A Technical Deep Dive PPT
VMware Cloud on AWS -- A Technical Deep Dive PPT
Ā 
Introduction to Amazon Athena
Introduction to Amazon AthenaIntroduction to Amazon Athena
Introduction to Amazon Athena
Ā 

Similar to Orchestrating the Cloud

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 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 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 (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 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
Ā 
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 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

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
Ā 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
Ā 
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
Ā 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
Ā 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
Ā 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
Ā 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
Ā 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
Ā 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
Ā 
šŸ¬ The future of MySQL is Postgres šŸ˜
šŸ¬  The future of MySQL is Postgres   šŸ˜šŸ¬  The future of MySQL is Postgres   šŸ˜
šŸ¬ The future of MySQL is Postgres šŸ˜RTylerCroy
Ā 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
Ā 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
Ā 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
Ā 
[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
Ā 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
Ā 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
Ā 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
Ā 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
Ā 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
Ā 
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
Ā 

Recently uploaded (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
Ā 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
Ā 
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
Ā 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Ā 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
Ā 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
Ā 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
Ā 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
Ā 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
Ā 
šŸ¬ The future of MySQL is Postgres šŸ˜
šŸ¬  The future of MySQL is Postgres   šŸ˜šŸ¬  The future of MySQL is Postgres   šŸ˜
šŸ¬ The future of MySQL is Postgres šŸ˜
Ā 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
Ā 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
Ā 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
Ā 
[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
Ā 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
Ā 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Ā 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
Ā 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
Ā 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI 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 texts
Ā 

Orchestrating the Cloud

  • 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 Conļ¬guration
  • 8. Application tier Code Conļ¬guration
  • 9. Application tier Code Conļ¬guration Service tier Integration Operating system settings Services + Launch conļ¬guration conļ¬guration
  • 10. Application tier Code Conļ¬guration Service tier Integration Operating system settings Services + Launch conļ¬guration conļ¬guration
  • 11. Application tier Code Conļ¬guration Service tier Integration Operating system settings Services + Launch conļ¬guration conļ¬guration Infrastructure tier AMIs Architecture Multi-AZ Scaling rules Security groups Middleware
  • 12. Value baked into each tier
  • 15. Optimisation Conļ¬guration 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 Conļ¬guration 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 Deļ¬ne manifests Conļ¬guration Applications
  • 82. AMI SNAPSHOT Template CloudFormation
  • 83. AMI m1.large AMI SNAPSHOT SNAPSHOT 100Gb Template CloudFormation
  • 84. Services AMI m1.large AMI Dependencies Applications Conļ¬gration SNAPSHOT SNAPSHOT 100Gb Template CloudFormation
  • 85. 1. Setup users and groups 2. Install Apache 3. Conļ¬gure 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 conļ¬gurations DatabaseConnections DatabaseConnections Scaling group Triggers (Alarms + Policies)
  • 111. Launch conļ¬gurations DatabaseConnections DatabaseConnections Scaling group Triggers (Alarms + Policies)
  • 112. Launch conļ¬gurations DatabaseConnections DatabaseConnections Scaling group Triggers (Alarms + Policies)
  • 113. Launch conļ¬gurations DatabaseConnections DatabaseConnections Scaling group Triggers (Alarms + Policies)
  • 114. Launch conļ¬gurations 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. Deļ¬ne 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