Ansible は、Python で書かれたエージェントレス自動化ツールです。 SSH 経由でクライアントに接続し、やりたくない退屈で反復的なタスクを自動化できます。これを使用すると、人間が実行するのに 1 時間かかるタスクを、数分以内に完了する単一のコマンドに変換できます。これによりパフォーマンスが向上し、次の大きなプロジェクトに着手できるようになります。
Ansible は、Python で書かれたエージェントレス自動化ツールです。 SSH 経由でクライアントに接続し、やりたくない退屈で反復的なタスクを自動化できます。これを使用すると、人間が実行するのに 1 時間かかるタスクを、数分以内に完了する単一のコマンドに変換できます。これによりパフォーマンスが向上し、次の大きなプロジェクトに着手できるようになります。
Ansible の利点
Ansible には多くの利点があります。最も重要な利点のいくつかを見てみましょう。これをいくつかのセクションに分けて説明します。1 つは自動化をまったく使用していない、または最小限の自動化を行っている人向けで、もう 1 つは Salt や Puppet などの自動化ツールをすでに使用している人向けです。
自動化の初心者
自動化が初めての場合は、シンプルなツールを使用すると学習曲線が容易になります。利用可能な他のツールではなく Ansible を選択する必要がある理由をいくつか見てみましょう。
1. 単純な構文
Ansible ではタスクを定義する方法がシンプルなので、始めるのは非常に簡単です。以下のスニペットを例に挙げます。
-
– ホスト: すべて
タスク:
– 名前: Nginx をインストールする
うーん:
名前: nginx
状態: 最新
完全な Ansible タスク。すべてのホストで「yum install nginx」を実行するのと同等です。
おそらく、それが何をしているのかはすでにおわかりでしょう。最新バージョンをインストールしています nginx 定義されたすべてのホスト上のオープンソース Web サーバー。ホストの定義については後で説明します。作成するタスクはすべて YAML で記述されるため、読みやすく、作成も簡単です。これは、自信と理解を深めながら迅速に経験を積むことができるため、新しいツールの学習を開始するときに非常に重要です。
2.ギット・ラブ
オートメーションは単純なテキスト ファイルであるため、Git (または別のソース リポジトリ システム) に保存することが可能です。オートメーションは変更管理が可能で、中央ソースからチェックアウトして更新できます。
3. 単純な約定順序
タスクは定義した順序で実行されるため、実行順序を気にする必要はありません。人間に対して行うのと同じようにステップを定義するだけで、Ansible はステップを見逃すことを心配することなく、毎回正確にその順序でステップを実行します。
4. エージェントレス
ホストをエージェントレスで管理する方法を持つことは重要ですが、自動化された方法でエージェントを展開する方法をまだ持っていない場合は、さらに重要になります。既存の環境で自動化のプッシュを開始しようとすると、特に新しいエージェントを必要とするマシンが数十台または数百台ある場合には悪夢になる可能性があります。
オートメーション愛好家
おそらく Bash、Python、または Powershell を使用してすでに自動化を行ったことがある場合は、Ansible が何をもたらすのか疑問に思うかもしれません。見てみましょう。
1. シンプルなオーケストレーション
bash スクリプトを使用して Web サイトを更新しようとしたことがありますか? Web ロード バランサーまたはリバース プロキシ、5 つの Web サーバー、データベース ロード バランサー、および 2 つのデータベース サーバーがあるとします。各コンポーネントが正常に更新されたことを確認するだけで数百行を費やす可能性があります。
Ansible を使用すると、ヘルスチェック、ローリングアップグレードを定義し、アップグレードの各ステップ中にノードの追加と削除を行うようにロードバランサーを設定できます。この例は、継続的デリバリーとローリング アップグレードの公式ドキュメントで確認できます。
2.冪等性
べき等性とは、数学やコンピュータ サイエンスにおける特定の演算の特性であり、最初の適用を超えて結果を変更することなく複数回適用できます。 - Wikipedia 基本的に、目標は、プレイブックを 1 回実行して希望どおりに設定し、その後実行し続けることです。 *X* 時間/日/週ごとに、何も変わっていないことを確認します。何かが変化した場合は、環境内で*構成ドリフト*の原因を探す必要があります。
時間の経過とともにインフラストラクチャ内のサーバーがますます異なる構成ドリフト。 - Shadow Soft
3. 内蔵シークレットストレージ
Ansible Vault と呼ばれる Ansible の組み込みシークレット ストレージを使用すると、パスワード、API キー、さらには秘密キーなどの機密データを、コードベースの残りの部分とともにソース管理に安全な方法で保存できます。これは Bash や Python では前例のないことであり、通常は API 対応のパスワード ボールトなどのサードパーティ ツールが必要です。
4.拡張性
Ansible は、Windows モジュールと Linux モジュールの両方に簡単に拡張でき、サードパーティ ツールと通信することもできます。つまり、何かを自動化したい場合、使用できるコミュニティ モジュールがすでに存在するか、ニーズに合わせて既存のモジュールを作成または調整できる可能性があります。
独自のモジュールの開発に関する情報は公式ドキュメントで見つけることができます。また、Ansible Galaxyfor コミュニティ モジュールを確認することもできます。
Ansible の使用を開始する
Ansible のインストール
開始は、ワークステーションまたはサーバーに Ansible をインストールするのと同じくらい簡単です。ここでは RedHat/CentOS コマンドを説明しますが、他のインストール手順については公式ドキュメントを参照してください。
`sudo yum install ansible`
それでおしまい!完全に機能する Ansible コントロール ノードがインストールされており、すぐに使用できます。
棚卸
Ansible は、どのマシンと通信して Playbook を実行するかを知る必要があります。それでは、基本的なインベントリの設定を見てみましょう。デフォルトのインベントリー ファイルは、Linux の「/etc/ansible/hosts」で入手できます。そのファイルを見ると、INI のような形式であり、おそらく次のようになっていることがわかります。
mail.example.com
[ウェブサーバー]
foo.example.com
bar.example.com
[データベースサーバー]
one.example.com
two.example.com
スリー.example.com
ドキュメントで説明されているように、括弧内の見出しはグループ名であり、これによりシステムを任意のグループに分類できます。 Ansible にとって、どのホストに対してタスクを実行するかを知ることが重要であるため、少し時間をかけてインベントリー ファイルをセットアップすることをお勧めします。
プレイブックの作成
プレイブックは、ホストに対して実行されるタスクのコレクションです。 1 回のプレイで 1 つのファイルという単純なプレイブックを作成することも、複数の条件付きで他のプレイブックからインポートした多数のファイルを作成することもできます。まず、Web サーバーに nginx のファイアウォール ルールをインストール、起動、追加する単純なプレイブックから始めます。 hosts ファイルには次のような内容が含まれる可能性があります。
[ウェブサーバー]
web01.example.com
web02.example.com
`nginx-install.yaml` ファイルには次のものが含まれています。
-
– ホスト: Webサーバー
タスク:
– 名前: Nginx をインストールする
うーん:
名前: nginx
状態: 最新
– 名前: Nginx の起動
サービス:
名前: nginx
状態: 開始済み
– 名前: firewalld 経由のポート 80 を許可します。
ファイアウォール:
port: 80/tcp # あるいは、「service: http」構文を使用することもできます
永久: はい
状態: 有効
Web サーバーに接続し、NGINX をインストールする Ansible ホストの概要。この Playbook を実行するには、「ansible-playbook nginx-install.yaml」を実行するだけで、Ansible が Web サーバー グループ内の任意のホストに Nginx をインストールします。これは 1 回だけ実行する単純なプレイブックですが、Ansible を環境内で簡単に使用できることを示す良い例です。
まとめ
ご覧のとおり、Ansible は非常に柔軟で使いやすい自動化ツールであり、どのような環境でも機能します。 Ansible は、学習が容易で、ニーズに合わせて拡張できるため、DevOps で完全に管理された環境へのインフラストラクチャの導入に最適な自動化ツールの 1 つです。
-ジャスティン・ゴーティエ