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

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

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

사전 요구 사항

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

프로시저

  1. 클라우드 템플릿을 클릭하고 WordPress-BP 클라우드 템플릿을 엽니다.
    설계 캔버스 및 코드 편집기에 기본 템플릿이 나타납니다.
  2. 코드 예시 및 그림을 참조하여 내용을 추가하거나 변경합니다.
    GUI를 사용하여 로드 밸런서와 같은 새로운 리소스를 캔버스에 끈 다음 코드 편집기에서 구성을 완료합니다.
    1. WordPress 애플리케이션 서버를 클러스터로 만들려면 count 입력 프롬프트를 추가합니다.
    2. 클라우드 애그노스틱 로드 밸런서를 추가합니다.
    3. 로드 밸런서를 WordPress 애플리케이션 서버 클러스터에 연결합니다.
    4. 클라우드 애그노스틱 백업 시스템을 추가합니다.
    5. 백업 시스템을 전용/내부 네트워크에 연결합니다.
    6. 클라우드 애그노스틱 공용/외부 네트워크를 추가합니다.
    7. 로드 밸런서를 공용 네트워크에 연결합니다.
    8. 아카이브 디스크로 사용하기 위해 클라우드 애그노스틱 스토리지 볼륨을 추가합니다.
    9. 아카이브 디스크를 백업 시스템에 연결합니다.
    10. 아카이브 디스크 속도에 대한 입력 프롬프트를 추가합니다.
  3. 기본 클라우드 템플릿에서와 동일한 방식으로 배포, 테스트 및 변경합니다.
    기존 배포를 업데이트하거나 새 인스턴스를 배포하여 배포를 비교할 수 있습니다.

    목표는 운영 배포에 사용할 수 있는 신뢰할 수 있고 반복 가능한 템플릿에 도달하는 것입니다.

    모든 리소스

    스페이서

예: 완료된 확장 클라우드 템플릿 코드 예제

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

다음에 수행할 작업

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

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