In diesem Automation Assembler-Designbeispiel beginnen Sie mit einer Cloud-Vorlage, die nur ein Minimum an WordPress-Ressourcen enthält, zum Beispiel nur einen Anwendungsserver.
Automation Assembler ist ein „Infrastruktur-als-Code“-Tool. Sie können Ressourcen auf die Design-Arbeitsfläche ziehen, um den Vorgang zu starten. Anschließend vervollständigen Sie die Details mit dem Code-Editor rechts neben der Arbeitsfläche.
Mit dem Code-Editor können Sie Code direkt eingeben, ausschneiden und einfügen. Wenn Sie nicht gern Code bearbeiten, können Sie eine Ressource in der Arbeitsfläche auswählen, auf die Registerkarte Eigenschaften im Code-Editor klicken und die Werte dort eingeben. Die von Ihnen eingegebenen Werte werden im Code so angezeigt, als hätten Sie sie direkt eingegeben.
Prozedur
- Gehen Sie zu und klicken Sie auf .
- Benennen Sie die Cloud-Vorlage WordPress-BP.
- Wählen Sie das WordPress-Projekt aus und klicken Sie auf Erstellen.
- Ziehen Sie aus den Ressourcen links auf der Cloud-Vorlagen-Designseite zwei Cloud-unabhängige Maschinen auf die Arbeitsfläche.
Die Maschinen dienen als WordPress-Anwendungsserver (WebTier) und MySQL-Datenbankserver (DBTier).
- Bearbeiten Sie auf der rechten Seite den Maschinen-YAML-Code, um Namen, Images, Konfigurationen und Einschränkungs-Tags hinzuzufügen:
resources:
WebTier:
type: Cloud.Machine
properties:
name: wordpress
image: ubuntu
flavor: small
constraints:
- tag: env:dev
DBTier:
type: Cloud.Machine
properties:
name: mysql
image: ubuntu
flavor: small
constraints:
- tag: env:dev
- Ziehen Sie ein Cloud-unabhängiges Netzwerk auf die Arbeitsfläche und bearbeiten Sie den Code:
WP-Network-Private:
type: Cloud.Network
properties:
name: WP-Network-Private
networkType: existing
- Verbinden Sie die Maschinen mit dem Netzwerk:
Bewegen Sie auf der Arbeitsfläche den Mauszeiger über den Netzwerkblock, klicken Sie an der Stelle auf die Blase, wo die Linie den Block berührt, halten Sie den Mauszeiger gedrückt, ziehen Sie die Blase auf einen Maschinenblock und lassen Sie die Maustaste los.
Beachten Sie beim Erstellen der Verbindungslinien, dass Netzwerkcode automatisch zu den Maschinen im Editor hinzugefügt wird.
- Fügen Sie eine Benutzereingabeaufforderung hinzu.
An einigen Stellen wurde die Beispielinfrastruktur für mehrere Optionen eingerichtet. Beispiel:
- Cloud-Zonen-Umgebungen für Entwicklung, Tests und Produktion
- Konfigurationszuordnungen für kleine, mittlere und große Maschinen
Sie können eine bestimmte Option direkt in der Cloud-Vorlage festlegen. Ein besserer Ansatz ist jedoch, dass der Benutzer die Option zur Bereitstellungszeit der Cloud-Vorlage auswählen kann. Durch die Eingabeaufforderung für die Benutzereingabe können Sie eine Vorlage erstellen, die auf viele Arten bereitgestellt werden kann, anstatt mit vielen hartcodierten Vorlagen zu arbeiten.
- Erstellen Sie einen
inputs
-Abschnitt im Code, damit Benutzer die Maschinengröße und die Zielumgebung zur Bereitstellungszeit auswählen können. Definieren Sie die auswählbaren Werte:
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
- Fügen Sie im Abschnitt
resources
des Codes den Code ${input.input-name}
hinzu, um die Benutzerauswahl zu bestätigen:
resources:
WebTier:
type: Cloud.Machine
properties:
name: wordpress
image: ubuntu
flavor: '${input.size}'
constraints:
- tag: '${input.env}'
networks:
- network: '${resource["WP-Network-Private"].id}'
DBTier:
type: Cloud.Machine
properties:
name: mysql
image: ubuntu
flavor: '${input.size}'
constraints:
- tag: '${input.env}'
networks:
- network: '${resource["WP-Network-Private"].id}'
WP-Network-Private:
type: Cloud.Network
properties:
name: WP-Network-Private
networkType: existing
- Erweitern Sie schließlich den
WebTier
- und den DBTier
-Code anhand der folgenden Beispiele. Der WP-Network-Private
-Code benötigt keine zusätzlichen Änderungen.
Beachten Sie, dass Anmeldezugriff auf die Datenbank und cloudConfig-Initialisierungsskripts zur Bereitstellungszeit zu den Verbesserungen gehören.
Komponente |
Beispiel |
Zusätzliche DBTier-Eingaben |
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
|
DBTier-Ressource |
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: []
|
WebTier-Ressource |
WebTier:
type: Cloud.Machine
properties:
name: wordpress
image: ubuntu
flavor: '${input.size}'
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
|
Beispiel: Abgeschlossenes Codebeispiel für eine einfache Cloud-Vorlage
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
resources:
WebTier:
type: Cloud.Machine
properties:
name: wordpress
image: ubuntu
flavor: '${input.size}'
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: []
WP-Network-Private:
type: Cloud.Network
properties:
name: WP-Network-Private
networkType: existing
Nächste Maßnahme
Testen Sie die Cloud-Vorlage, indem Sie die Syntax überprüfen und die Vorlage bereitstellen.