SlideShare a Scribd company logo
1 of 169
Download to read offline
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
Orchestrating the Cloud
Orchestrating the Cloud
Orchestrating the Cloud
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 solution Architect Associate study material
AWS solution Architect Associate study materialAWS solution Architect Associate study material
AWS solution Architect Associate study materialNagesh Ramamoorthy
 
AWS CodeDeploy, AWS CodePipeline, and AWS CodeCommit: Transforming Software D...
AWS CodeDeploy, AWS CodePipeline, and AWS CodeCommit: Transforming Software D...AWS CodeDeploy, AWS CodePipeline, and AWS CodeCommit: Transforming Software D...
AWS CodeDeploy, AWS CodePipeline, and AWS CodeCommit: Transforming Software D...Amazon Web Services
 
Microsoft Azure Overview | Cloud Computing Tutorial with Azure | Azure Traini...
Microsoft Azure Overview | Cloud Computing Tutorial with Azure | Azure Traini...Microsoft Azure Overview | Cloud Computing Tutorial with Azure | Azure Traini...
Microsoft Azure Overview | Cloud Computing Tutorial with Azure | Azure Traini...Edureka!
 
Automate Best Practices and Operational Health for AWS Resources with AWS Tru...
Automate Best Practices and Operational Health for AWS Resources with AWS Tru...Automate Best Practices and Operational Health for AWS Resources with AWS Tru...
Automate Best Practices and Operational Health for AWS Resources with AWS Tru...Amazon Web Services
 
Deep Dive on Amazon Elastic Container Service (ECS) and Fargate
Deep Dive on Amazon Elastic Container Service (ECS) and FargateDeep Dive on Amazon Elastic Container Service (ECS) and Fargate
Deep Dive on Amazon Elastic Container Service (ECS) and FargateAmazon Web Services
 
AWS Presentation-1.ppt
AWS Presentation-1.pptAWS Presentation-1.ppt
AWS Presentation-1.pptusmanEhsan8
 
만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...
만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...
만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...Amazon Web Services Korea
 
Introducing AWS Firewall Manager - AWS Online Tech Talks
Introducing AWS Firewall Manager - AWS Online Tech TalksIntroducing AWS Firewall Manager - AWS Online Tech Talks
Introducing AWS Firewall Manager - AWS Online Tech TalksAmazon Web Services
 
Migrating Databases to the Cloud: Introduction to AWS DMS - SRV215 - Chicago ...
Migrating Databases to the Cloud: Introduction to AWS DMS - SRV215 - Chicago ...Migrating Databases to the Cloud: Introduction to AWS DMS - SRV215 - Chicago ...
Migrating Databases to the Cloud: Introduction to AWS DMS - SRV215 - Chicago ...Amazon Web Services
 
AWS Control Tower
AWS Control TowerAWS Control Tower
AWS Control TowerCloudHesive
 
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...Amazon 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
 
AWS Initiate Day Dublin 2019 – Cost Optimization on AWS
AWS Initiate Day Dublin 2019 – Cost Optimization on AWSAWS Initiate Day Dublin 2019 – Cost Optimization on AWS
AWS Initiate Day Dublin 2019 – Cost Optimization on AWSAmazon Web Services
 

What's hot (20)

AWS CloudFormation Masterclass
AWS CloudFormation MasterclassAWS CloudFormation Masterclass
AWS CloudFormation Masterclass
 
AWS CloudWatch
AWS CloudWatchAWS CloudWatch
AWS CloudWatch
 
AWS solution Architect Associate study material
AWS solution Architect Associate study materialAWS solution Architect Associate study material
AWS solution Architect Associate study material
 
AWS CodeDeploy, AWS CodePipeline, and AWS CodeCommit: Transforming Software D...
AWS CodeDeploy, AWS CodePipeline, and AWS CodeCommit: Transforming Software D...AWS CodeDeploy, AWS CodePipeline, and AWS CodeCommit: Transforming Software D...
AWS CodeDeploy, AWS CodePipeline, and AWS CodeCommit: Transforming Software D...
 
AWS Security Best Practices
AWS Security Best PracticesAWS Security Best Practices
AWS Security Best Practices
 
AWS Elastic Compute Cloud (EC2)
AWS Elastic Compute Cloud (EC2) AWS Elastic Compute Cloud (EC2)
AWS Elastic Compute Cloud (EC2)
 
Microsoft Azure Overview | Cloud Computing Tutorial with Azure | Azure Traini...
Microsoft Azure Overview | Cloud Computing Tutorial with Azure | Azure Traini...Microsoft Azure Overview | Cloud Computing Tutorial with Azure | Azure Traini...
Microsoft Azure Overview | Cloud Computing Tutorial with Azure | Azure Traini...
 
Automate Best Practices and Operational Health for AWS Resources with AWS Tru...
Automate Best Practices and Operational Health for AWS Resources with AWS Tru...Automate Best Practices and Operational Health for AWS Resources with AWS Tru...
Automate Best Practices and Operational Health for AWS Resources with AWS Tru...
 
Deep Dive on Amazon Elastic Container Service (ECS) and Fargate
Deep Dive on Amazon Elastic Container Service (ECS) and FargateDeep Dive on Amazon Elastic Container Service (ECS) and Fargate
Deep Dive on Amazon Elastic Container Service (ECS) and Fargate
 
AWS Presentation-1.ppt
AWS Presentation-1.pptAWS Presentation-1.ppt
AWS Presentation-1.ppt
 
만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...
만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...
만들자! 데이터 기반의 스마트 팩토리 - 문태양 AWS 솔루션즈 아키텍트 / 배권 팀장, OCI 정보통신 :: AWS Summit Seou...
 
Introducing AWS Firewall Manager - AWS Online Tech Talks
Introducing AWS Firewall Manager - AWS Online Tech TalksIntroducing AWS Firewall Manager - AWS Online Tech Talks
Introducing AWS Firewall Manager - AWS Online Tech Talks
 
Migrating Databases to the Cloud: Introduction to AWS DMS - SRV215 - Chicago ...
Migrating Databases to the Cloud: Introduction to AWS DMS - SRV215 - Chicago ...Migrating Databases to the Cloud: Introduction to AWS DMS - SRV215 - Chicago ...
Migrating Databases to the Cloud: Introduction to AWS DMS - SRV215 - Chicago ...
 
AWS Cloud Watch
AWS Cloud WatchAWS Cloud Watch
AWS Cloud Watch
 
AWS Control Tower
AWS Control TowerAWS Control Tower
AWS Control Tower
 
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...
 
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...
 
Azure fundamentals
Azure fundamentalsAzure fundamentals
Azure fundamentals
 
Machine Learning on AWS
Machine Learning on AWSMachine Learning on AWS
Machine Learning on AWS
 
AWS Initiate Day Dublin 2019 – Cost Optimization on AWS
AWS Initiate Day Dublin 2019 – Cost Optimization on AWSAWS Initiate Day Dublin 2019 – Cost Optimization on AWS
AWS Initiate Day Dublin 2019 – Cost Optimization 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
 
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
 
Come costruire un'architettura Serverless nel Cloud AWS
Come costruire un'architettura Serverless nel Cloud AWSCome costruire un'architettura Serverless nel Cloud AWS
Come costruire un'architettura Serverless nel Cloud AWSAmazon 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
 
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
 
Come costruire un'architettura Serverless nel Cloud AWS
Come costruire un'architettura Serverless nel Cloud AWSCome costruire un'architettura Serverless nel Cloud AWS
Come costruire un'architettura Serverless nel Cloud AWS
 

Recently uploaded

activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfJamie (Taka) Wang
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UbiTrack UK
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintMahmoud Rabie
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsSafe Software
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfinfogdgmi
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024D Cloud Solutions
 
99.99% of Your Traces Are (Probably) Trash (SRECon NA 2024).pdf
99.99% of Your Traces  Are (Probably) Trash (SRECon NA 2024).pdf99.99% of Your Traces  Are (Probably) Trash (SRECon NA 2024).pdf
99.99% of Your Traces Are (Probably) Trash (SRECon NA 2024).pdfPaige Cruz
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostMatt Ray
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesMd Hossain Ali
 
All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...
All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...
All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...Daniel Zivkovic
 
The Kubernetes Gateway API and its role in Cloud Native API Management
The Kubernetes Gateway API and its role in Cloud Native API ManagementThe Kubernetes Gateway API and its role in Cloud Native API Management
The Kubernetes Gateway API and its role in Cloud Native API ManagementNuwan Dias
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDELiveplex
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxMatsuo Lab
 
UiPath Studio Web workshop series - Day 5
UiPath Studio Web workshop series - Day 5UiPath Studio Web workshop series - Day 5
UiPath Studio Web workshop series - Day 5DianaGray10
 

Recently uploaded (20)

activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership Blueprint
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdf
 
201610817 - edge part1
201610817 - edge part1201610817 - edge part1
201610817 - edge part1
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024
 
99.99% of Your Traces Are (Probably) Trash (SRECon NA 2024).pdf
99.99% of Your Traces  Are (Probably) Trash (SRECon NA 2024).pdf99.99% of Your Traces  Are (Probably) Trash (SRECon NA 2024).pdf
99.99% of Your Traces Are (Probably) Trash (SRECon NA 2024).pdf
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
 
All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...
All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...
All in AI: LLM Landscape & RAG in 2024 with Mark Ryan (Google) & Jerry Liu (L...
 
The Kubernetes Gateway API and its role in Cloud Native API Management
The Kubernetes Gateway API and its role in Cloud Native API ManagementThe Kubernetes Gateway API and its role in Cloud Native API Management
The Kubernetes Gateway API and its role in Cloud Native API Management
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptx
 
UiPath Studio Web workshop series - Day 5
UiPath Studio Web workshop series - Day 5UiPath Studio Web workshop series - Day 5
UiPath Studio Web workshop series - Day 5
 

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" ]}]]} } }
  • 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