После создания и тестирования базового шаблона vRealize Automation Cloud Assembly примера приложения его можно расширить до многоуровневого приложения, которое может быть развернуто в среде разработки, тестирования и, наконец, в производственной среде.

Чтобы расширить облачный шаблон, добавьте следующие усовершенствования.

  • Возможность кластеризации серверов приложений для увеличения емкости
  • Общедоступная сеть и подсистема балансировки нагрузки перед серверами приложений
  • Сервер резервного копирования с хранилищем архива

Необходимые условия

Создайте базовый облачный шаблон и проверьте его. См. разделы Создание базового облачного шаблона и Тестирование базового облачного шаблона.

Процедура

  1. Щелкните Облачные шаблоны и откройте облачный шаблон WordPress-BP.
    На холсте проекта и в редакторе кода появляется базовый шаблон.
  2. Внесите дополнения и изменения, используя пример кода и рисунок.
    Для перетаскивания новых ресурсов на холст, например подсистемы балансировки нагрузки, можно использовать графический пользовательский интерфейс, а завершить настройку можно в редакторе кода.
    1. а. Добавьте запрос на ввод данных count, чтобы сделать сервер приложения WordPress в кластере.
    2. б. Добавьте независимую от облачной среды подсистему балансировки нагрузки.
    3. в. Подключите подсистему балансировки нагрузки к кластеру серверов приложений WordPress.
    4. г. Добавьте независимый от облачной среды компьютер резервного копирования.
    5. д. Подключите компьютер резервного копирования к частной или внутренней сети.
    6. е. Добавьте независимую от облачной среды общедоступную или внешнюю сеть.
    7. ё. Подключите подсистему балансировки нагрузки к общедоступной сети.
    8. ж. Добавьте том независимого от облачной среды хранилища, чтобы использовать его в качестве диска с архивом.
    9. з. Подключите диск с архивом к компьютеру резервного копирования.
    10. и. Добавьте запрос на ввод данных archiveusage по скорости работы диска хранилища.
    11. й. Добавьте запрос на ввод данных archiveDiskSize по емкости диска хранилища.
      Все ресурсы
  3. Выполните развертывание, тестирование и внесите изменения точно так же, как это было сделано для базового облачного шаблона.
    Можно обновить существующие развертывания или даже развернуть новые экземпляры, чтобы было можно сравнивать развертывания.

    Целью является достижение надежно функционирующего воспроизводимого шаблона, который можно использовать для производственных развертываний.

Пример: Пример кода расширенного облачного шаблона

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
  databaseDiskSize:
    type: number
    default: 4
    maximum: 10
    title: MySQL Data Disk Size
    description: Database Disk Size
  count: type: integer default: 2 maximum: 5 minimum: 2 title: WordPress Cluster Size description: WordPress Cluster Size (Number of Nodes) archiveDiskSize: type: number default: 4 maximum: 10 title: WordPress Archive Disk Size description: Archive Storage Disk Speed archiveusage: type: string enum: - 'usage:general' - 'usage:fast' description: Archive Storage Disk Speed title: Archive Disk Speed
resources:
  DBTier:
    type: Cloud.Machine
    properties:
      name: mysql
      image: ubuntu-16
      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: []
  WebTier:
    type: Cloud.Machine
    properties:
      name: wordpress
      flavor: '${input.size}'
      image: 'ubuntu-16'
      count: '${input.count}'
      constraints:
        - tag: '${input.env}'
      networks:
        - network: '${resource["WP-Network-Private"].id}'
          assignPublicIpAddress: true
      storage: disks: - capacityGb: '${input.archiveDiskSize}' name: ArchiveDisk
      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 && 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
  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
      constraints:
        - tag: 'type:isolated-net'
        - tag: '${input.env}'
  WP-Network-Public: type: Cloud.Network metadata: layoutPosition: - 2 - 0 properties: name: WP-Network-Public networkType: public constraints: - tag: 'type:public-net' - tag: '${input.env}' backup: type: Cloud.Machine properties: name: backup flavor: '${input.size}' image: 'ubuntu-16' networks: - network: '${resource["WP-Network-Private"].id}' constraints: - tag: '${input.env}' attachedDisks: - source: '${ArchiveDisk.id}' ArchiveDisk: type: Cloud.Volume properties: name: ArchiveDisk capacityGb: 5 constraints: - tag: '${input.archiveusage}' - tag: '${input.env}'

Дальнейшие действия

Определите собственную инфраструктуру и создайте собственные облачные шаблоны.

См. разделы Создание инфраструктуры ресурсов vRealize Automation Cloud Assembly и Проектирование развертываний vRealize Automation Cloud Assembly.