質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

2回答

1224閲覧

Ansible Tower (またはAWX) の優位性

xotaki

総合スコア49

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

1クリップ

投稿2021/06/19 14:59

以前、Chef を使っていた時に Chef を実行し、Serverspec で設定や状態をテストする、というワークフローを Jenkins で実装しました。テスト結果を JUnit 形式で出力することでテスト結果の推移をグラフ表示したり、エラー内容をドリルダウンして確認できたりして、大変重宝しました。
現在は Chef から Ansible に乗り換えているのですが、 Ansible の実行環境として Ansible Tower (または AWX ) を検討しています。
Ansible Tower では Serverspec の実行はできないと思うので、 Jenkins と比較して優位性を見いだせずにいます。
優位性はどこにあるのでしょうか。また、 Ansible を実行した後のテストはどのようにしたらよいでしょうか。事例をご紹介いただけたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Ansible Tower では Serverspec の実行はできないと思うので、 Jenkins と比較して優位性を見いだせずにいます。

Ansible TowerとJenkinsは用途が異なるので、そもそも論もあります。

Ansible TowerはAnsibleの実行、管理するためのGUI環境です。
Ansibleは様々な用途で使うことができますが、構成管理でよく使われます。
汎用性が非常に高く、CLI、APIで実行できるものなら基本的になんでもAnsible経由で実行できます。なので、Serverspecも実行できると思います。
また、最大の特徴として、「冪等性」が担保されていること。
冪等性とはすでに期待した状態になっていたら、操作はしないということです。

一方Jenkinsは広い意味でいうとジョブ管理ツールです。
プラグインを追加することでGUIであれこれの設定でき、すぐに動かせる。(優位性)
ただし、それらのGUIの設定を簡単にコード化できない(今はできるかはわからないが)ので、pipelineで設定を定義し、コード管理したほうがよいでしょう。もちろんJenkinsのshell実行でAnsibleのコードを実行することもできます。

一気に書くのもあれなので、ひとまずこんな感じでいかがでしょうか。

投稿2021/06/19 15:31

comefigo

総合スコア1045

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xotaki

2021/06/20 01:35

ご回答ありがとうございました! > Ansible TowerとJenkinsは用途が異なるので、そもそも論もあります。 Ansible Tower は、 Ansible に特化したジョブ管理ツールと理解しています。 今まで、Jenkins から Ansible を実行し、その後 Serverspec を実行するワークフロー(パイプライン)を書いていたのを Jenkins から Ansible Tower に乗り換えると、どのような運用になるのか、というのがイメージできておらず、今回質問させていただいた次第です。 具体的には、テストをどうすればよいか、というのが分からず、皆さんの知見、実績をお伺いできればと思っています。 Ansible に assert モジュールがあるのは存じ上げていますが、後続のタスクの前提条件を満たしているかを確認するために書くには適していますが、実行後の確認として assert で確認するのは実際コードを書くのがつらいな、と。 最初の質問で言葉足らずな部分がありましたらご容赦ください。
comefigo

2021/06/20 02:57

なるほど。 すでにJenkinsとAnsibleをお使いなられてるのですね。 そしたら、そもそもなぜ乗り換えるのでしようか? テストコードを書くのはいつだってつらいと思います。 ただ、ansibleだと汎用性が高く、今の運用に留まらず他の自動化にも役に立てられるかなと思います。
xotaki

2021/06/20 05:21

Ansible Tower は開発が活発なので、乗り換えたらどういう運用になるのか興味を持ったのがきっかけです。(もちろん、Jenkinsがダメという意図はないです) お二方のご回答を受けて、下記ドキュメントを見返してみました。 scriptを使うことで汎用性は高まりますね。いいヒントをいただきました。もう少し自分の中で検討を進めたいと思います。 https://docs.ansible.com/ansible/latest/reference_appendices/test_strategies.html
comefigo

2021/06/20 07:26

なるほど。 正直今のjenkinsからansibleをキックするのも別に悪くはないかなと思います。 もっとゴリゴリansibleを活用していくのであれば全体をansible + towerに統一して学習コストを下げるのもありだとおもいます。
xotaki

2021/06/20 11:40

この度はご意見ありがとうございました。
guest

0

質問要旨を以下と私は考えて回答します。

これまでの運用が「Jenkinsで、Chef を実行 → Serverspec で設定や状態をテスト」
とした場合に、Ansible・Towerを使った場合にこれまでの運用と比較したい

ただ、comefigoさんが書いたとおり、

Ansible TowerとJenkinsは用途が異なるので、そもそも論もあります。

なのかなぁとも考えます。

ただ、実現できることベースで考えた場合、
Ansible・Towerはどちらかと言うと「Chefを実行」の部分になります。

「Serverspec で設定や状態をテスト」については、どう運用するかは、
色々パターンがあるんじゃないかと考えます(私はServerspecを使わないので詳しくは分かりません)。

例えば、Ansibleを前提とした場合、各パーツ(NginxやMySQLをインストールする等)はroleとして、moleculeを使ってテストをすることが多いです。
また、moleculeを使うことで、Ansibleをサーバに適用する前に、VMやDockerを使ってroleのテストのみを行うことが可能です。

なので、AnsibleのPlaybookをGitHubなどで管理しておいて、roleを変更した際に、
Jenkins Pipelineをつかってmoleculeでテストするなんて事もできます。

MoleculeをJenkins Pipelineつかって実行する例
https://molecule.readthedocs.io/en/latest/ci.html#jenkins-pipeline

テスト結果を JUnit 形式で出力することでテスト結果の推移をグラフ表示したり、エラー内容をドリルダウンして確認できたりして、大変重宝しました。

この辺については、roleのテスト部分で同様に作り込むとかすると良いと考えます(JUnitを使うとかじゃなくて別の何かを用意するとか)。

この場合、これまで作ってきた Serverspec の資産が使えていないです。
ただ、事前にrole単位でテストしているので問題無いって発想です。

しかし、本番に適用したものをどうしてもテストしたいということであれば、
以下のようにすると、「適用したサーバが想定通りに適用出来てる事を確認する」という観点において、同様なことは出来るのではないでしょうか。

  1. Jenkinsのジョブを用意してServerspecを実行出来るようにしておく
  2. Ansibleで、そのジョブをAPI経由で実行出来るようroleを作成
  3. Towerのワークフローにて、Ansibleを適用した最後に、2を実行する

最後にAnsibleやTowerを使うメリットを挙げるとすると、

  1. サーバに適用する前に、Molecule使ってパーツ(=role)単位にテストが可能
  2. 冪等性を担保出来るように実装出来ること
  3. サーバの構成管理に特化した部分をJenkinsで頑張らなくてもAnsible・Tower側のUpdateで最適化される(餅は餅屋)

→Towerのワークフローで柔軟に構成したり実行権限を制御する
→実行結果を後から振り返りやすい

投稿2021/06/20 00:02

yassan

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xotaki

2021/06/20 02:03 編集

大変丁寧なご回答ありがとうございました! > また、moleculeを使うことで、Ansibleをサーバに適用する前に、VMやDockerを使ってroleのテストのみを行うことが可能です。 そうですね。 Molecule が role のテストとして使うことは以前、別のコミュニティ(Slack の molecule チャンネル)で話題になり、教えていただいきました。(質問の趣旨とは外れてしまいますが)自分なりに試行錯誤した結果を下記にまとめました: https://qiita.com/xotaki/items/df34ddf5ee38c45a023a > ただ、事前にrole単位でテストしているので問題無いって発想です。 そういう考え方もあるのですね。参考になります。 私としては、vars で定義したものが正しく反映されているか確認したくなってしまいますので、本番に適用したものをテストしています。 > 最後にAnsibleやTowerを使うメリットを挙げるとすると、 > 3. サーバの構成管理に特化した部分をJenkinsで頑張らなくてもAnsible・Tower側のUpdateで最適化される(餅は餅屋) 餅は餅屋、というのは仰る通りですね。Ansible Tower の update でより洗練されていく、というのは魅力です。
yassan

2021/06/20 07:26

確かに本番にほんとに設定出来ているかについては気になりますよねー。 > vars で定義したものが正しく反映されているか確認したくなってしまいます 私は、その場合は、気になるvarsを設定したMoleculeのシナリオを追加して、想定通りの設定になるかを確認してます。また、他のroleも依存するならシナリオ実行前に依存するroleを適用したりします(converge.ymlにpre_tasksを追加してそこで、必要なvarsやroleを追加してます)。
xotaki

2021/06/20 11:40

この度はご意見ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問