Después de crear y probar la plantilla básica de Cloud Assembly para la aplicación de ejemplo, expándala en una aplicación de varios niveles que se pueda implementar para desarrollo, pruebas y, finalmente, producción.

Para expandir la plantilla de nube, debe agregar las siguientes mejoras.

  • Una opción para agrupar en clústeres servidores de aplicaciones para aumentar la capacidad
  • Una red pública y un equilibrador de carga delante de los servidores de aplicaciones
  • Un servidor de copia de seguridad con almacenamiento de archivos

Requisitos previos

Cree la plantilla de nube básica y pruébela. Consulte Crear una plantilla de nube básica y Probar una plantilla de nube básica.

Procedimiento

  1. Haga clic en Plantillas de nube y abra la plantilla de nube WordPress-BP.
    La plantilla básica aparece en el lienzo de diseño y en el editor de código.
  2. Agregue componentes y realice cambios tomando el ejemplo de código y la figura como referencia.
    La GUI se utiliza para arrastrar nuevos recursos al lienzo (como el equilibrador de carga) y, a continuación, finalizar la configuración en el editor de código.
    1. Agregue una solicitud de entrada de count para convertir el servidor de aplicaciones de WordPress en un clúster.
    2. Agregue un equilibrador de carga independiente de la nube.
    3. Conecte el equilibrador de carga al clúster del servidor de aplicaciones de WordPress.
    4. Agregue una máquina de copia de seguridad independiente de la nube.
    5. Conecte la máquina de copia de seguridad a la red privada/interna.
    6. Agregue una red pública/externa independiente de la nube.
    7. Conecte el equilibrador de carga a la red pública.
    8. Agregue un volumen de almacenamiento independiente de la nube para usarlo como disco de archivo.
    9. Conecte el disco de archivo a la máquina de copia de seguridad.
    10. Agregue una solicitud de entrada para la velocidad del disco de almacenamiento.
  3. Implemente, pruebe y realice cambios de la misma manera que para la plantilla de nube básica.
    Puede actualizar las implementaciones existentes o incluso implementar nuevas instancias para poder comparar implementaciones.

    El objetivo es conseguir una plantilla fiable y reproducible que pueda utilizarse para implementaciones de producción.

    Todos los recursos

    Separador

Ejemplo: Ejemplo de código de plantilla de nube expandida completada

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

Qué hacer a continuación

Defina su propia infraestructura y cree sus propias plantillas de nube.

Consulte Crear la infraestructura de recursos de Cloud Assembly y Diseñar las implementaciones de Cloud Assembly.