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 솔루션즈 아키텍트 :: AWS re:Invent re:Cap 2021
네트워크 및 엣지 컴퓨팅 분야 신규 서비스 - 최우형, AWS 솔루션즈 아키텍트 :: AWS re:Invent re:Cap 2021네트워크 및 엣지 컴퓨팅 분야 신규 서비스 - 최우형, AWS 솔루션즈 아키텍트 :: AWS re:Invent re:Cap 2021
네트워크 및 엣지 컴퓨팅 분야 신규 서비스 - 최우형, AWS 솔루션즈 아키텍트 :: AWS re:Invent re:Cap 2021Amazon Web Services Korea
 
AWS Multi-Account Architecture and Best Practices
AWS Multi-Account Architecture and Best PracticesAWS Multi-Account Architecture and Best Practices
AWS Multi-Account Architecture and Best PracticesAmazon Web Services
 
Getting Started with AWS Compute Services
Getting Started with AWS Compute ServicesGetting Started with AWS Compute Services
Getting Started with AWS Compute ServicesAmazon Web Services
 
Introduction to the Well-Architected Framework and Tool - SVC208 - Anaheim AW...
Introduction to the Well-Architected Framework and Tool - SVC208 - Anaheim AW...Introduction to the Well-Architected Framework and Tool - SVC208 - Anaheim AW...
Introduction to the Well-Architected Framework and Tool - SVC208 - Anaheim AW...Amazon Web Services
 
Introducing AWS Elastic Beanstalk
Introducing AWS Elastic BeanstalkIntroducing AWS Elastic Beanstalk
Introducing AWS Elastic BeanstalkAmazon Web Services
 
Introduction to AWS VPC, Guidelines, and Best Practices
Introduction to AWS VPC, Guidelines, and Best PracticesIntroduction to AWS VPC, Guidelines, and Best Practices
Introduction to AWS VPC, Guidelines, and Best PracticesGary Silverman
 
보안 사고 예방을 위한 주요 AWS 모범 사례 – 신은수, AWS 보안 담당 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집
보안 사고 예방을 위한 주요 AWS 모범 사례 – 신은수, AWS 보안 담당 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집보안 사고 예방을 위한 주요 AWS 모범 사례 – 신은수, AWS 보안 담당 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집
보안 사고 예방을 위한 주요 AWS 모범 사례 – 신은수, AWS 보안 담당 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집Amazon Web Services Korea
 
천만 사용자를 위한 AWS 아키텍처 보안 모범 사례 (윤석찬, 테크에반젤리스트)
천만 사용자를 위한 AWS 아키텍처 보안 모범 사례 (윤석찬, 테크에반젤리스트)천만 사용자를 위한 AWS 아키텍처 보안 모범 사례 (윤석찬, 테크에반젤리스트)
천만 사용자를 위한 AWS 아키텍처 보안 모범 사례 (윤석찬, 테크에반젤리스트)Amazon Web Services Korea
 
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017Amazon Web Services
 
(DVO401) Deep Dive into Blue/Green Deployments on AWS
(DVO401) Deep Dive into Blue/Green Deployments on AWS(DVO401) Deep Dive into Blue/Green Deployments on AWS
(DVO401) Deep Dive into Blue/Green Deployments on AWSAmazon Web Services
 

What's hot (20)

Amazon S3 Masterclass
Amazon S3 MasterclassAmazon S3 Masterclass
Amazon S3 Masterclass
 
AWS Cloud Security Fundamentals
AWS Cloud Security FundamentalsAWS Cloud Security Fundamentals
AWS Cloud Security Fundamentals
 
네트워크 및 엣지 컴퓨팅 분야 신규 서비스 - 최우형, AWS 솔루션즈 아키텍트 :: AWS re:Invent re:Cap 2021
네트워크 및 엣지 컴퓨팅 분야 신규 서비스 - 최우형, AWS 솔루션즈 아키텍트 :: AWS re:Invent re:Cap 2021네트워크 및 엣지 컴퓨팅 분야 신규 서비스 - 최우형, AWS 솔루션즈 아키텍트 :: AWS re:Invent re:Cap 2021
네트워크 및 엣지 컴퓨팅 분야 신규 서비스 - 최우형, AWS 솔루션즈 아키텍트 :: AWS re:Invent re:Cap 2021
 
AWS Multi-Account Architecture and Best Practices
AWS Multi-Account Architecture and Best PracticesAWS Multi-Account Architecture and Best Practices
AWS Multi-Account Architecture and Best Practices
 
AWS Secrets Manager
AWS Secrets ManagerAWS Secrets Manager
AWS Secrets Manager
 
AWS Introduction
AWS IntroductionAWS Introduction
AWS Introduction
 
Redshift overview
Redshift overviewRedshift overview
Redshift overview
 
Intro to Amazon ECS
Intro to Amazon ECSIntro to Amazon ECS
Intro to Amazon ECS
 
Security Architectures on AWS
Security Architectures on AWSSecurity Architectures on AWS
Security Architectures on AWS
 
Getting Started with AWS Compute Services
Getting Started with AWS Compute ServicesGetting Started with AWS Compute Services
Getting Started with AWS Compute Services
 
Introduction to the Well-Architected Framework and Tool - SVC208 - Anaheim AW...
Introduction to the Well-Architected Framework and Tool - SVC208 - Anaheim AW...Introduction to the Well-Architected Framework and Tool - SVC208 - Anaheim AW...
Introduction to the Well-Architected Framework and Tool - SVC208 - Anaheim AW...
 
DevOps on AWS
DevOps on AWSDevOps on AWS
DevOps on AWS
 
Introducing AWS Elastic Beanstalk
Introducing AWS Elastic BeanstalkIntroducing AWS Elastic Beanstalk
Introducing AWS Elastic Beanstalk
 
Introduction to AWS VPC, Guidelines, and Best Practices
Introduction to AWS VPC, Guidelines, and Best PracticesIntroduction to AWS VPC, Guidelines, and Best Practices
Introduction to AWS VPC, Guidelines, and Best Practices
 
Introduction to AWS Security
Introduction to AWS SecurityIntroduction to AWS Security
Introduction to AWS Security
 
보안 사고 예방을 위한 주요 AWS 모범 사례 – 신은수, AWS 보안 담당 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집
보안 사고 예방을 위한 주요 AWS 모범 사례 – 신은수, AWS 보안 담당 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집보안 사고 예방을 위한 주요 AWS 모범 사례 – 신은수, AWS 보안 담당 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집
보안 사고 예방을 위한 주요 AWS 모범 사례 – 신은수, AWS 보안 담당 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집
 
천만 사용자를 위한 AWS 아키텍처 보안 모범 사례 (윤석찬, 테크에반젤리스트)
천만 사용자를 위한 AWS 아키텍처 보안 모범 사례 (윤석찬, 테크에반젤리스트)천만 사용자를 위한 AWS 아키텍처 보안 모범 사례 (윤석찬, 테크에반젤리스트)
천만 사용자를 위한 AWS 아키텍처 보안 모범 사례 (윤석찬, 테크에반젤리스트)
 
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017
 
AWS CloudFormation Masterclass
AWS CloudFormation MasterclassAWS CloudFormation Masterclass
AWS CloudFormation Masterclass
 
(DVO401) Deep Dive into Blue/Green Deployments on AWS
(DVO401) Deep Dive into Blue/Green Deployments on AWS(DVO401) Deep Dive into Blue/Green Deployments on AWS
(DVO401) Deep Dive into Blue/Green Deployments on AWS
 

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

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
🐬 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
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024SynarionITSolutions
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
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
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
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
 

Recently uploaded (20)

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
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
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
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
 

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