F5 BIG-IPとPuppetによるアプリケーションデプロイの自動化
はじめに
企業が新たな収益源の開拓や競争力の維持に向けてデジタルトランスフォーメーション戦略を推進するうえで、大きな原動力となるのがスピードへのニーズ、すなわち優れた顧客体験を迅速に提供する能力です。DevOps手法を導入する組織では、現在のネットワークアーキテクチャが制約要因となっていることが明らかになっています。従来のネットワークアーキテクチャは静的で、人的ミスの影響を受けやすく、管理には多大な運用投資が必要です。拡張された継続的インテグレーション/継続的デリバリー(CI/CD)パイプラインの一環として、アプリケーションのデプロイを支えるネットワークインフラストラクチャだけでなく、DNSや負荷分散などのネットワークサービスも自動化することが不可欠です。
ネットワークを自動化することで、組織はアジリティを高め、より動的で信頼性の高いネットワーク、運用効率の向上、導入時間の短縮、一貫性の高いアプリケーション導入を実現できます。
F5のプログラマビリティでITとDevOpsの生産性を向上
プログラマビリティは、運用の自動化を実現するうえで重要な要素です。F5は長年にわたりこの考え方を取り入れ、すべてのF5® BIG-IP® Application Delivery Controllers(ADC)でプログラマビリティをサポートすることで、アプリケーションネットワークサービスファブリックの俊敏性と拡張性を実現しています。BIG-IP ADCの物理版と仮想版はいずれも、柔軟でプログラム可能な管理プレーン、制御プレーン、データプレーンを備えています。
管理プレーン
- F5 iControl®:SOAP/XML/RESTを利用して異種システム間のオープンな通信を確保し、BIG-IPの機能を自動化します。また、F5-iControl gemもサポートしており、Webサービスを介してF5デバイスに接続できます。
- F5 iApps®:テンプレート化された一連の機能により、F5デバイスでの構成とアプリケーションのデプロイを自動化できます。
コントロールプレーン
- F5 iCall™:このTclベースのスクリプティングフレームワークでは、通常のTclコマンドとともにTMSH(TMOS Shellコマンドラインインターフェース)コマンドを実行し、稼働中のF5デバイスの構成を制御できます。
データプレーン
- F5 iRules®:高度にカスタマイズ可能なTclベースのプログラマブルなスクリプト言語であるiRulesを使用すると、トラフィックをリアルタイムで検査、分析、変更、ルーティング、リダイレクト、操作できます。次世代のiRules Language eXtensions (LX)では、BIG-IPプラットフォーム(v12.1)でnode.jsの機能を利用できます。
ネットワークプログラマビリティに包括的に取り組むことで、運用上およびビジネス上の事象や機会に応じて、必要なときに対応しやすくなります。ネットワークプログラマビリティを提供するF5製品ポートフォリオにより、組織は自動化とオーケストレーションを効率的に実行できます。
F5とPuppetの共同ソリューション
F5とPuppetは、包括的なソリューションを通じて継続的インテグレーションと継続的デプロイ(CI/CD)を支援し、現代のビジネスに求められる俊敏性に対応するために提携しています。Puppetは、商用サポート付きの構成管理ツールであるPuppet Enterpriseを提供しています。Puppet Enterpriseは、コンピューティング、ネットワーク、ストレージの各リソースの管理を自動化するための、統合されたソフトウェア定義型のアプローチを提供し、組織によるアプリケーションのよりシームレスな提供を支援します。
Puppet Enterpriseは、宣言型のモデルベースアプローチでIT自動化を実現し、単純な反復作業の自動化から、大規模なパブリッククラウド、プライベートクラウド、ハイブリッドクラウドの導入まで、幅広い機能を提供します。こうしたクラウド環境で構成変更をモデル化し、テストしてから導入できるため、インフラストラクチャリソースを効率的に活用できます。また、Puppetはモジュールによる拡張性を備えており、既存のフレームワークを拡張してBIG-IPデバイスに対応できます。
一般的なPuppetインフラストラクチャでは、管理対象の各システムにソフトウェアエージェントがインストールされています。これらのエージェントは、システムに関する「facts」と呼ばれる複数の情報をPuppetマスターサーバーに定期的に送信します。Puppetマスターは、受信したfactsとマニフェスト(Puppetコードで構成され、最終的な構成を定義するカタログをコンパイルするPuppetプログラム)を使用してカタログを作成し、エージェントに返送します。その後、エージェントはカタログで定義されたシステム状態を適用できます。
ソフトウェアエージェントがノード上で直接実行されるサーバーの場合とは異なり、Puppetインフラストラクチャでは、BIG-IPデバイス用のエージェントを実行するプロキシを設定できます。これにより、BIG-IPデバイスをPuppetの管理下に置き、このソリューションがもたらすメリットを活用できます。PuppetエージェントはPuppetマスターとは別のサーバーに配置することも、同じサーバー上で実行することもできます。
Puppet言語のファイルはマニフェストと呼ばれ、ファイル名には .pp 拡張子が使用されます。Puppet言語の中核は、リソースの宣言です。言語のその他の要素はすべて、リソースをより柔軟かつ簡便に宣言できるようにするためのものです。Puppet masterは常に、現在のノードの環境で設定されたメインマニフェストを使用します。このマニフェストでは、リソースを宣言的に記述できます。
F5とPuppetの共同ソリューションにおけるデータフローを図1に示します。
- Puppetエージェントを実行しているプロキシは、リモートシェルアクセス、API、その他の手段を介してBIG-IPデバイスに関する情報を定期的に取得し、factsとしてPuppetマスターに渡します。
- Puppetマスターはカタログをコンパイルし、エージェントまたはプロキシに返します。
- Puppetプロキシは、Puppetマスターから受信したカタログをiControl gemのコードスニペットに変換し、BIG-IPデバイスに最終的な構成を作成します。
- iControl gemファイルは、ノードの構成パラメーターをiControlメッセージに変換し、APIを介して記述された状態を適用するために使用されます。

この共同実装で重要となる2つの機能は、iControl APIとPuppet Network Device Managementです。F5 iControl APIはPuppetプロキシとF5 BIG-IPデバイス間の通信を実現し、Puppet Network Device Managementは組織によるネットワークデバイスの構成を支援します。Puppet Network DeviceとF5 iControl APIを使用すると、Puppet F5モジュールをデプロイし、BIG-IPデバイスをPuppetで管理できます。Puppet F5モジュールは、仮想サーバーのデプロイと管理、プールおよびプールメンバーの構成と管理など、BIG-IPオブジェクトを管理するためのリソースを提供します。PuppetはF5モジュールを使用して、BIG-IPデバイス用に定義されたリソースを検出し、F5モジュールに保存されているカスタムクラスまたは定義済みタイプを自動的に読み込みます。
主なメリット
F5とPuppetの共同ソリューションは、次のことに役立ちます。
- 同じツールでコンピューティングインフラストラクチャとネットワークインフラストラクチャを管理し、効率を向上できます。
- システムチームとネットワークチーム間の時間のかかる引き継ぎをなくします。
- BIG-IPデバイスの構成の一貫性を確保します(構成が目的の状態から逸脱すると、Puppetが構成済みの状態に自動的に戻します)。
- 構成を一度記述するだけで多数のシステムに大規模に適用できるため、スケーラビリティとサービスの弾力性を実現できます。
- 迅速な再現が可能になります。アプリケーションを本番前環境から本番環境に移行する際は、Puppetを実行するだけで、テスト環境と同じようにすべてが構成されます。
- アプリケーションデリバリーを高速化します。
Puppet F5モジュールでは、一般的なアプリケーションのデプロイに必要なサーバーノード、プール、仮想サーバーなどのBIG-IPオブジェクトを作成、設定できます。複数のBIG-IPデバイスをデプロイする場合、Puppetモジュールを使用して、デバイスのライセンス設定、DNSおよびNTPの設定、内部および外部VLAN、セルフIP、ルートドメインなど、BIG-IPの初期オンボーディングタスクをすべて自動化できます。
ユースケース:BIG-IPプラットフォームへのHTTPアプリケーションのデプロイ
BIG-IPデバイス上で一般的なHTTPアプリケーションを構成するには、ノード、モニター、プロファイルの設定、仮想IPアドレスのデプロイなどが必要です。1台のBIG-IPデバイスであれば自動化しなくても対応できるように思えるかもしれませんが、大規模なエンタープライズアプリケーションを提供するために、複数のデータセンターにまたがる可能性のある複数のF5デバイスを構成する作業は複雑で時間がかかり、エラーも発生しやすくなります。宣言型のモデルベースPuppetマニフェストを使用することで、組織はデータセンター全体にわたる複数のBIG-IPデバイスへのアプリケーションのデプロイを管理し、自動化できます。
デプロイを開始するには、Puppetマスターをインストールし、Puppetエージェントを実行できるプロキシシステムを作成します。また、プロキシホスト(Puppetエージェント)のPuppet Ruby環境に、iControl gemやFaraday gemを含むすべての依存関係をインストールする必要があります。デプロイの構成を図2に示します。

device.confファイルの作成
F5モジュールを使用する前に、Puppetプロキシ上のPuppet構成ディレクトリ(device.conf または /etc/puppet)に/etc/puppetlabs/puppetファイルを作成する必要があります:
[bigip1]
type f5
url https://admin:admin@10.192.74.111
上記の例では、admin:admin@10.192.74.111 は、F5デバイスに対するPuppetのログイン情報(<USERNAME>:<PASSWORD>@<IP ADDRESS OF BIGIP>)を示します。
Puppet Masterでノードを分類
次に、site.pp、<devicecertname>.ppノードマニフェスト、またはprofiles::<profile_name>マニフェストファイルの該当するクラスステートメントまたはノード宣言に設定を入力します。以下は、BIG-IPプラットフォームでHTTPアプリケーションを設定するためのPuppetマニフェストファイル(site.pp)の例です。
node bigip1 {
f5_node { '/Common/web_server_1':
ensure => 'present',
address => '10.1.20.11',
description => 'Web Server Node 1',
availability_requirement => 'all',
health_monitors => ['/Common/icmp'],
}->
f5_node { '/Common/web_server_2':
ensure => 'present',
address => '10.1.20.12',
description => 'Web Server Node 2',
availability_requirement => 'all',
health_monitors => ['/Common/icmp'],
}->
f5_node { '/Common/web_server_3':
ensure => 'present',
address => '10.1.20.13',
description => 'Web Server Node 3',
availability_requirement => 'all',
health_monitors => ['/Common/icmp'],
}->
f5_pool { '/Common/web_pool':
ensure => 'present',
members => [
{ name => '/Common/web_server_1', port => '80', },
{ name => '/Common/web_server_2', port => '80', },
{ name => '/Common/web_server_3', port => '80', },
],
availability_requirement => 'all',
health_monitors => ['/Common/http_head_f5'],
}->
f5_virtualserver { '/Common/http_vs':
ensure => 'present',
provider => 'standard',
default_pool => '/Common/web_pool',
destination_address => '10.1.10.240',
destination_mask => '255.255.255.255',
http_profile => '/Common/http',
service_port => '80',
protocol => 'tcp',
source => '0.0.0.0/0',
source_address_translation => 'automap'
}
}
この例には、3つのタスクがあります。
- まず、Webサーバーを構成する必要があります。「f5_node」というF5モジュールは、3台のWebサーバー(web_server_1、web_server_2、web_server_3)を追加します。各サーバーは必要最小限のパラメーターで構成され、サーバーに直接pingを送信して応答していることを確認するヘルスモニターが設定されます。
- 次に、サーバーのプールを構成します。「f5_pool」モジュールは、web_poolという名前のプールを作成し、上記で作成したノードメンバーをプールメンバーとして追加します。
- 「f5_virtualserver」モジュールは、仮想サーバーhttp-vsを、httpプロファイルおよび上記で作成したweb_poolとともに作成します。
puppet deviceを実行
実行前は、puppet device(Puppet Network Device用のコマンド)、BIG-IPデバイスに仮想サーバー、プール、ノードは構成されていません。puppet device -v --user=rootコマンドを実行すると、デバイスプロキシノードが証明書を生成し、指定した分類をF5デバイスに適用します。
以下に示すように、すべてのタスクが失敗なく正常に完了しました。
$ sudo puppet device -v --user=root –trace
Info: starting applying configuration to bigip1 at https://10.192.74.111:443
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for bigip1
Info: Applying configuration version '1498175426'
Notice: /Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_1]/ensure: created
Notice: /Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_2]/ensure: created
Notice: /Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_3]/ensure: created
Notice: /Stage[main]/Main/Node[bigip1]/F5_pool[/Common/web_pool]/ensure: created
Notice: /Stage[main]/Main/Node[bigip1]/F5_virtualserver[/Common/http_vs]/ensure: created
Info: Node[bigip1]: Unscheduling all events on Node[bigip1]
Notice: Applied catalog in 0.50 seconds
Puppetにより、完全に構成された新しい仮想サーバーが作成されました(図3)。このサーバーは、新しく作成されたプール全体でHTTPアプリケーションの負荷を分散します(図4)。このプールには、新しく作成された3台のWebサーバーが含まれています(図5)。



すべてのPuppet F5モジュールは冪等性を備えています。つまり、ノードの状態が設定済みまたは目的の状態と一致しない場合にのみ、タスクが実行されます。言い換えると、同じマニフェストを再度実行しても、Puppetはこれらのオブジェクトを再構成しません。
情報: https://10.192.74.111:443 のbigip1への構成の適用を開始しています
情報: pluginfactsを取得しています
情報: pluginを取得しています
情報: bigip1のカタログをキャッシュしています
情報: 構成バージョン'1498522983'を適用しています
通知: カタログを1.51秒で適用しました
まとめ
自動化はDevOpsとCI/CDの重要な要素であり、多くの場合、構成管理から始まります。F5とPuppetの共同ソリューションにより、運用チームはアプリケーションインフラストラクチャスタック全体の構成を展開、自動化、管理できます。これにより、アプリケーション開発者はインフラストラクチャリソースを需要に応じて拡張・縮小し、アプリケーションテストを自動化して、アプリケーション開発期間を短縮できます。その結果、組織はこれまでにないレベルの俊敏性と拡張性を実現できます。
F5とPuppetの共同ソリューションがお客さまのビジネスにどのように役立つかについて詳しくは、forge.puppet.com/f5/f5をご覧ください。
2017年10月5日公開
