Ansibleは、システム管理者がインフラストラクチャ構成、アプリケーションのデプロイ、構成管理を自動化するために使用するオープンソースの自動化ツールです。エージェントレスです。つまり、他の自動化ツールとは異なり、必要なタスクを実行するためにソフトウェアをホストにインストールする必要はありません。代わりに、ターゲットシステムがLinuxベースの場合はSSH、ターゲットシステムがWindowsベースの場合はWinRM、ターゲットシステムがAPIを公開している場合はAPIを使用します。
宣言型プログラミング言語を使用して、目的のターゲット構成を定義します。ただし、構成をどのように実行する必要があるかについては宣言していません。たとえば、新しい仮想マシンを作成するには、ターゲット仮想マシンの仕様とその展開方法を定義する必要があります。次に、Ansible Engineは、関連するモジュールを使用して、必要なタスクを実行します。
ITの世界での自動化
ITの世界での自動化は、繰り返しのアクションを手動で行わないようにし、展開サイクルをスピードアップするために必要です。 Ansibleは、これらのニーズに対応することを目的としています。 AnsibleがITインフラストラクチャの重要な部分になる方法の例を次に示します。
コードとしてのインフラストラクチャ
- 新しい仮想マシンの起動は、いくつかの方法で実行できます。ただし、新しいVMを起動した後も、新しいシステムが機能するまで、追加のソフトウェアパッケージやアプリケーションなどをインストールする必要があります。 Ansibleを使用すると、新しい仮想マシンの作成からアプリケーションの構成まで、プロセス全体を自動化できます。
- 継続的に成長するクラウド環境がある場合、実際に新しいコンピューティングリソースをクラウドに接続するには、さまざまなクラウドネイティブツールを使用できます。それでも、ハードウェアを接続する前に、まずハードウェアを準備する必要があります(つまり、ローカルディスクのRAID構成を作成したり、プロファイルにVLANを追加したりするなど)。 Ansibleは、ハードウェアを準備し、クラウドネイティブAPIを使用してクラウドに接続するための主要なツールになります。
アプリケーションの自動化
- 定期的に更新する必要のあるアプリケーションがあるとします。たとえば、データベースへの新しいエントリの追加は、いくつかの方法で完了できます。アプリケーションが特定のサーバーに分散している場合は、さまざまなシステム用に異なるスクリプトを作成する代わりに、1つ以上の再生を含むAnsibleプレイブックを作成して、このアクションをAからZまで自動化および調整できます。
[次もお読みください:新しいAnsibleAutomationHubの紹介]
Ansibleモジュール
Ansibleモジュールは、タスクを実行するための指示を受け取ります。 Ansibleの最も重要なポイントの1つは、新しいモジュールを定期的に作成する広大なコミュニティです。これらのモジュールは通常、Pythonでコーディングされています。初期インストールには、常にモジュールがプリインストールされています。ただし、インターネットから追加のモジュールをインストールできます。各モジュールに関する詳細情報(つまり、このモジュールの機能、使用方法、例など)は、次の2つの方法で取得できます。
オンライン :Ansibleドキュメントを検索する。
検索するときは、ページの左上隅にあるドロップダウンリストから適切なAnsibleバージョンを選択する必要があります。
オフライン :ansible-doc
を使用する コマンドラインからのコマンド。
$ ansible-doc file
ここでは、file
というモジュールの使用方法を検索しています。 。 Ansibleの豊富なモジュールの選択肢は、実際には両刃の剣であり、長所と短所があります。
利点:
- 実行したいほぼすべてのタスクのモジュールを見つけることができます。
- 必要に応じてサポートする巨大なコミュニティがあります。
短所:
- このように多くのモジュールを使用すると、使用するモジュールがすぐに混乱する可能性があります。そのため、Ansibleを使用して特定のタスクを自動化する計画を立てるときは、使用するモジュールを決定してそれらをテストするための戦略を作成する必要があります。
- 誰もサポートしなくなった、または新しいAnsibleリリースで非推奨になった多くのコミュニティモジュールがあります。すべての新しいAnsibleアップグレードを慎重に実行してください。また、自動化チェーンのリスクを冒す前に、モジュールを実稼働環境に移動する前に十分なテストを行ってください。使用するモジュールを選択し、自動化戦略を構築することは、時間をかけて行うことです。
AnsibleとPython
AnsibleはPythonに大きく依存しています。ほとんどのモジュールはPythonでコーディングされています。また、Ansibleを使用してタスクの自動化を開始するには、ターゲットのLinuxベースのシステムにPythonがインストールされている必要があります。 AnsibleはPythonに大きく依存していますが、Pythonに関する深い知識は必要ありません。ただし、pip
の使用方法を知っている Pythonパッケージ(インストール、更新など)を管理し、Python仮想環境を作成することをお勧めします。
警告:
- Ansible EngineシステムにPythonバージョンまたはプレインストールされたパッケージを変更することは、自動化チェーンを壊す可能性のある危険なアクションです。
- RedHatがサポートするAnsibleEngineを使用している場合、Red Hatは必要に応じてPython仮想環境を作成するのに役立ちますが、仮想環境のコンテンツはサポートされていません。
AnsibleEngineとAnsibleTower
Ansibleは、さまざまなDevOpsチームが使用することを目的としています。 Ansible Towerを使用すると、多くのチームが、RBAC、実行されたタスクのログ記録、タスクを実行するためのGUI、およびその他の機能を可能にする一元化された場所から自動化タスクを実行できます。巨大な自動化チェーンのための一元化された自動化システムを持つことで、メンテナンスタスクが簡素化されます。小規模なAnsible自動化チェーンの場合、Ansibleエンジンを使用できます。これは、AnsibleバイナリがインストールされたLinuxベースのノードです。この設定では、RBACとGUIを見逃します。ただし、Ansible Engineは、関連する自動化タスクを実行するために必要な環境を提供します。
どのAnsibleアプローチですか?
アドホック
アドホックは、単一のAnsibleタスクをターゲットシステムに送信する方法です。これは、SSHまたはレガシーrshを使用してリモートシステムでコマンドを実行することで確認できます。アドホックAnsibleを使用すると、複数のコマンドを実行するAnsibleモジュールを使用しているという理由だけで、1つのコマンドではなくより高度なタスクを実行できます。
再生
Ansible Playsは、YAML形式のさまざまなファイルのコレクションであり、1つ以上のターゲットシステムで実行されます。これらの戯曲は、プレイブックと呼ばれるファイルに書き込まれます。 。
どのタイプを使用しますか?
Ansibleの経験では、両方のアプローチが使用されているのを見てきました。開発者がアドホックコマンドを単純なBashスクリプトにリストし、他の開発者がきちんとしたプレイブックを作成しているのを見てきました。アドホックなAnsibleを使用したBashスクリプトは単純に見えるかもしれませんが、Ansibleはこのように使用することを意図したものではありません。アドホックコマンドは、いくつかの単純なタスクに適しています。完全な自動化のシナリオでは、簡単に視覚的に実行されるアクティビティをデバッグするためのプレイブックが必要です。プレイブックを使用する重要な利点の1つは、自動化チェーンの成長に合わせてプレイブックをAnsibleTowerにインポートできることです。前述のように、さまざまな方法を好む開発者がいますが、「自動化チェーン」の設計者またはアーキテクトとして、チェーンのスケーラビリティを考慮し、自動化タスクをAnsibleTowerに統合することを決定するポイントを決定する必要があります。
YAML
YAMLはマークアップ言語ではありません 、(YAML)は、Ansibleプレイブックが作成される形式です。 YAML形式は、いくつかの領域で使用されます(つまり、OpenStackでのヒートテンプレート、Kubernetesでのオブジェクトの作成/変更など)。 YAML形式は読みやすいです。ただし、インデントに敏感であるため、多少注意が必要です。 YAMLでファイルを作成しておらず、プレイブックのデバッグに時間を費やさないようにするには、YAMLの構文とフォーマットを理解し、インデントを自動的に調整できるエディターを選択する必要があります。個人的には、Linuxシステムで無料のVimエディターを使用するのが好きです。次の行をファイルに追加するだけで、.vimrc
という名前を付けることができます。 ホームディレクトリに保存します:
autocmd FileType yaml setlocal ai ts=2 sw=2 et
ファイル
Ansibleには、定期的に耳にするファイルの種類がいくつかあります。ここにいくつかあります:
プレイブック
プレイブックは、ターゲットシステムで実行されるタスクを含むYAML形式で記述されたファイルです。同じシステムを対象とするタスクは通常、1つのプレイにグループ化され、プレイブックには1つ以上のプレイを含めることができます。 Ansibleエンジンは、ファイルの先頭から下に向かってタスクを実行します。
在庫
Ansible Inventoryは、ターゲットシステムを識別するファイルです。インベントリ内にグループを作成して、システムを整理できます。たとえば、Webサーバー用のグループとデータベース用の別のグループを作成できます。 Ansibleには2種類のインベントリファイルがあります:
静的在庫 :静的インベントリのファイルは、INI形式またはYAML形式のいずれかで書き込むことができ、複数のインベントリファイルを持つことができます。 -i path
と入力して、使用するものを指定できます コマンドファイル内。
動的在庫 :動的インベントリは、プレイブックを実行するたびにターゲットシステムを取得するために実行されるスクリプトです。これは、クラウドにデプロイされたプレイブックターゲティングシステムを実行している場合、およびプレイブックがターゲティングするシステムが多い(または少ない)たびに役立ちます。
Ansible Towerは、いくつかの動的インベントリスクリプトを事前に構築しています。
Ansible.cfg
Ansible.cfg
Ansible構成ファイルです。 INI形式です。通常、/etc/ansible/ansible.cfg
に保存されます 。システム全体のAnsible設定を制御します。ただし、特定のプロジェクトの1つ以上の設定を変更する必要がある場合があります(つまり、画面上のstdoutの形式をJSONからYAMLに変更します)。独自のansible.cfg
を作成できます ファイルを作成し、上書きする設定のみを変更するプロジェクトディレクトリに配置します。
可変ファイル
Ansibleの変数は重要なテーマであり、理解して実践するには時間がかかります。 20を超える場所で変数を定義できます。適切な場所を選択するには、変数の優先順位を理解する必要があります。
ロール
自動化の主な目標は、手動タスクを最小限に抑え、展開アクティビティを高速化することです。さまざまなプレイ中に頻繁に実行するタスクが1つ以上あり、それらを共有の場所に保持し、必要に応じて参照したい場合は、Ansibleロールが役立ちます。 Ansible Rolesには、従う必要のあるファイル構造があります。この明確に定義された構造があると、コミュニティによって開発された役割をダウンロードして、プレイブックで使用するのに便利です。
Ansible Galaxy
Ansible Galaxyは、Ansible用の追加ツール、追加のモジュール、役割、およびプレイブックをダウンロードできるコミュニティプラットフォームです。 Ansibleを初めて使用する場合は、Ansibleには広大なコミュニティがあることを忘れないでください。 Ansibleで解決したいほとんどすべてのケースについて、コミュニティの他の誰かがおそらくそれについて考え、AnsibleGalaxyにアップロードしています。車輪の再発明を避けるために、Ansible Galaxyで必要なタスクを実行するものを探してダウンロードし、そのまま使用するか、独自の環境やアプリケーションに合わせて変更することをお勧めします。
自動化ハブ
前述のように、Ansibleにはコミュニティによって開発された膨大な数のモジュールがあります。これは確かに非常に便利に聞こえますが、市場投入までの時間に非常に敏感な企業や、Pythonコーディングスキルが不足している小さな自動化チームがある企業にとっては、コミュニティモジュールのみに依存することはあまり望ましくありません。一部は将来のAnsibleリリースでサポートされない可能性がありますが、その他は開発者によって放棄される可能性もあります。
コミュニティモジュールの使用時に見つかった問題を修正する必要がないため、Red HatはAnsibleをコミュニティがサポートする自動化ツールからエンタープライズレベルに引き上げ、いわゆるAutomationHubを提供しました。 Automation Hubは、AnsibleGalaxyの有料のサポートされているバージョンと見なすことができます。このサービスの美しさは、Ansibleのバージョンに一致する必要なモジュールを選択できることと、モジュールが期待どおりに機能していない場合にサポートを受けることができることです。
ちょっとしたアドバイス
Ansibleには、他のITテクノロジーと同様に、ベストプラクティスがあります。時間をかけて自分で開発することもできますが、ここで私のことを共有したいと思います:
- Ansibleの使用を開始します。マスターできるのは使用時のみです。
- 自動化チェーンの設計者またはアーキテクトである場合は、小さなステップから始めますが、自動化チェーンが大きくなったときに備えて、最初から将来と何をする必要があるかを常に考慮してください。 >
- タスクを自動化するためのプレイブックを作成している場合は、常にシンプルに考えて、AnsibleGalaxyを検索してください。自分がしていることが複雑すぎると感じた場合は、将来それを維持できなくなるため、間違った方向に進んでいます。
- 自動化は、他の人が一緒に作業しているという意味での1人のショーではないため、プレイブックを明確でわかりやすい方法で作成し、バージョン管理にSCMシステムを使用します。
学ぶためのリソース
Ansibleにはさまざまな学習リソースがあります。ここにいくつかあります:
本 :Ansibleには多くの本が市場に出回っていますが、私の意見では、Ansible:UpandRunningが最も完全なリファレンスです。
IRC :freenodeサーバーでは、Ansibleには、コミュニティが必要に応じて支援できるチャネルがあります。
オンラインドキュメント :Ansibleドキュメントはオンラインであり、そこにアクセスして学ぶことができます。
オンラインおよびビデオリソース :Ansibleを学ぶためのオンラインおよびビデオリソースをいくつか紹介します。
- Ansibleビデオ命令
- AnsibleのYouTubeチャンネル
- RedHatAnsibleコース
[Ansibleについてもっと知りたいですか? RedHatから無料の技術概要コースを受講してください。 Ansible Essentials:自動化の技術概要のシンプルさ。 ]
まとめ
Ansibleは、IT自動化のための最先端のツールです。習得が簡単で、アクセスしやすく、モジュールが豊富です。 Ansibleの学習だけでなく、自動化チェーンの構築やAnsibleへの移行などを計画している場合は、利用できるリソースが豊富にあります。