Application Delivery Management

基本的な負荷分散構成を作成するStyleBook

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

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

ヘッダー

このStyleBookを構築するには、まずヘッダーセクションを更新する必要があります。このセクションは、負荷分散仮想サーバーStyleBook用に作成したものと同様です。ヘッダーセクションで、nameの値をbasic-lb-configに変更します。また、descriptiondisplay-nameを適切に更新して、このStyleBookを説明します。namespaceversionの値は変更する必要はありません。名前を変更したため、名前、名前空間、およびバージョンの組み合わせにより、システム内でこのStyleBookの一意の識別子が作成されます。

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

StyleBookのインポート

import-stylebooksセクションは変更されません。これは、Nitro構成オブジェクトを使用するためにnetscaler.nitro.config名前空間を参照します。

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

パラメーター

パラメーターセクションを更新して、サービスまたはサーバーのリストと、サービスがリッスンするポートを定義するための2つの追加パラメーターを追加する必要があります。最初の3つのパラメーター、name、ip、およびlb-algは変更されません。

parameters:
 -
  name: name
  type: string
  label: アプリケーション名
  description: アプリケーション構成の名前
  required: true
 -
  name: ip
  type: ipaddress
  label: アプリケーション仮想IP (VIP)
  description: クライアントがアクセスするアプリケーションVIP
  required: true
 -
  name: lb-alg
  type: string
  label: 負荷分散アルゴリズム
  description: アプリケーションサーバー間でクライアント要求を負荷分散するために使用される負荷分散アルゴリズムを選択します。
  allowed-values:
  -  ROUNDROBIN
  -  LEASTCONNECTION
  default: ROUNDROBIN
 -
  name: svc-servers
  type: ipaddress\[\]
  label: アプリケーションサーバーIP
  description: このアプリケーションのすべてのサーバーのIPアドレス
  required: true
 -
  name: svc-port
  type: tcp-port
  label: サーバーポート
  description: アプリケーションサーバーで要求を受信するために開かれているTCPポート。
  default: 80
<!--NeedCopy-->

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

コンポーネント

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

この例では、コンポーネントセクションを次のように記述する必要があります。

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-comp(以前の例から)に、svcg-compという子コンポーネントが追加されています。そして、svcg-compコンポーネントには、その中に2つの子コンポーネントがあります。コンポーネントを別のコンポーネント内にネストすることで、ネストされたコンポーネントは、親コンポーネントの属性を参照して構成オブジェクトを作成できます。ネストされたコンポーネントは、親コンポーネントで作成されたオブジェクトごとに1つ以上のオブジェクトを作成できます。

svcg-compコンポーネントは、リソース「servicegroup」の属性に指定された値を使用して、NetScalerインスタンス上にサービスグループを作成するために使用されます。この例では、servicetypeに静的な値を指定していますが、nameはその値を入力パラメーターから取得します。パラメーターセクションで定義されたパラメーター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によって作成されたサービスグループを参照し、name: $parent.parent.properties.nameは親の親コンポーネントlbvserver-compによって作成された仮想サーバーを参照します。

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

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

上記の例では、コンポーネントを相互にネストして、この構成を簡単に構築しました。この特定のケースでは、コンポーネントのネストが構成を構築する唯一の方法ではありませんでした。以下に示すように、ネストせずに同じ結果を達成することもできました。

components:
 -
  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: $components.svcg-comp.properties.name
 -
  name: lbvserver-svg-binding-comp
  type: ns::lbvserver\_servicegroup\_binding
  properties:
   name: $components.lbvserver-comp.properties.name
   servicegroupname: $components.svcg-comp.properties.name
 -
  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:
  name: $parameters.name + "-svcgrp"
  servicetype: HTTP
<!--NeedCopy-->

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

慣例として、StyleBook、パラメーター、置換、コンポーネント、および出力の名前は小文字で記述されます。複数の単語を含む場合は、「-」文字で区切られます。たとえば、「lb-bindings」、「app-name」、「rewrite-config」などです。もう1つの慣例は、コンポーネント名に「-comp」文字列を接尾辞として付けることです。

出力

新しいStyleBookに追加できる最後のセクションは、構成の作成に使用された後、このStyleBookがユーザー(または他のStyleBook)に公開するものを指定する出力セクションです。たとえば、このStyleBookによって作成されるlbvserverおよびサービスグループ構成オブジェクトを公開するように出力セクションで指定できます。

outputs:
 -
  name: lbvserver-comp
  value: $components.lbvserver-comp
  description: Nitro lbvserver構成オブジェクトを構築するコンポーネント
 -
  name: servicegroup-comp
  value: $components.svcg-comp
  description: Nitroサービスグループ構成オブジェクトを構築するコンポーネント
<!--NeedCopy-->

StyleBookの出力セクションはオプションです。StyleBookは出力を返す必要はありません。ただし、一部の内部コンポーネントを出力として返すことで、このStyleBookをインポートするStyleBookに、複合StyleBookを作成するときに見られるように、より多くの柔軟性をもたらします。

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

StyleBookの構築

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

ファイルbasic-lb-config.yamlの全内容は以下のとおりです。

name: basic-lb-config
namespace: com.example.stylebooks
version: "0.1"
display-name: 負荷分散構成
description: このStyleBookはシンプルな負荷分散構成を定義します。
schema-version: "1.0"

import-stylebooks:
 -
  namespace: netscaler.nitro.config
  version: "10.5"
  prefix: ns
parameters:
 -
  name: name
  type: string
  label: アプリケーション名
  description: アプリケーション構成に名前を付けます。
  required: true
 -
  name: ip
  type: ipaddress
  label: アプリケーション仮想IP (VIP)
  description: クライアントがアクセスするアプリケーションVIP
  required: true
 -
  name: lb-alg
  type: string
  label: 負荷分散アルゴリズム
  description: アプリケーションサーバー間でクライアント要求を負荷分散するために使用される負荷分散アルゴリズム(メソッド)を選択します。
  allowed-values:
     -  ROUNDROBIN
     -  LEASTCONNECTION
  default: ROUNDROBIN
 -
  name: svc-servers
  type: ipaddress[]
  label: アプリケーションサーバーIP
  description: このアプリケーションのすべてのサーバーのIPアドレス
  required: true

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: Nitro lbvserver構成オブジェクトを構築するコンポーネント
-
  name: servicegroup-comp
  value: $components.svcg-comp
  description: Nitroサービスグループ構成オブジェクトを構築するコンポーネント
<!--NeedCopy-->

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

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

基本的な負荷分散構成を作成するStyleBook