演習 3.0 - AS3の概要

Read this in other languages: uk English, japan 日本語.

目次

目的

F5 AS3 を使った virtual server 構築(Section 1 Ansible F5 Exercisesで学んだもの)のデモンストレーション

Guide

BIG-IP の設定がクリーンになっていることを確認し、次に進む前に 演習 2.1 - コンフィグの削除 を必ず実行してください。

Step 1:

お使いの F5 BIG-IP は AS3 が有効になっている事を確認してください。

  1. Webブラウザーから F5 BIG-IP にログインします。
  2. 左側のメニューから iApps ボタンをクリックします。
  3. Package Management LX のリンクをクリックします。
  4. f5-appsvcs がインストールされている事を確認します。

これでうまくいかない場合は、インストラクターに助けを求めましょう。

f5 gui

Step 2:

Playbook を作り始める前に、AS3 がどのように動くのか理解する必要があります。AS3 は F5 BIG-IP を API 呼び出しを行う際に JSON テンプレートを渡す必要があります。この演習のテンプレートは提供されます。受講者は、すべてのパラメーターについて完全に理解する必要はありません。また、ゼロからテンプレートを作れる必要はありません。 これらは2つのパートに分かれています。

  1. tenant_base.j2
{
    "class": "AS3",
    "action": "deploy",
    "persist": true,
    "declaration": {
        "class": "ADC",
        "schemaVersion": "3.2.0",
        "id": "testid",
        "label": "test-label",
        "remark": "test-remark",
        "WorkshopExample":{
            "class": "Tenant",
            
        }
    }
}

tenant_base は標準テンプレートです。F5 Networks が自社の顧客に対して提供しています。もっとも重要なパートとしては:


  1. as3_template.j2
"web_app": {
    "class": "Application",
    "template": "http",
    "serviceMain": {
        "class": "Service_HTTP",
        "virtualAddresses": [
            "{{private_ip}}"
        ],
        "pool": "app_pool"
    },
    "app_pool": {
        "class": "Pool",
        "monitors": [
            "http"
        ],
        "members": [
            {
                "servicePort": 443,
                "serverAddresses": [
                    {% set comma = joiner(",") %}
                    {% for mem in pool_members %}
                        {{comma()}} "{{  hostvars[mem]['ansible_host']  }}"
                    {% endfor %}

                ]
            }
        ]
    }
}

このテンプレートは Web アプリケーションに対する JSON の表記です。ここのパートで重要な点としては、

要約 tenant_base.j2as3_template.j2 の2つのテンプレートファイルは、Web アプリケーションのための1つの JSON ペイロードを作ります。次に Playbook を構築することで F5 BIG-IP に対して、この JSON ペイロードを送ります。

これらのテンプレートを作業ディレクトリにコピーしてください。

[student1@ansible ~]$ mkdir j2
[student1@ansible ~]$ cp ~/f5-workshop/3.0-as3-intro/j2/* j2/

Step 3:

テキストエディターを使って as3.yml という名前でファイルを作成します。

[student1@ansible ~]$ nano as3.yml

コントロールノードでは vimnano、また、RDP 経由では Visual Studio と Atom が利用可能です。

Step 4:

以下の定義を Playbook as3.yml の先頭に入力してください:

---
- name: LINKLIGHT AS3
  hosts: lb
  connection: local
  gather_facts: false

  vars:
    pool_members: ""

以下のセクションは

  vars:
    pool_members: ""

pool_members と呼ばれる変数を定義し、web グループを値として指定します。workbench に2台のWebサーバーがあり、pool_members の値を参照することで2台のWebサーバーのリストを取得することができます。

Step 5

追記 次のタスクをPlaybook as3.yml の後ろに追記します。

  tasks:
    - name: CREATE AS3 JSON BODY
      set_fact:
        as3_app_body: ""

この set_fact モジュール は、Playbook 内のタスクにおいて使用できる変数を作成(再定義)することができます。これにより新しい facts を動的に作成することができます。今回の場合、 template lookup プラグイン を使用します。このタスクには以下の内容を記述しています。

  1. 表示用にJinja2 テンプレート j2/as3_template.j2 が提供されている
  2. as3_app_body という新しい fact を作成する(中身はJSON 形式のテキスト)

Step 6

追記 以下は as3.yml の Playbook に追記します。このタスクは uri モジュールを使い、HTTP および HTTPS Web サービスと対話するためのものです。Digest認証、Basic認証、および WSSE HTTP 認証メカニズムをサポートします。このモジュールは非常に一般的で非常に使いやすいです。このワークショップの演習環境をプロビジョニングした Playbook の中でで uri モジュールを使って、Red Hat Ansible Tower の設定や、ライセンス登録を行っています。

    - name: PUSH AS3
      uri:
        url: "https://:8443/mgmt/shared/appsvcs/declare"
        method: POST
        body: ""
        status_code: 200
        timeout: 300
        body_format: json
        force_basic_auth: true
        user: ""
        password: ""
        validate_certs: false
      delegate_to: localhost

パラメーターの説明:

パラメータ 説明
- name: PUSH AS3 Playbook task の説明です。ターミナルに表示されます。
uri: uri module を呼び出します。
url: "https://:8443/mgmt/shared/appsvcs/declare" AS3 の web URL (API) です。
method: POST HTTP リクエストメソッドは大文字である必要があります。モジュールドキュメントのページに全てのオプションリストがあります。DELETEPOST が使用できます。
body: "" これにより、結合されたテンプレート (tenant_base.j2as3_template.j2 を含む) が送信され、APIリクエストの本文として渡されます。
status_code: 200 リクエストの成功を示す有効な数値のHTTP ステータスコード。ステータスコードのカンマ区切りリストにすることもできます。200は正常を意味します。これは、HTTPリクエストが成功した場合の標準的な応答です。

残りのパラメーターは、F5 BIG-IP への認証するためのもので、かなり簡単です。(すべての BIG-IP モジュールで共通)

Step 7

Playbook を実行します - コントロールホストのコマンドラインに戻って次のコマンドを実行します。

[student1@ansible ~]$ ansible-playbook as3.yml

Playbookの出力

実行時の出力結果は次のようになります。

[student1@ansible ~]$ ansible-playbook as3.yml

PLAY [Linklight AS3] ***********************************************************

TASK [Create AS3 JSON Body] ****************************************************
ok: [f5]

TASK [Push AS3] ****************************************************************
ok: [f5]

PLAY RECAP *********************************************************************
f5                         : ok=2    changed=0    unreachable=0    failed=0

解答

Ansible Playbookが完了したら、Answer キーが提供されます。こちらをクリック! as3.yml.

解答の確認

Webブラウザーから F5 BIG-IP にログインして、設定が行われている事を確認しましょう。lab_inventory/hosts というインベントリファイルから F5 ロードバランサーのIP情報を取得してください。ブラウザーには「https://X.X.X.X:8443/」のような感じで HTTPS にて 8443 ポートにアクセスします。

f5 gui as3

  1. 左側のメニューから Local Traffic をクリックします。
  2. 次に Virtual Servers をクリックします。
  3. 右側の上部の Partition のドロップダウンメニューを開き、WorkshopExample を選択します。
  4. Virtual Server serviceMain を開きます。

これで本演習は終わりです。演習ガイドへ戻る