IaC自動化ネットワーク

F5 BIG-IP AS3 【AS3の導入と設定方法について】

F5 BIG-IPのAPIであるAS3について紹介します。
本記事ではAS3の導入と設定について解説します。

本記事ではF5 BIG-IPの宣言型API「AS3」の導入方法と実際の設定方法の基礎について解説します。
宣言型APIやAS3の概要については以下の記事をご確認ください。
F5 BIG-IP運用支援ツール「AS3」【宣言型APIとAS3概要】

なお、本記事はBIG-IPバージョン17.5.3を前提として記載しております。

AS3のRPMファイルのダウンロード

まず、初めにAS3のRPMファイルをBIG-IPにインストールする必要があります。
AS3のパッケージはGithub上のF5 AS3リポジトリから公開されています。
https://github.com/F5Networks/f5-appsvcs-extension

リポジトリ内のディレクトリ構造は変更される可能性がありますが、本記事公開時点では以下の手順でダウンロードできます。
まず、上記URLの「Introduction」の「Release page」をクリックします。
AS3のRPMファイルのダウンロード手順の図1

次に、「Assets」よりRPMファイル本体と同名のファイル名の拡張子.sha256のファイルをダウンロードします。
sha256のファイルはファイル本体のsha256ハッシュ値を記載したテキストになりますので、ダウンロードしたファイルの真偽性確認にご利用ください。
AS3のRPMファイルのダウンロード手順の図2

※将来的には、AS3 RPMファイルの管理はF5のナレッジベースサイト「myF5」に移行することが予定されているようです。

RPMファイルをBIG-IPにインストール

RPMファイルをダウンロードしたら、BIG-IPにアップロードしてインストールします。
インストール方法としてはBIG-IPのWeb GUIを使用する方法とcURLを使ってインストールする方法がありますが、ここではWeb GUIを使った方法について解説します。
BIG-IP Web GUIの「iApps >> Package management LX」のページにアクセスし、「Import」ボタンをクリックします。RPMファイルをBIG-IPにインストールする手順の図1

その後、アップロードするファイルを選択する画面が表示されますので先ほどGithubよりダウンロードしたRPMファイルを選択して、「Upload」ボタンをクリックします。
アップロードが完了すると自動的にインストールまで行われて、以下のような表示になります。

RPMファイルをBIG-IPにインストールする手順の図2

続いて、RPMのインストールが正常に完了したかどうかを確認する必要があります。
この確認では、PCのコマンドプロンプトやターミナルからBIG-IPのManagement IPまたはSelf IPに対してcURLを使用します。
以下、cURLコマンドの実行例です。

$ curl -k -u username:password https://192.168.1.245/mgmt/shared/appsvcs/info | jq

username:password は、BIG-IPの管理者権限を持つユーザー名とパスワードを入力してください。

正常にインストールが完了している場合は以下のような応答が表示されます。

{
"version": "3.56.0",
"release": "10",
"schemaCurrent": "3.56.0",
"schemaMinimum": "3.0.0"
}

AS3の実行

では、いよいよAS3を実行してみたいと思います。
ここでは以下F5ドキュメントのAS3 Quick Startで公開されているサンプル宣言を使ってみたいと思います。

https://clouddocs.f5.com/products/extensions/f5-appsvcs-extension/latest/userguide/quick-start.html

{
     "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"
                             ]
                         }
                     ]
                 }
             }
         }
     }
 }

JSONを使ったHTTPリクエスト

上記の宣言はJSONで記述されています。JSONコードをHTTPリクエストを使って送信する方法としてはいくつかありますが、ここではcURLコマンドを使ってテストしてみたいと思います。
まず、上記のサンプル宣言をテキストにコピー&ペーストしてPCのローカルに保存します。
その後、以下のコマンドを実行してBIG-IPにPOSTします。

$ curl -X POST -k -u username:password https://192.168.1.245/mgmt/shared/appsvcs/declare -H "Content-Type: application/json" --data-binary @"sample.json" | jq

@sample.jsonの部分は、ローカル上のサンプル宣言を保存したファイルのパスを指定してください。

正常に完了した場合は以下のような応答が表示されます。

{
  "results": [
    {
      "code": 200,
      "message": "success",
      "lineCount": 22,
      "host": "localhost",
      "tenant": "Sample_01",
      "runTime": 24098,
      "declarationId": "urn:uuid:33045210-3ab8-4636-9b2a-c98d22ab915d"
    }
  ]
(略)

実行結果の確認

さて、実行結果を確認してみたいと思いますが、先にAS3の前提について触れたいと思います。
AS3は、BIG-IP上にテナント単位でアプリケーションの設定を実行するAPIになります。
ここで言うテナントはBIG-IPの「Partition」、アプリケーションは「Virtual Server」や「Pool」等のBIG-IPのコンフィグオブジェクトを指します。
AS3ではデフォルトPartitionの「Common」上には設定を作成することは出来ないため、Common以外の任意のPartitionを指定する必要があります。
例えば、上記のサンプル宣言はPartition「Sample_01」Virtual Server「service」、Pool「web_pool」を作成する記述になります。

それでは実際に確認したいと思います。
BIG-IP管理画面にログインして「Local Traffic ›› Virtual Servers >> Virtual Server List」のページにアクセスしてください。
次に、ページ右上の「Partition」のリストメニューをクリックしてください。
「Sample_01」というPartitionが作成されていると思いますのでこちらを選択します。
実行結果の確認手順の図1

Partition「Sample_01」に切り替えるとVirtual Server「service」が作成されていることを確認することが出来ます。
実行結果の確認手順の図2

AS3による設定変更

それでは次にA3の記述を変えて再度試してみたいと思います。
以下は、サンプル宣言からVirtual Server名とそのIPアドレスを変更した宣言になります。

{
     "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",
                 "service2": {
                     "class": "Service_HTTP",
                     "virtualAddresses": [
                         "10.0.1.100"
                     ],
                     "pool": "web_pool"
                 },
                 "web_pool": {
                     "class": "Pool",
                     "monitors": [
                         "http"
                     ],
                     "members": [
                         {
                             "servicePort": 80,
                             "serverAddresses": [
                                 "192.0.1.10",
                                 "192.0.1.11"
                             ]
                         }
                     ]
                 }
             }
         }
     }
 }

こちらを再度リクエストしてその結果を確認してみます。
結果としてVirtual Server「service2」が作成されていることを確認することが出来ました。
実行結果の確認手順の図3

ここで重要なのは、先に作成したVirtual Server「service」が削除されていることです。
AS3は宣言型APIになりますので最終的な設定状態を指定して実行することが出来ます。
そのため、Virtual Server「service2」を作成する宣言をリクエストした場合は、事前の状態(ここではVirtual Server「service」が存在している状態)に関わらず、Virtual Server「service2」だけが設定された状態となります。

以上がAS3の導入と実行の基礎になります。
次回以降ではAS3を使った複数のアプリケーションの作成方法などを解説したいと思います。

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

この記事に関連する記事