Citrix Application Delivery Managementサービス

StyleBookによる基本的な負荷分散構成の作成

前の例では、負荷分散仮想サーバーを作成するための基本的なStyleBookを構築しました。このStyleBookを別名で保存した後、基本的な負荷分散を構成するためのパラメーターとコンポーネントを追加して、StyleBookを更新します。このStyleBookファイルをbasic-lb-config.yamlという名前で保存します。

このセクションでは、負荷分散仮想サーバー、サービスグループ、およびサービス一覧からなる負荷分散の構成を作成する新しいStyleBookを設計します。また、サービスをサービスグループにバインドし、サービスグループを仮想サーバーにバインドできます。

ヘッダー

このStyleBookを作成するには、最初にHeaderセクションを更新する必要があります。このセクションは、負荷分散仮想サーバーのStyleBook用に作成したセクションと似ています。Headerセクションで、nameの値をbasic-lb-configに変更します。また、このStyleBookの適切な説明を記述して、descriptiondisplay-nameを更新します。namespaceversionの値は、変更する必要はありません。nameを変更したため、name、namespace、およびversionの組み合わせにより、このStyleBookの一意の識別子がシステム内に作成されます。

name: basic-lb-config
namespace: com.example.stylebooks
version: "0.1"
display-name: Load Balancing Configuration
description: This StyleBook defines a simple load balancing configuration.
schema-version: "1.0"
<!--NeedCopy-->

StyleBookのインポート

import-stylebooksセクションは、同じままです。このセクションでは、NITRO構成オブジェクトを使用するために、netscaler.nitro.config名前空間が指定されています。

import-stylebooks:
 -
 namespace: netscaler.nitro.config
 prefix: ns
 version: "10.5"
<!--NeedCopy-->

パラメーター

Parametersセクションを更新して、サービスまたはサーバーの一覧を定義するパラメーターと、サービスをリッスンするポートを定義するパラメーターを追加する必要があります。最初の 3 つのパラメータ nameiplb-alg およびは同じままです。

parameters:
 -
  name: name
  type: string
  label: Application Name
  description: Give a name to the application configuration.
  required: true
 -
  name: ip
  type: ipaddress
  label: Application Virtual IP (VIP)
  description: The Application VIP that clients access
  required: true
 -
  name: lb-alg
  type: string
  label: LoadBalancing Algorithm
  description: Choose the loadbalancing algorithm (method) used for loadbalancing client requests between the application servers.
  allowed-values:
     - ROUNDROBIN
     - LEASTCONNECTION
  default: ROUNDROBIN
 -
  name: svc-servers
  type: ipaddress[]
  label: Application Server IPs
  description: The IP addresses of all the servers of this application
  required: true
 -
  name: svc-port
  type: tcp-port
  label: Server Port
  description: The TCP port open on the application servers to receive requests.
  default: 80
<!--NeedCopy-->

この例では、パラメータ svc-servers が追加され、アプリケーションのバックエンドサーバーを表すサービスの IP アドレスのリストを受け付けます。これは、required: trueからわかるように、必須パラメーターです。2番目のパラメーター、svc-portは、サーバーがリッスンするポート番号を示しています。svc-port パラメータがユーザーによって指定されていない場合、デフォルトのポート番号は 80 です。

コンポーネント

また、Componentsセクションを更新して、新しい2つのパラメーターを使用して完全な負荷分散構成を作成する追加コンポーネントを定義する必要があります。

この例の場合、Componentsセクションは、次のように記述する必要があります。

components:
 -
  name: lbvserver-comp
  type: ns::lbvserver
  properties:
   name: $parameters.name + "-lb"
   servicetype: HTTP
   ipv46: $parameters.ip
   port: 80
   lbmethod: $parameters.lb-alg

components:
 -
  name: svcg-comp
  type: ns::servicegroup
  properties:
   name: $parameters.name + "-svcgrp"
   servicetype: HTTP
  
components:
 -
  name: lbvserver-svg-binding-comp
  type: ns::lbvserver_servicegroup_binding
  properties:
   name: $parent.parent.properties.name
   servicegroupname: $parent.properties.name
 -
  name: members-svcg-comp
  type: ns::servicegroup_servicegroupmember_binding
  repeat: $parameters.svc-servers
  repeat-item: srv
  properties:
   ip: $srv
   port: str($parameters.svc-port)
   servicegroupname: $parent.properties.name
<!--NeedCopy-->

この例では、(前の例の) 元のコンポーネント lbvserver-compsvcg-compという子コンポーネントがあります。また、 svcg-comp コンポーネントには2つの子コンポーネントがあります。コンポーネントを別のコンポーネント内にネストした場合、ネストされたコンポーネントは、親コンポーネントの属性を参照して構成オブジェクトを作成できます。ネストされたコンポーネントは、親コンポーネントでオブジェクトが作成されるたびに、1つまたは複数のオブジェクトを作成できます。

svcg-compコンポーネントは 、リソースservicegroupの属性に指定された値を使用して、Citrix ADCインスタンス上にサービスグループを作成するために使用されます。この例では、servicetypeの静的値を指定し、name は入力パラメータから値を取得します。$parameters.name+「-svcgrp」表記を使用して、パラメータセクションで定義されているパラメータ名を参照します。ここで、ユーザー定義の名前に「-svcgrp」が付加されます (連結)。

コンポーネント svcg-comp には、 lbvserver-svg-binding-compmembers-svcg-compという 2 つの子コンポーネントがあります。

最初の子コンポーネント lbvserver-svg-binding-compは、親コンポーネントによって作成されたサービスグループと、親の親コンポーネントによって作成された負荷分散仮想サーバー (lbvserver) との間で設定オブジェクトをバインドするために使用されます。$parent表記(親参照とも呼ばれる)は、親コンポーネントのエンティティを参照するために使用されます。たとえば、 servicegroupname: $parent.properties.name は、親コンポーネント svcg-compによって作成されたサービスグループを指し、 名前:$parent.parent.parent.properties.name は、親の親コンポーネント lbvserver-comp によって作成された仮想サーバーを指します

members-svcg コンポーネントは、親コンポーネントによって作成されたサービスグループにサービスのリスト間の設定オブジェクトをバインドするために使用されます。複数のバインディング設定オブジェクトを作成するには、StyleBookの re peat構造を使用して、パラメータ svc-serversで指定されたサーバーのリストを反復処理します。反復処理中、この StyleBook コンポーネントはサービスグループ内の各サービス(repeat-item構造のsrv) に対してサービスグループでservicegroup_servicegroupmember_bindingタイプのNITRO 設定オブジェクトを作成し、各 NITRO 設定オブジェクトip属性を対応するサーバの IP アドレスに設定します。

通常、コンポーネント内で repeat および repeat-item 構造を使用して、そのコンポーネントが同じタイプの複数の設定オブジェクトを構築できます。たとえば、 srvのようにrepeat-item 構造に変数名を割り当てて、反復の現在の値を指定できます。この変数名は、同じコンポーネントのプロパティまたは子コンポーネントで、$<varname>として参照されます(例:$srv)。

上記の例では、お互いの内部でコンポーネントのネスティングを使って、簡単に構成を組み立てています。この特定のケースでは、構成を構築する唯一の方法は、コンポーネントのネストではありませんでした。以下に示すように、ネストせずに同じ結果を得ることができます。

components:
 -
  name: lbvserver-comp
  type: ns::lbvserver
  properties:
   name: $parameters.name + "-lb"
   servicetype: HTTP
   ipv46: $parameters.ip
   port: 80
   lbmethod: $parameters.lb-alg
 -
  name: svcg-comp
  type: ns::servicegroup
  properties:
    servicegroupname: $parameters.name + "-svcgrp"
    servicetype: HTTP
 -
  name: lbvserver-svg-binding-comp
  type: ns::lbvserver_servicegroup_binding
  properties:
   name: $components.lbvserver-comp.properties.name
   servicegroupname: $components.svcg-comp.properties.servicegroupname
 -
  name: members-svcg-comp
  type: ns::servicegroup_servicegroupmember_binding
  repeat: $parameters.svc-servers
  repeat-item: srv
  properties:
   ip: $srv
   port: 80
   servicegroupname: $components.svcg-comp.properties.servicegroupname  
<!--NeedCopy-->

ここでは、すべてのコンポーネントが同じレベル(つまり、ネストされていない)ですが、達成された結果(Citrix ADC構成が生成される)は、以前に使用されたネストされたコンポーネントと同じになります。また、StyleBookのコンポーネントを宣言する順序が、構成オブジェクトの作成順序に影響を与えることはありません。この例では、 svcg-comp および lbvserver-compコンポーネントは、最後に宣言されていても、2 番目のコンポーネントにはこれらのコンポーネントへの前方参照があるため、2 番目のコンポーネント lbvserver-svg-binding-comp を構築する前に構築する必要があります。

慣例によって、StyleBooks、パラメーター、置換、コンポーネント、出力の名前は小文字です。複数の単語を含む場合は「-」文字で区分されます。たとえばlb-bindingsapp-namerewrite-configなどです。もう 1 つの規則は、コンポーネント名の末尾に-comp文字列を付けることです。

結果

新しいStyleBookに最後に追加するセクションはOutputsセクションです。Outputsセクションでは、このStyleBookを使用して構成を作成した後にユーザーに(または他のStyleBookで)公開する情報を指定します。たとえば、outputs セクションでを指定して、この StyleBook によって作成されるlbvserverおよびservicegroup設定オブジェクトを公開できます。

outputs:
-
  name: lbvserver-comp
  value: $components.lbvserver-comp
  description: The component that builds the Nitro lbvserver configuration object
-
  name: servicegroup-comp
  value: $components.svcg-comp
  description: The component that builds the Nitro servicegroup configuration object
<!--NeedCopy-->

StyleBookのOutputsセクションは、必要に応じて記述します。StyleBookで必ずしも出力を返す必要はありません。ただし、内部コンポーネントを出力として返すと、このStyleBookをインポートするすべてのStyleBookの柔軟性が向上します。このことは、複合StyleBookの作成時にわかります。

outputsセクションで、コンポーネントの単一のプロパティだけでなく、StyleBookのコンポーネントの全体を公開することが推奨されます(たとえば、$components.lbvserver-comp.properties.nameという名前だけでなく、$components.lbvserver-comp全体を公開します)。また出力には、特定の出力が何を表すかを説明する記述が追加されます。

スタイルブックを構築する

StyleBookの必須セクションをすべて定義したので、それらをまとめて2番目のStyleBookを作成します。このStyleBookファイルは、basic-lb-config.yamlという名前で既に保存されています。StyleBooksに組み込みのYAMLバリデータを使用して、YAMLコンテンツを検証およびインポートすることをお勧めします。

basic-lb-config.yamlのすべての内容を次に示します。

name: basic-lb-config
namespace: com.example.stylebooks
version: "0.1"
display-name: Load Balancing Configuration
description: This StyleBook defines a simple load balancing configuration.
schema-version: "1.0"

import-stylebooks:
 -
  namespace: netscaler.nitro.config
  version: "10.5"
  prefix: ns
parameters:
 -
  name: name
  type: string
  label: Application Name
  description: Give a name to the application configuration.
  required: true
 -
  name: ip
  type: ipaddress
  label: Application Virtual IP (VIP)
  description: The Application VIP that clients access
  required: true
 -
  name: lb-alg
  type: string
  label: LoadBalancing Algorithm
  description: Choose the loadbalancing algorithm (method) used for loadbalancing client requests between the application servers.
  allowed-values:
     - ROUNDROBIN
     - LEASTCONNECTION
  default: ROUNDROBIN
 -
  name: svc-servers
  type: ipaddress[]
  label: Application Server IPs
  description: The IP addresses of all the servers of this application
  required: true
 -
  name: svc-port
  type: tcp-port
  label: Server Port
  description: The TCP port open on the application servers to receive requests.
  default: 80

components:
 -
  name: lbvserver-comp
  type: ns::lbvserver
  properties:
   name: $parameters.name + "-lb"
   servicetype: HTTP
   ipv46: $parameters.ip
   port: 80
   lbmethod: $parameters.lb-alg
 -
  name: svcg-comp
  type: ns::servicegroup
  properties:
    servicegroupname: $parameters.name + "-svcgrp"
    servicetype: HTTP
 -
  name: lbvserver-svg-binding-comp
  type: ns::lbvserver_servicegroup_binding
  properties:
   name: $components.lbvserver-comp.properties.name
   servicegroupname: $components.svcg-comp.properties.servicegroupname
 -
  name: members-svcg-comp
  type: ns::servicegroup_servicegroupmember_binding
  repeat: $parameters.svc-servers
  repeat-item: srv
  properties:
   ip: $srv
   port: 80
   servicegroupname: $components.svcg-comp.properties.servicegroupname

outputs:
-
  name: lbvserver-comp
  value: $components.lbvserver-comp
  description: The component that builds the Nitro lbvserver configuration object
-
  name: servicegroup-comp
  value: $components.svcg-comp
  description: The component that builds the Nitro servicegroup configuration object
<!--NeedCopy-->

StyleBookを使用して構成を作成するには、Citrix ADM にインポートしてから使用する必要があります。詳しくは、「ユーザー定義スタイルブックの使用方法」を参照してください。

このStyleBookを他のStyleBookにインポートして、そのプロパティを使用することもできます。詳しくは、次のセクションで説明します。

StyleBookによる基本的な負荷分散構成の作成