レッドハットの杉村です。Ansible のテクニカルサポートをしています。毎月1つは何か書くことを目標にしています。
Ansible Advent Calendar 2021 の12月12日分として投稿します。
Ansible Automation Platform (AAP) では、自動化のためのさまざまなジョブを実行することができます。プレイブックを動かすためのジョブテンプレートが主なものとなりますが、ジョブテンプレートはこのような要素から構成されています。
- インベントリー (接続対象の情報)
- プロジェクト (プレイブックなどを入れたディレクトリ)
- 実行環境 (ansible のコマンドや必要なライブラリなどが入った Podman のコンテナイメージ)
- 認証情報
- 外部変数
このジョブテンプレートを実行するためには、まずプロジェクトディレクトリ全体をジョブごとに実行ディレクトリにコピーして、ジョブ同士でリソースの競合がないように閉じた環境を作ります。以前の Ansible Tower と呼ばれていたものの古いバージョンでは同じディレクトリのものを同時にいじろうとするとロックするようになり、ジョブの起動が待たされるということもありました。
認証情報はパスワードやSSHの秘密鍵などの情報をデータベースに暗号化して保存しています。暗号化には Django の機能を使っています。
ジョブの実行時にこの認証情報を取り出して、実行ディレクトリの中にファイルとして一時的に出力して使うのですが、このような秘密鍵のデータを動的にファイルシステムの中でやりとりするという動きは珍しいようで、セキュリティのためのスキャンサービスに検知されて動作が阻害されることがあります。
特に今月に入ってからは特定のそのような製品を導入したときにその問題が頻発しており、既知のものであれば問い合わせの内容に応じて案内をしています。
内部的にもさまざまなサービスが複雑に協調して動作していますので、他の製品はその動作仕様を完全に理解していることはありませんし、そのような他の製品はできるだけ追加でインストールされないようにお願いしています。
テクニカルサポートでは日々さまざまなトラブルによる問い合わせを受けます。「何もしていないのに動かなくなりました」というのも数多くありまして、だいたいはそのようなスキャンサービスが正常な動作を阻害しているために発生します。
何かそのようなものを一緒に導入されているときに思うような動きが得られないということがありましたら、まずは止めて様子を見てみることをお勧めします。
他にも「容量」という概念がありまして、同時にいくつのジョブを実行できるのかというのを CPU やメモリのリソースから算出して、インスタンスが安定稼働を維持できるように上限を設ける仕組みがあります。スキャンサービスでプロセスなどが停止されたりファイルが削除されるようなことはなくても、他の製品を一緒に稼働させていることによって当初算出した「容量」が圧迫され、より少ないジョブの稼働数でも動作が不安定になってしまうこともあります。そのようなパフォーマンスの問題はサポートとしても再現するのが難しく、まずは他のものを止めてくださいという案内をすることになります。サーバの数を節約するために複雑な構成を取ってしまった場合に、そのために運用が難しくなるというお問い合わせを受けることがあります。
今回は製品はできるだけあるがまま普通に使いましょうというお話をしました。今年も一年を通してだいたい毎月何か一つ以上は紹介してこれたと思います。来年もよろしくお願いします。
おわりに
Ansible Automation Platform の評価ライセンスリクエストはこちらからご利用いただけます。
https://www.redhat.com/ja/technologies/management/ansible/try-it
Happy Automation!