예제 애플리케이션의 기본 Cloud Assembly 템플릿을 생성하고 테스트한 후에는 개발, 테스트를 거쳐 최종적으로 운영 환경에 배포할 수 있는 여러 계층의 애플리케이션으로 확장합니다.

클라우드 템플릿을 확장하려면 다음과 같은 향상된 기능을 추가합니다.

  • 용량 증가를 위해 애플리케이션 서버를 클러스터링하는 옵션
  • 애플리케이션 서버 앞의 공용 네트워크 및 로드 밸런서
  • 아카이브 스토리지가 있는 백업 서버

사전 요구 사항

기본 클라우드 템플릿을 생성하여 테스트합니다. 기본 클라우드 템플릿 생성기본 클라우드 템플릿 테스트 항목을 참조하십시오.

프로시저

  1. 클라우드 템플릿을 클릭하고 WordPress-BP 클라우드 템플릿을 엽니다.
    설계 캔버스 및 코드 편집기에 기본 템플릿이 나타납니다.
  2. 코드 예시 및 그림을 참조하여 내용을 추가하거나 변경합니다.
    GUI를 사용하여 로드 밸런서와 같은 새로운 리소스를 캔버스에 끈 다음 코드 편집기에서 구성을 완료합니다.
    1. WordPress 애플리케이션 서버를 클러스터로 만들려면 count 입력 프롬프트를 추가합니다.
    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 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}'

다음에 수행할 작업

자체 인프라를 정의하고 자체 클라우드 템플릿을 생성합니다.

Cloud Assembly 리소스 인프라 구축Cloud Assembly 배포 설계 항목을 참조하십시오.