Ansible Automation Platform 2.4 注目の新機能紹介

皆さんこんにちは、Red Hat ソリューションアーキテクトの岡野です。 2023 年も残すところあと少しとなりました。さて、今回は、注目の新機能をサポートし、今年GAとなった Ansible Automation Platform 2.4 について、2023 年の締めくくりとして書いておきたいと思います。それぞれのお試し方法については、年明け、またこちらの Blog でご紹介予定です。

Ansible Automatio Platform 2.4 (以下 AAP2.4) の新機能、細かいところを上げるとたくさんあるのですが、なんといっても注目は、

・Event-Driven Ansible
・Ansible Lightspeed

の2つです。では、そのそれぞれについてご説明します。

Event-Driven Ansible

AAP 2.4 では、IT の運用で発生する様々なイベントに対するオペレーションを自動化する、Event-driven Ansible (以下 EDA) が新たに追加されました。AAP 2.3 までは、GUI サービスを提供するコンポーネントとして、Ansible Automation Controller(以下 AAC)と Private Automation Hub (PAH) が提供されていましたが、AAP 2.4 では EDA Controller が GUI を提供する 3つ目のコンポーネントとして追加されています。従来の AAP では、IT システム運用の際の様々な作業を Playbook として定義し、さらにそれをサービス化することで作業工数の大幅な削減を実現しましたが、ここに EDA が追加されることにより、IT 運用の現場で日々発生する、様々なイベントを自動的に処理し、その結果として例えば、AAC と連携した Playbook の実行ができるようになります。イメージは以下の通りです。

EDA の動作は、AAC とよく似ています。AAC では yaml 形式で書かれた Playbook をジョブテンプレート経由で実行しますが、EDA では同じく yaml 形式で書かれた Rulebook を実行します。Playbook も Rulebook も同じ yaml 形式ですから、Playbook の作成・編集に慣れた方であればほとんどハードルなく Rulebook の作成ができるのではないかと思います。

Rulebook には以下の内容が記載されており、あらかじめ EDA Controller 上でアクティベーション(イベントを待ち受ける状態)されています。

・sources(何が)
 イベントの提供元に関する情報
・rules
 condition(どうなったら)
  実行条件 (not equal, equal, and / or, defined など柔軟に指定可能)
 action(どうする)

EDA の動作のトリガーとなるソースに関しては、サードパーティ製のソフトウェアと連携する形をとります。例えば、IBM社の Instana、Turbonomic、Zabbix、Dynatrace、Paloalto など EDA をサポートするソフトウェアから発砲されたイベントをソースとして利用することができます。EDA が source からイベントを受け取ると、Rulebook に記載された内容に基づき、condition に記載された条件と一致するかどうかを判断し、一致した場合は、action に記載された内容を実行します。action には、ポストイベントの発砲など含めいくつかの種類がありますが、AAC 内にあらかじめ準備されたジョブテンプレートやワークフローテンプレートを呼び出して Playbook を実行することも可能です。

例えば、以下は簡単な Rulebook の一例ですが、このケースでは、すべてのホストからの webhook を5000番ポートで待ち受け、webhook のイベントを受け取ったら、 その中のメッセージを確認し、Ansible is super cool という文字列と一致した場合に、 AAC 内にあらかじめ作成された say-what というジョブテンプレートを実行するという動作になります。

---
- name: Listen for events on a webhook
  hosts: all
  sources:   
    - name: Wait for Webhook Message
      ansible.eda.webhook:
        host: 0.0.0.0
        port: 5000
  rules:
    - name: Say Hello
      condition: event.payload.message == "Ansible is super cool"
      action:
        run_job_template:
          name: say-what
          organization: Default

AAC は実行環境で Playbook を実行しますが、EDA Controller も同じように、決定環境と呼ばれるコンテナ内部で Rulebook を実行します。 決定環境の中には ansible.eda というイベントソースプラグインがあらかじめパッケージ化されており、インストール直後から利用可能です。

ansible.readthedocs.io

詳細については以下をご確認ください。

github.com

ansible.eda 以外のプラグインは Red Hat Hybrid Cloud Console から Collections として提供されています。このあたりの実装は、AAC と同じです。以下のリンクは、 Red Hat Hybrid Cloud Console を文字列 eda で検索した結果です。EDA ではこれらの Collections が利用可能です。

console.redhat.com

EDA の具体的な動作テストの方法は年明けに、こちらのブログでご紹介したいと思います。

Ansible Lightspeed

AAP 2.4 のもう一つの大きな目玉、Ansible Lightspeed についてご紹介します。

Ansible Lightspeed は、IBM Cloud 上でサービス提供される watsonx Code Assistant for Ansible Lightspeed を利用した生成 AI による Playbook 作成支援機能です。生成 AI というと ChatGPT を思い浮かべる方も多いかもしれませんが、Ansible Lightspeed で利用される watsonx Code Assistant for Ansible Lightspeed は Ansible Galaxyコンテンツとその他のオープン・データ・ソースおよび、Red HatとIBMの自動化に関する専門知識が注入された、Ansible固有の「トレーニング」データ・セットとなっているため、生成されたコードの質が高く、また、生成されたコードがどこから来たのか、そのソースを確認することもできることから、コードの脆弱性や不意のライセンス違反などを気にすることなく、安心して利用することが可能です。

Ansible Lightspeed は VSCode の拡張機能として利用することができます。現在サポートされている機能は以下の通りです。

  • タスクの作成
    自然言語プロンプトからの Ansible Playbook または Roles のタスクの生成
  • マルチタスクの作成
    YAML コメント (#) 行でアンパサンド (&) を使用して連鎖した自然言語タスク プロンプトの連続チェーンを提供することにより、Ansible タスク ファイルと Playbook に対する複数の Ansible タスク提案を生成する
  • コンテンツソースマッチング
    生成された各コードの推奨事項を、Ansible コンテンツ、コンテンツ作成者、コンテンツ ライセンスなど、最も近い潜在的なデータ トレーニング ソースの上位 3 つと照合する
  • ポストプロセッシングルール
    生成されたコードの推奨事項を拡張し、Ansible のベストプラクティスに確実に準拠するようにする

詳しくはこちらのデータシートをご確認ください。

www.redhat.com

一つの例として、Ansible Lightspeed を使って、Playbook 内に以下ようなタスクを作成してみました。

入力した自然言語
#最新バージョンの httpd をインストール & httpd サービスの有効化と開始 & 80/443 ポートをFireall で恒久的に即座に開く

Ansible Lightspeed によるマルチタスク作成結果

  tasks:
      # 最新バージョンの httpd をインストール & httpd サービスの有効化と開始 & 80/443 ポートをFireall で恒久的に即座に開く
      - name: 最新バージョンの httpd をインストール
        ansible.builtin.package:
          name: httpd
          state: latest

      - name: Httpd サービスの有効化と開始
        ansible.builtin.service:
          name: httpd
          state: started
          enabled: true

      - name: 80/443 ポートをFireall で恒久的に即座に開く
        ansible.posix.firewalld:
          port: '{{ item }}/tcp'
          permanent: true
          state: enabled
          immediate: true
        loop:
          - 80
          - 443

簡単なデモ動画も作成してみました。

youtu.be

いかがでしたでしょうか?次回は年明け、EDA、Lightspeed の実際のお試し方法についてご紹介したいと思います。

なお、今回ご紹介した EDA は AAP のサブスクリプションに含まれておりますが、Ansible Lightspeed に関しては、IBM Cloud によるサービス提供となるため、別途追加費用が必要となります。具体的な価格に関しては弊社担当までお問い合わせください。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。