自動化クラウドネットワーク

F5 BIG-IP運用支援ツール「AS3」【宣言型APIとAS3概要】

F5 BIG-IPのAPIであるAS3について紹介します。
本記事では宣言型APIの特徴とAS3の概要について解説します。

はじめに

ネットワーク運用の話題の中では「NetDevOps」や「NetOpsの自動化」というワードを聞く機会があると思います。
そうしたお話しの中で「API対応」が重要視されているケースが多いと思いますが、(私自身もそうでしたが)API対応の重要性をなんとなくイメージすることができても実際の運用でどのように活用されるのかを言語化することができない方というのは(おそらく)多いのかなと思います。
本記事ではF5 BIG-IP の宣言型 APIであるAS3紹介の概要編としてNetDevOpsにおける宣言型APIの役割、BIG-IP AS3概要について簡単に紹介します。

NetDevOpsとは

NetDevOpsについてはインターネット上の様々な記事や書籍があると思いますので詳しい説明については割愛したいと思いますが、DevOpsの考え方をNetOps(ネットワーク運用)に適応することを指します(単にNetOpsの自動化とだけ言われるケースもあります)。その特徴としては以下のようなものがよく挙げられています。

  • CI/CDの導入
  • インフラのコード化 ( IaC : Infrastructure as Code )
  • ネットワークの設定・運用・テストの自動化

これを非常に簡単(やや大雑把な言い方かもしれませんが)に言い換えますとネットワーク機器の設定をコード化(つまりプログラミングするように設定できるように)して、CI/CDツールに組み込み、設定・運用・テストを自動化できるようにする、となります。この時にネットワーク機器側で重要となってくるのがTeraform対応、Ansible対応などの「宣言型API」への対応になります。

宣言型APIと命令型API

宣言型APIは、「何を実現したいか(最終的な状態)」を指定して実行するAPIになります。対義語は命令型APIで、こちらはCLIから設定変更を実施するのと同じように「コマンド(命令)」を指定して実行するAPIです。

宣言型APIと命令型APIを比較した場合の大きな違いのひとつは、宣言型APIは冪等性(べきとうせい)を持つという点になります。冪等性とは、「ある操作を複数回繰り返しても同じ結果が得られる性質」を指します。一方で命令型APIは、CLIからコマンドを実行する場合と同様にAPIリクエストを実施するため、一般的にはこの冪等性は持ちません。
例えば、ある機能のオン・オフを操作するAPIを考えます。

■命令型API
「機能をオンに切り替える」という操作を行う
・オフならオンになる
・すでにオンなら何も起きない、あるいはすでにオンになっている旨の応答が返る
・実行前の状態(例えば該当機能の前提となる他の設定がある場合)によってはエラーが応答される

■宣言型API
「機能がオンの状態」を指定する
・何度実行しても最終状態はかならずオンになる
・すでにオンなら何も変更されない

つまり、同じリクエストを何度送っても結果は変わりません。
これが宣言型APIにおける冪等性です。
最終的な状態のみを指定することが可能となりますので設定の手順化が不要になります
設定変更・運用の自動化を考えた場合、宣言型APIのこの特徴が非常に重要になることが想像できるかと思います。

宣言型APIの特徴まとめ

  • 最終的な状態を指定して実行する
  • 設定変更内容毎の手順化が不要
  • 冪等性を持つ

F5 BIG-IPの宣言型 API 「AS3」

AS3(Application Services 3 Extension)は、BIG-IPがサポートする宣言型APIの名前になります。BIG-IPのAPIでは他にiControl RESTがありますが、こちらは命令型APIになります。
AS3は以下のような特徴を持ちます。

  • 自動化・CI/CD統合を前提に開発
  • 宣言型API
  • 宣言はJSONスキーマによって記述されるRESTful API
  • 冪等性とアトミック性を持つ
  • 差分アップデート(リクエストされた宣言の差分のみを適用する)
  • アプリケーション(Virtual Server等)の設定を定義可能
  • L4-L7の設定に対応 (Interface、VLAN、SelfIP、Route等は非サポート)
  • LTM、DNS(GTM)、APM、AFM、ASMをサポート

参考URL
F5 BIG-IP Application Services 3 Extension Documentation

以下は、上記参考URLのドキュメントから引用したAS3宣言の記述例になります。
記述内のパラメータの説明は次回以降のパートで実施したいと思いますが、ここでのポイントはBIG-IP の設定をJSONスキーマで記述することができ、これをそのままBIG-IPに反映することができる点です。つまりプログラミングのコードを書くかのようにBIG-IPの設定内容を記述することができます。
これがネットワーク機器の設定のコード化(IaC)になります。

{
     "class": "AS3",
     "action": "deploy",
     "persist": true,
     "declaration": {
         "class": "ADC",
         "schemaVersion": "3.0.0",
         "id": "urn:uuid:33045210-3ab8-4636-9b2a-c98d22ab915d",
         "label": "Sample 1",
         "remark": "Simple HTTP Service with Round-Robin Load Balancing",
         "Sample_01": {
             "class": "Tenant",
             "A1": {
                 "class": "Application",
                 "service": {
                     "class": "Service_HTTP",
                     "virtualAddresses": [
                         "10.0.1.10"
                     ],
                     "pool": "web_pool"
                 },
                 "web_pool": {
                     "class": "Pool",
                     "monitors": [
                         "http"
                     ],
                     "members": [
                         {
                             "servicePort": 80,
                             "serverAddresses": [
                                 "192.0.1.10",
                                 "192.0.1.11"
                             ]
                         }
                     ]
                 }
             }
         }
     }
 }

まとめ

  • AS3はBIG-IP AS3の宣言型APIであり、冪等性を持つ
  • API実行の冪等性は自動化において非常に重要な要素である
  • AS3によってBIG-IPの設定をコード化することができる

AS3がどのようなものなのか、AS3はどのようなときに活用されるのかがお分かりいただけたでしょうか。
次回以降では実際にAS3の導入方法について解説していきたいと思います。

この記事に関連する製品・サービス