サンプル アプリケーション用の基本的な Cloud Assembly テンプレートを作成してテストした後に、このテンプレートをマルチティア アプリケーションに拡張して、開発環境とテスト環境、最終的には本番環境に展開できるようにします。

クラウド テンプレートを拡張するには、次の機能拡張を追加します。

  • アプリケーション サーバをクラスタ化してキャパシティを増やすオプション
  • アプリケーション サーバの前にあって一般公開されているネットワークおよびロード バランサ
  • アーカイブ ストレージがあるバックアップ サーバ

前提条件

基本的なクラウド テンプレートを作成してテストします。基本的なクラウド テンプレートの作成および基本的なクラウド テンプレートのテストを参照してください。

手順

  1. [クラウド テンプレート] をクリックして、WordPress-BP クラウド テンプレートを開きます。
    基本的なテンプレートがデザイン キャンバスとコード エディタに表示されます。
  2. コード例と図を参考に追加と変更を行います。
    GUI を使用して、新しいリソースをロード バランサなどのキャンバスにドラッグし、コード エディタで設定を完了します。
    1. count 入力プロンプトを追加して、WordPress アプリケーション サーバをクラスタに含めます。
    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 展開の設計を参照してください。