Ansibleは、IT環境向けの完全な自動化ソリューションです。 Ansibleを使用して、LinuxおよびWindowsサーバーの構成を自動化し、サービスプロビジョニングを調整し、クラウド環境を展開し、ネットワークデバイスを構成することもできます。
Ansibleモジュールはシステム上のアクションを抽象化するため、実装の詳細について心配する必要はありません。目的の状態を説明するだけで、Ansibleはターゲットシステムがそれに一致することを保証します。
このモジュールの可用性はAnsibleの主な利点の1つであり、「バッテリーが含まれている」Ansibleと呼ばれることがよくあります。確かに、多数のタスクのモジュールを見つけることができます。これはすばらしいことですが、初心者から、どこから始めればよいかわからないとよく耳にします。
モジュールの選択は、要件とAnsibleで自動化しようとしているものにのみ依存しますが、AnsibleforLinuxシステム自動化を開始するために必要なモジュールのトップ10を以下に示します。
1。コピー
コピーモジュールを使用すると、Ansibleコントロールノードからターゲットホストにファイルをコピーできます。ファイルのコピーに加えて、所有権、権限、およびSELinuxラベルを宛先ファイルに設定できます。コピーモジュールを使用して「今日のメッセージ」構成ファイルをターゲットホストにコピーする例を次に示します。
- name: Ensure MOTD file is in place
copy:
src: files/motd
dest: /etc/motd
owner: root
group: root
mode: 0644
それほど複雑でないコンテンツの場合は、次のように、ローカルファイルがなくても、コンテンツを宛先ファイルに直接コピーできます。
- name: Ensure MOTD file is in place
copy:
content: "Welcome to this system."
dest: /etc/motd
owner: root
group: root
mode: 0644
このモジュールは同じように機能します。つまり、同じファイルが同じコンテンツと権限でまだ配置されていない場合にのみ、ファイルをコピーします。
コピーモジュールは、静的コンテンツを含む少数のファイルをコピーするための優れたオプションです。多数のファイルをコピーする必要がある場合は、同期モジュールを確認してください。動的コンテンツを含むファイルをコピーするには、template
をご覧ください。 次のモジュール。
2。テンプレート
テンプレートモジュールは、copy
と同様に機能します モジュールですが、ターゲットホストにコピーする前に、Jinja2テンプレート言語を使用してコンテンツを動的に処理します。
たとえば、次のように、ターゲットシステム名を表示する「今日のメッセージ」テンプレートを定義します。
$ vi templates/motd.j2
Welcome to {{ inventory_hostname }}.
次に、template
を使用してこのテンプレートをインスタンス化します このようなモジュール:
- name: Ensure MOTD file is in place
template:
src: templates/motd.j2
dest: /etc/motd
owner: root
group: root
mode: 0644
ファイルをコピーする前に、Ansibleはテンプレートを処理して変数を補間し、ターゲットのホストシステム名に置き換えます。たとえば、ターゲットシステム名がrh8-vm03
の場合 、結果ファイルは次のとおりです。
Welcome to rh8-vm03.
copy
モジュールは、content
を使用するときに変数を補間することもできます パラメータ、template
モジュールを使用すると、テンプレートファイルを作成して柔軟性を高めることができます。これにより、for
などのより複雑なコンテンツを定義できます。 ループ、if
条件など。完全なリファレンスについては、Jinja2のドキュメントを確認してください。
このモジュールもべき等であり、ターゲットシステムのコンテンツがすでにテンプレートのコンテンツと一致している場合はファイルをコピーしません。
3。ユーザー
ユーザーモジュールを使用すると、ターゲットシステムでLinuxユーザーを作成および管理できます。このモジュールにはさまざまなパラメータがありますが、最も基本的な形式では、このモジュールを使用して新しいユーザーを作成できます。
たとえば、ユーザーricardo
を作成するには UID 2001の場合、グループusers
の一部 およびwheel
、およびパスワードmypassword
、user
を適用します これらのパラメータを持つモジュール:
- name: Ensure user ricardo exists
user:
name: ricardo
group: users
groups: wheel
uid: 2001
password: "{{ 'mypassword' | password_hash('sha512') }}"
state: present
このモジュールはべき等になろうとしますが、すべてのオプションについてそれを保証することはできません。たとえば、前のモジュールの例を再度実行すると、パスワードが定義された値にリセットされ、実行のたびにシステム内のユーザーが変更されます。この例をべき等にするには、パラメーターupdate_password: on_create
を使用します。 、Ansibleがユーザーの作成時にのみパスワードを設定し、その後の実行では設定しないようにします。
このモジュールを使用して、パラメータstate: absent
を設定することにより、ユーザーを削除することもできます。 。
user
モジュールには、複数のユーザーの側面を管理するための多くのオプションがあります。詳細については、モジュールのドキュメントを参照してください。
4。パッケージ
パッケージモジュールを使用すると、オペレーティングシステムの標準パッケージマネージャーを使用して、ターゲットシステムからソフトウェアパッケージをインストール、更新、または削除できます。
たとえば、ApacheWebサーバーをRedHat Linuxマシンにインストールするには、次のようなモジュールを適用します。
- name: Ensure Apache package is installed
package:
name: httpd
state: present
Ansibleの詳細
- Ansibleのクイックスタートガイド
- Ansibleチートシート
- 無料のオンラインコース:Ansibleの必需品
- Ansibleをダウンロードしてインストールする
- eBook:自動化された企業
- eBook:DevOps用のAnsible
- 無料のAnsible電子書籍
- 最新のAnsible記事
このモジュールは配布に依存せず、yum/dnf
などの基盤となるパッケージマネージャーを使用して機能します。 RedHatベースのディストリビューションおよびapt
の場合 Debian用。そのため、パッケージのインストールや削除などの基本的なタスクのみを実行します。パッケージマネージャーのオプションをさらに制御する必要がある場合は、ターゲットディストリビューション用の特定のモジュールを使用してください。
また、モジュール自体は異なるディストリビューションで動作しますが、それぞれのパッケージ名は異なる可能性があることに注意してください。たとえば、Red Hatベースのディストリビューションでは、ApacheWebサーバーのパッケージ名はhttpd
です。 、Debianでは、apache2
。プレイブックがそれに対処していることを確認してください。
このモジュールはべき等であり、現在のシステム状態が目的の状態と一致する場合は機能しません。
5。サービス
サービスモジュールを使用して、必要なinitシステムを使用してターゲットシステムサービスを管理します。たとえば、systemd。
最も基本的な形式では、サービス名と目的の状態を指定するだけです。たとえば、sshd
を開始するには サービス、次のようなモジュールを使用します:
- name: Ensure SSHD is started
service:
name: sshd
state: started
パラメータenabled: yes
を指定することで、ターゲットシステムの起動時にサービスが自動的に開始されるようにすることもできます。 。
package
と同じように モジュール、service
モジュールは柔軟性があり、さまざまなディストリビューションで機能します。特定のターゲットinitシステムを微調整する必要がある場合は、対応するモジュールを使用してください。たとえば、モジュールsystemd
。
これまでに見た他のモジュールと同様に、service
モジュールもべき等です。
6。 Firewalld
Firewalldモジュールを使用して、firewalld
でシステムファイアウォールを制御します Red Hatベースのディストリビューションなど、それをサポートするシステム上のデーモン。
たとえば、ポート80でHTTPサービスを開くには、次のように使用します。
- name: Ensure port 80 (http) is open
firewalld:
service: http
state: enabled
permanent: yes
immediate: yes
port
を使用して、サービス名の代わりにカスタムポートを指定することもできます パラメータ。この場合、必ずプロトコルも指定してください。たとえば、TCPポート3000を開くには、次を使用します。
- name: Ensure port 3000/TCP is open
firewalld:
port: 3000/tcp
state: enabled
permanent: yes
immediate: yes
このモジュールを使用して、他のfirewalld
を制御することもできます ゾーンや複雑なルールなどの側面。オプションの包括的なリストについては、モジュールのドキュメントを確認してください。
7。ファイル
ファイルモジュールを使用すると、ファイルとディレクトリの状態を制御して、権限、所有権、SELinuxラベルを設定できます。
たとえば、file
を使用します ディレクトリを作成するモジュール/app
ユーザーが所有するricardo
、所有者とグループのusers
の読み取り、書き込み、および実行のアクセス許可があります :
- name: Ensure directory /app exists
file:
path: /app
state: directory
owner: ricardo
group: users
mode: 0770
このモジュールを使用して、パラメータrecurse: yes
を使用して、ディレクトリのファイルプロパティを再帰的に設定することもできます。 または、パラメータstate: absent
を使用してファイルとディレクトリを削除します 。
このモジュールは、ほとんどのパラメーターに対してべき等で動作しますが、一部のパラメーターでは、毎回ターゲットパスを変更する場合があります。詳細については、ドキュメントを確認してください。
8。 lineinfile
lineinfileモジュールを使用すると、既存のファイルの1行を管理できます。ファイルの残りの部分を変更したり、構成ファイル全体をコピーしたりせずに、既存のファイルの対象となる構成を更新すると便利です。
たとえば、次のようにhostsファイルに新しいエントリを追加します。
- name: Ensure host rh8-vm03 in hosts file
lineinfile:
path: /etc/hosts
line: 192.168.122.236 rh8-vm03
state: present
このモジュールを使用して、パラメータregexp
を適用することにより、既存の行を変更することもできます。 置き換える既存の行を探します。たとえば、sshd_config
を更新します PermitRootLogin yes
の行を変更してルートログインを防止するファイル PermitRootLogin no
へ :
- name: Ensure root cannot login via ssh
lineinfile:
path: /etc/ssh/sshd_config
regexp: '^PermitRootLogin'
line: PermitRootLogin no
state: present
注:この変更を有効にするには、サービスモジュールを使用してSSHDサービスを再起動します。
このモジュールもべき等ですが、行を変更する場合は、不必要な変更を避けるために、正規表現が元の状態と更新された状態の両方に一致することを確認してください。
9。アーカイブ解除
unarchiveモジュールを使用して、tar
などのアーカイブファイルの内容を抽出します またはzip
ファイル。デフォルトでは、アーカイブファイルを抽出する前にコントロールノードからターゲットマシンにコピーします。パラメータremote_src: yes
を指定して、この動作を変更します 。
たとえば、.tar.gz
のコンテンツを抽出します 次の構文でターゲットホストにすでにダウンロードされているファイル:
- name: Extract contents of app.tar.gz
unarchive:
src: /tmp/app.tar.gz
dest: /app
remote_src: yes
一部のアーカイブテクノロジでは、ターゲットシステムで追加のパッケージを使用できるようにする必要があります。たとえば、パッケージunzip
.zip
を抽出するには ファイル。
使用するアーカイブ形式に応じて、このモジュールは完全に機能する場合と機能しない場合があります。不要な変更を防ぐために、パラメータcreates
を使用できます アーカイブの内容を抽出するときにこのモジュールが作成するファイルまたはディレクトリを指定します。このファイルまたはディレクトリがすでに存在する場合、モジュールはコンテンツを再度抽出しません。
10。コマンド
コマンドモジュールは、ターゲットシステムで任意のコマンドを実行できる柔軟なモジュールです。このモジュールを使用すると、コマンドがあれば、ターゲットシステム上でほとんどすべてのことを実行できます。
command
にもかかわらず モジュールは柔軟で強力なので、注意して使用する必要があります。別の適切なモジュールが利用可能な場合は、コマンドモジュールを使用してタスクを実行することは避けてください。たとえば、できた command
を使用してユーザーを作成します useradd
を実行するモジュール コマンドですが、すべき user
を使用する 代わりに、モジュールは多くの詳細を抽象化するため、コーナーケースを処理し、必要な場合にのみ構成が変更されるようにします。
モジュールが利用できない場合、またはカスタムスクリプトやプログラムを実行する場合は、command
モジュールはまだ素晴らしいリソースです。たとえば、このモジュールを使用して、ターゲットマシンにすでに存在するスクリプトを実行します。
- name: Run the app installer
command: "/app/install.sh"
デフォルトでは、Ansibleはコマンドを毎回実行するため、このモジュールはべき等ではありません。 command
を作成するには モジュールのべき等、when
を使用できます 適切な条件が存在する場合、またはcreates
の場合にのみコマンドを実行する条件 unarchiveモジュールの例と同様の引数。
次は何ですか?
これらのモジュールを使用すると、構成ファイルのコピー、テンプレート作成、変更、ユーザーの作成、パッケージのインストール、システムサービスの開始、ファイアウォールの更新などにより、Linuxシステム全体を構成できます。
Ansibleを初めて使用する場合は、プレイブックを作成してこれらのモジュールを組み合わせてシステムを自動化する方法に関するドキュメントを確認してください。これらのタスクの一部は、機能するために昇格された特権で実行する必要があります。詳細については、特権昇格のドキュメントを確認してください。
Ansible 2.10以降、モジュールはコレクションに編成されています。このリストのほとんどのモジュールは、ansible.builtin
の一部です。 コレクションであり、デフォルトでAnsibleで使用できますが、一部は他のコレクションの一部です。コレクションのリストについては、Ansibleのドキュメントを確認してください。