Nachdem Sie die einfache Cloud Assembly-Vorlage für die Beispielanwendung erstellt und getestet haben, erweitern Sie sie in eine mehrschichtige Anwendung, die für die Entwicklung, den Test und schließlich die Produktion bereitgestellt werden kann.

Um die Cloud-Vorlage zu erweitern, fügen Sie die folgenden Verbesserungen hinzu.

  • Eine Option zum Clustern von Anwendungsservern für eine größere Kapazität
  • Ein öffentliches Netzwerk und ein Lastausgleichsdienst vor den Anwendungsservern
  • Ein Sicherungsserver mit Archivspeicher

Voraussetzungen

Erstellen Sie die einfache Cloud-Vorlage und testen Sie sie. Weitere Informationen finden Sie unter Erstellen einer einfachen Cloud-Vorlage und Testen einer einfachen Cloud-Vorlage.

Prozedur

  1. Klicken Sie auf Cloud-Vorlagen und öffnen Sie die WordPress-BP-Cloud-Vorlage.
    Die einfache Vorlage wird in der Design-Arbeitsfläche und im Code-Editor angezeigt.
  2. Nehmen Sie Ergänzungen und Änderungen vor, indem Sie das Codebeispiel und die Abbildung für die Anleitung verwenden.
    Sie verwenden die Benutzeroberfläche, um neue Ressourcen auf die Arbeitsfläche (zum Beispiel den Lastausgleichsdienst) zu ziehen, und schließen dann die Konfiguration im Code-Editor ab.
    1. Fügen Sie eine Eingabeaufforderung vom Typ count hinzu, um den WordPress-Anwendungsserver in einen Cluster umzuwandeln.
    2. Fügen Sie einen Cloud-unabhängigen Lastausgleichsdienst hinzu.
    3. Verbinden Sie den Lastausgleichsdienst mit dem Cluster des WordPress-Anwendungsservers.
    4. Fügen Sie eine Cloud-unabhängige Sicherungsmaschine hinzu.
    5. Verbinden Sie die Sicherungsmaschine mit dem privaten/internen Netzwerk.
    6. Fügen Sie ein Cloud-unabhängiges öffentliches/externes Netzwerk hinzu.
    7. Verbinden Sie den Lastausgleichsdienst mit dem öffentlichen Netzwerk.
    8. Fügen Sie einen Cloud-unabhängigen Speicherdatenträger zwecks Verwendung als Archivierungsdatenträger hinzu.
    9. Verbinden Sie die Archivfestplatte mit der Sicherungsmaschine.
    10. Fügen Sie eine Eingabeaufforderung für die Archivfestplattengeschwindigkeit hinzu.
  3. Führen Sie die Bereitstellung, die Tests und Änderungen auf dieselbe Weise wie bei der einfachen Cloud-Vorlage durch.
    Sie können vorhandene Bereitstellungen aktualisieren oder sogar neue Instanzen bereitstellen, damit Sie Bereitstellungen vergleichen können.

    Ziel ist es, eine solide, wiederholbare Vorlage zu erhalten, die für Produktionsbereitstellungen verwendet werden kann.

    Alle Ressourcen

    Marker

Beispiel: Abgeschlossenes Codebeispiel für erweiterte Cloud-Vorlagen

formatVersion: 1
inputs: 
  env:
    type: string
    enum:
      - env:dev
      - env:prod
      - env:test
    default: env:dev
    title: Environment
    description: Target Environment
  size:
    type: string
    enum:
      - small
      - medium
      - large
    description: Size of Nodes
    title: Tier Machine Size
  username:
    type: string
    minLength: 4
    maxLength: 20
    pattern: '[a-z]+'
    title: Database Username
    description: Database Username
  userpassword:
    type: string
    pattern: '[a-z0-9A-Z@#$]+'
    encrypted: true
    title: Database Password
    description: Database Password
  count:
    type: integer
    default: 2
    maximum: 5
    minimum: 2
    title: WordPress Cluster Size
    description: WordPress Cluster Size (Number of Nodes)
  storagetype:
    type: string
    enum:
      - storage:general
      - storage:fast
    description: Archive Storage Disk Type
    title: Archive Disk Type
resources:
  WebTier:
    type: Cloud.Machine
    properties:
      name: wordpress
      image: ubuntu
      flavor: '${input.size}'
      count: '${input.count}'
      constraints:
        - tag: '${input.env}'
      networks:
        - network: '${resource["WP-Network-Private"].id}'
          assignPublicIpAddress: true
      cloudConfig: |
        #cloud-config
        repo_update: true
        repo_upgrade: all
        packages:
         - apache2
         - php
         - php-mysql
         - libapache2-mod-php
         - php-mcrypt
         - mysql-client
        runcmd:
         - mkdir -p /var/www/html/mywordpresssite && cd /var/www/html && wget https://wordpress.org/latest.tar.gz && tar -xzf /var/www/html/latest.tar.gz -C /var/www/html/mywordpresssite --strip-components 1
         - i=0; while [ $i -le 10 ]; do mysql --connect-timeout=3 -h ${DBTier.networks[0].address} -u root -pmysqlpassword -e "SHOW STATUS;" && break || sleep 15; i=$((i+1)); done
         - mysql -u root -pmysqlpassword -h ${DBTier.networks[0].address} -e "create database wordpress_blog;"
         - mv /var/www/html/mywordpresssite/wp-config-sample.php /var/www/html/mywordpresssite/wp-config.php
         - sed -i -e s/"define( 'DB_NAME', 'database_name_here' );"/"define( 'DB_NAME', 'wordpress_blog' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_USER', 'username_here' );"/"define( 'DB_USER', 'root' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_PASSWORD', 'password_here' );"/"define( 'DB_PASSWORD', 'mysqlpassword' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_HOST', 'localhost' );"/"define( 'DB_HOST', '${DBTier.networks[0].address}' );"/ /var/www/html/mywordpresssite/wp-config.php
         - service apache2 reload
  DBTier:
    type: Cloud.Machine
    properties:
      name: mysql
      image: ubuntu
      flavor: '${input.size}'
      constraints:
        - tag: '${input.env}'
      networks:
        - network: '${resource["WP-Network-Private"].id}'
          assignPublicIpAddress: true
      remoteAccess:
        authentication: usernamePassword
        username: '${input.username}'
        password: '${input.userpassword}'
      cloudConfig: |
        #cloud-config
        repo_update: true
        repo_upgrade: all
        packages:
         - mysql-server
        runcmd:
         - sed -e '/bind-address/ s/^#*/#/' -i /etc/mysql/mysql.conf.d/mysqld.cnf
         - service mysql restart
         - mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mysqlpassword';"
         - mysql -e "FLUSH PRIVILEGES;"
      attachedDisks: []
  LoadBalancer:
    type: Cloud.LoadBalancer
    properties:
      name: myapp-lb
      network: '${resource["WP-Network-Public"].id}'
      instances:
        - '${WebTier.id}'
      routes:
        - protocol: HTTP
          port: '80'
          instanceProtocol: HTTP
          instancePort: '80'
          healthCheckConfiguration:
            protocol: HTTP
            port: '80'
            urlPath: /mywordpresssite/wp-admin/install.php
            intervalSeconds: 6
            timeoutSeconds: 5
            unhealthyThreshold: 2
            healthyThreshold: 2
      internetFacing: true
  WP-Network-Private:
    type: Cloud.Network
    properties:
      name: WP-Network-Private
      networkType: existing
  WP-Network-Public:
    type: Cloud.Network
    properties:
      name: WP-Network-Public
      networkType: public
  backup:
    type: Cloud.Machine
    properties:
      name: backup
      flavor: '${input.size}'
      image: ubuntu
      networks:
        - network: '${resource["WP-Network-Private"].id}'
      attachedDisks:
        - source: '${resource.ArchiveDisk.id}'
  ArchiveDisk:
    type: Cloud.Volume
    properties:
      name: ArchiveDisk
      capacityGb: 5
      constraints:
        - tag: '${input.storagetype}'

Nächste Maßnahme

Definieren Sie Ihre eigene Infrastruktur und erstellen Sie Ihre eigenen Cloud-Vorlagen.

Weitere Informationen finden Sie unter Erstellen der Cloud Assembly-Ressourceninfrastruktur und Entwerfen Ihrer Cloud Assembly-Bereitstellungen.