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
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 - mysql-client - gcc - make - autoconf - libc-dev - pkg-config - libmcrypt-dev - php-pear - php-dev 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 - pecl channel-update pecl.php.net - pecl update-channels - pecl install mcrypt - 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 - sed -i '950i extension=mcrypt.so' /etc/php/7.4/apache2/php.ini - 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 "CREATE USER 'root'@'%' IDENTIFIED BY 'mysqlpassword';" - mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';" - 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.