振り返り - 2021年のAnsibleとわたし

Red Hatのさいとうです。早いもので、今年もAnsible Advent Calendarの季節がやってきましたね。 例年、僕はみなさんがクリスマスを楽しんでいるときに、ひとり黙々とAdvent Calendarの25日の欄を埋めるのを1年最後の楽しみにしていたのですが、今年はなんと初日(12/1)と最終日(12/25)の枠を確保してしまいました。それでは Ansible Advent Calender 2021 の初日の記事をお届けします。

2021年のAnsibleとわたしの内容を振り返る

Ansible Advent Calendar初日の今日は、元記事の中で触れた2021のAnsibleの技術面でのトピックについて振り返ってみようと思います。 元記事では、2021に予想される大きな動きとして以下の2点をあげました。

  1. Private Automation Hub
  2. Container Runtime for Ansible

この2つのコンポーネントは、2021年7月にリリースされた Red Hat Ansible Automation Platform 2.0 early access(以降AAP2.0)で本格的に導入されています。当時はAnsible Festでの発表のみで、「具体的にどのような役割を担っているのか」や、「どのような形で利用者のみなさんに提供されるのか」は触れられていませんでした。 以降では、元記事の振り返りとして、この2つのコンポーネントが利用者の皆さんに「何」を「どのように提供するのか」をご紹介します(日本時間の2021年11月30日現在)。

尚、AAP2.0は、アップストリームのAnsibleプロジェクト配下にあるいくつかのコンポーネントを、よきタイミングでまとめたダウンストリーム版ですので、ここで紹介しているお話は、アップストリーム版のAnsibleやAWX、GalaxyNGといったプロダクトでも体験することができます。

Private Automation Hub

Ansible Towerのジョブランタイムで利用するコンテンツの中でModule、Plugin、RoleをまとめたものがAnsible Collectionsです。Private Automation Hubは、このCollectionsのプライベートリポジトリ機能を提供します。

Ansible Galaxyや、Red Hat Automation Hubが提供している機能を、利用者が独自の環境に構築できるわけです。アップストリーム版はGalaxy NGとして公開されています(注1)。

Private Automation Hubでは、利用者が独自に作成したCollectionsをプライベートリポジトリにアップロードして提供できるだけでなく、Ansibible GalaxyやRed Hat Automation Hubで公開されているCollectionsのリポジトリからコンテンツをダウンロードしてキャッシュすることができます。

典型的な構成図は以下の通りです。Ansible GalaxyやRed Hat Automation Hubが提供する最新のCollectionsを、インターネットへの接続性を持たないAnsible Towerから利用したいというユースケースがこれにあたります。

┌─────────────┐            ┌──────────────────────┐                         ┌──────────────────────┐
│Ansible Tower├────────────┤Private Automation Hub├──────The Internet───────┤Ansible Galaxy        │
└──────┬──────┘            └──────────────────────┘            │            └──────────────────────┘
       │                                                       │
       │                                                       │            ┌──────────────────────┐
       │                                                       └────────────┤Red Hat Automation Hub│
       │                                                                    └──────────────────────┘
┌──────┴──────┐
│Managed Node │
└─────────────┘

Private Automation Hubは、AAP1.2から提供されていましたが、プライベートリポジトリとして管理できるコンテンツがCollectionsのみに限定されていました。AAP2.0ではコンテナイメージも管理できるよう、プライベートコンテナレジストリ機能が追加されています。この機能拡張は、次のセクションでご紹介するコンテナベースのジョブ実行環境を提供するのを目的として実装されています。

(注1) アップストリーム版のGalaxyNGのインストール手順は少々厄介です。インストールパラメータの設定などは、公式サイトの手順記載されているPlaybookを読み解く必要があります。

Container Runtime for Ansible

Ansible TowerやAWXのジョブ実行環境(ansible-playbookコマンドの実行環境)は、AAP1.2(Ansible Tower 3.8.z)まではPythonのvirtualenvを利用して構成されていました。

利用者はvirtualenvをカスタマイズすることで、独自のジョブ実行環境を容易に構築することができます。しかしvirtualenvをベースとした実行環境には、PythonインタプリタやPythonモジュール群の互換性、ファイルシステムパーミッション設定など潜在的に問題となる可能性を持つ要因が多くあり、維持管理をする利用者にある程度のPythonの知識があることを前提としていました。

カスタマイズされたvirtualenvを利用した実行環境の運用では、メンテナンス時に誤ってシステムワイドにインストールされたPythonモジュールを上書きしてしまう...といった事故も多く、維持管理をしていくうえで問題が発生するリスクを常に抱えており、より安定した実行環境を求める声が多くありました。

そこで、AAP2.0では、この問題を解決するためのアプローチとしてこの実行環境がコンテナ化されています。コンテナ化された実行環境では、カスタマイズする際の手間こそvirtualenvよりかかりますが、十分にテストされたコンテナイメージの実行環境として提供することで、virtualenvベースの実行環境が持っていた環境の再現性や互換性の問題、カスタム環境をメンテナンスする際のリスクを回避することができ、より安全で安定した実行環境を提供しやすくなります。

一方で、コンテナベースのジョブ実行環境のカスタマイズ作業には、virtualenvのような手軽さは期待できません。そこで、カスタムイメージの作成を支援するためのツールと、その配布を支援するためのシステムをAAP2.0のコンポーネントとして提供することで、このデメリットを小さくするアプローチがとられました。

  • コンテナベースの実行環境(ベースイメージ) - Red Hat版 / コミュニティ版
  • カスタムコンテナイメージの作成 - Ansible Builder
  • カスタムコンテナイメージレジストリ - Private Automation Hub
  • コンテナイメージでジョブを実行するためのランチャー - Ansible Runner

これらのコンポーネントを利用して、現在のAAP2.0のジョブ実行環境は構成されています。

まとめ

こうしてみると、元記事であげた2つのトピックが、現時点で無事にプロダクトレベルでリリースされています。リリースに係わったすべての皆さんに感謝します。ありがとうございました。

AAP2.0 Early Access版のプロダクトアップデートについては、Ansible Automates Japan 2021で講演した際のスライドに、もう少し詳しくまとめてありますので、興味のあるかたは御一読ください。

それではみなさん、12月もHappy Automation :)

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