예제 애플리케이션의 기본 Cloud Assembly 템플릿을 생성하고 테스트한 후에는 개발, 테스트를 거쳐 최종적으로 운영 환경에 배포할 수 있는 여러 계층의 애플리케이션으로 확장합니다.
클라우드 템플릿을 확장하려면 다음과 같은 향상된 기능을 추가합니다.
- 용량 증가를 위해 애플리케이션 서버를 클러스터링하는 옵션
- 애플리케이션 서버 앞의 공용 네트워크 및 로드 밸런서
- 아카이브 스토리지가 있는 백업 서버
사전 요구 사항
기본 클라우드 템플릿을 생성하여 테스트합니다. 기본 클라우드 템플릿 생성 및 기본 클라우드 템플릿 테스트 항목을 참조하십시오.
프로시저
예: 완료된 확장 클라우드 템플릿 코드 예제
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 배포 설계 항목을 참조하십시오.