Ansible Fetch モジュールを使って複数のファイルを取得する方法

AnsibleBeginner
オンラインで実践に進む

はじめに

人気のあるオープンソースの自動化ツールである Ansible には、「Fetch」と呼ばれる強力なモジュールがあり、これを使うとリモートホストからファイルを簡単に取得できます。このチュートリアルでは、Ansible Fetch モジュールを使って複数のファイルを取得する方法を探り、インフラストラクチャ管理を効率化するための基本的な技術と高度な技術の両方をカバーします。

Ansible Fetch モジュールの理解

Ansible Fetch モジュールは、リモートホストからファイルを取得してコントロールマシンにコピーするための強力なツールです。これは、分析、バックアップ、トラブルシューティングの目的で、複数のリモートシステムからデータ、ログ、または設定ファイルを収集する必要がある場合に特に役立ちます。

Ansible Fetch モジュールとは?

Ansible Fetch モジュールは、Ansible に組み込まれたモジュールで、リモートホストからコントロールマシンにファイルを安全にコピーする方法を提供します。リモートホストへの接続を確立し、指定されたファイルを見つけてから、コントロールマシンに戻すことで動作します。

Ansible Fetch モジュールの使用シーン

Ansible Fetch モジュールは、以下のようなさまざまなシナリオで使用できます。

  • 分析のためにリモートサーバーからログファイルを収集する
  • リモートシステムから設定ファイルをバックアップする
  • リモートホストから機密データまたは資格情報を取得する
  • 複数のホストからシステム情報(例:ハードウェア仕様、ソフトウェアバージョン)を収集する

Ansible Fetch モジュールの使い方

Ansible Fetch モジュールを使用するには、リモートホスト上のソースファイルパスとコントロールマシン上の宛先ディレクトリを指定する必要があります。以下は、リモートホストからファイルを取得する方法を示すサンプルの playbook です。

- hosts: all
  tasks:
    - name: Fetch a file from remote host
      ansible.builtin.fetch:
        src: /path/to/file.txt
        dest: /local/path/{{ inventory_hostname }}/file.txt
        flat: yes

この例では、ansible.builtin.fetchモジュールを使用して、リモートホスト上の/path/to/file.txtにあるファイルをコントロールマシン上の/local/path/{{ inventory_hostname }}/file.txtディレクトリにコピーしています。flat: yesオプションにより、サブディレクトリを作成せずに、ファイルを直接宛先ディレクトリにコピーできます。

複数のファイルの取得

Ansible Fetch モジュールを使用して、リモートホストから複数のファイルを取得することもできます。これは、ループを使用するか、srcパラメータに複数のソースファイルを指定することで達成できます。次のセクションでこれについて説明します。

Ansible を使って複数のファイルを取得する

ループを使って複数のファイルを取得する

リモートホストから複数のファイルを取得するには、Ansible の playbook でループを使うことができます。以下は例です。

- hosts: all
  tasks:
    - name: Fetch multiple files from remote host
      ansible.builtin.fetch:
        src: "{{ item }}"
        dest: /local/path/{{ inventory_hostname }}/{{ item | basename }}
        flat: yes
      loop:
        - /path/to/file1.txt
        - /path/to/file2.txt
        - /path/to/file3.txt

この例では、ansible.builtin.fetchモジュールをループ内で使用して、リモートホストから 3 つの異なるファイルを取得しています。srcパラメータは、ループの各反復でファイルパスを指定するために{{ item }}変数を使用しています。destパラメータは、{{ inventory_hostname }}{{ item | basename }}変数を使ってローカルファイルパスを構築し、ファイルが正しい名前で保存されるようにしています。

リスト変数を使ってファイルを取得する

代わりに、取得するファイルのリストを変数に格納して、その変数をsrcパラメータで使用することもできます。ファイルのリストが動的である場合や、別のファイルに保存されている場合に便利です。以下は例です。

- hosts: all
  vars:
    files_to_fetch:
      - /path/to/file1.txt
      - /path/to/file2.txt
      - /path/to/file3.txt

  tasks:
    - name: Fetch multiple files from remote host
      ansible.builtin.fetch:
        src: "{{ item }}"
        dest: /local/path/{{ inventory_hostname }}/{{ item | basename }}
        flat: yes
      loop: "{{ files_to_fetch }}"

この例では、取得するファイルのリストがfiles_to_fetch変数に格納されており、それがansible.builtin.fetchモジュールのloopパラメータで使用されています。

ワイルドカードを使ってファイルを取得する

Ansible Fetch モジュールは、srcパラメータでワイルドカードの使用もサポートしています。特定のパターンに一致する複数のファイルを取得する必要がある場合に便利です。以下は例です。

- hosts: all
  tasks:
    - name: Fetch log files from remote host
      ansible.builtin.fetch:
        src: /var/log/*.log
        dest: /local/path/{{ inventory_hostname }}/logs/
        flat: no

この例では、srcパラメータはワイルドカード*.logを使って、リモートホストの/var/logディレクトリにあるすべてのログファイルを取得しています。flat: noオプションにより、ローカルの宛先パスにディレクトリ構造が維持されます。

これらの技術を使うことで、Ansible Fetch モジュールを使ってリモートホストから効果的に複数のファイルを取得でき、インフラストラクチャ全体のデータの管理と分析が容易になります。

高度な取得技術とベストプラクティス

機密データの取り扱い

パスワードや API キーなど、機密情報を含む可能性のあるファイルを取得する際には、データを保護するための適切な対策を講じることが重要です。Ansible は、playbook の実行中に機密データがログに記録されないようにするためのno_logオプションを提供しています。以下は例です。

- hosts: all
  tasks:
    - name: Fetch sensitive file
      ansible.builtin.fetch:
        src: /path/to/sensitive_file.txt
        dest: /local/path/{{ inventory_hostname }}/sensitive_file.txt
        flat: yes
      no_log: true

no_log: trueを設定することで、取得したファイルの内容が Ansible の出力にログとして記録されたり表示されたりしないことを確認できます。

取得パフォーマンスの最適化

多数のファイルや大きなファイルを取得する際には、Ansible Fetch モジュールのパフォーマンスを最適化することが重要です。以下は検討すべきいくつかのベストプラクティスです。

  1. 並列処理の利用:Ansible の組み込みの並列処理機能を利用して、複数のホストから同時にファイルを取得し、全体の処理速度を向上させることができます。これを行うには、Ansible の設定でforks設定を増やすことができます。
  2. ファイルの圧縮:取得する前にファイルを圧縮することを検討してください。これにより、転送時間を大幅に短縮できます。取得する前に、archiveモジュールを使ってファイルの圧縮アーカイブを作成することができます。
  3. 取得範囲の制限:必要なファイルのみを取得し、全体のディレクトリや不要なファイルを取得しないようにします。これにより、転送するデータ量を削減できます。
  4. チェックサム検証の利用:Ansible の Fetch モジュールは、取得したファイルの整合性を確認するためのチェックサム検証をサポートしています。これにより、転送中の問題を特定するのに役立ちます。
- hosts: all
  tasks:
    - name: Fetch file with checksum verification
      ansible.builtin.fetch:
        src: /path/to/file.txt
        dest: /local/path/{{ inventory_hostname }}/file.txt
        checksum: sha256
        flat: yes

これらの高度な技術とベストプラクティスに従うことで、Ansible Fetch モジュールを使って効果的かつ安全に複数のファイルを取得し、Ansible のワークフローのパフォーマンスを最適化することができます。

まとめ

このチュートリアルが終わると、Ansible Fetch モジュールと、それを使ってリモートホストから複数のファイルを取得する方法について、包括的な理解を得ることができます。ファイル転送のワークフローを最適化するためのベストプラクティスや高度な戦略を学び、Ansible で動作するインフラストラクチャを効率的に管理できるようになります。