0Pricing
Ansible Academy · レッスン

オーケストレーションのための delegate_to と run_once

複数のホストを対象とするタスクを1台で実行します。

「オーケストレーションのための delegate_to と run_once」はCoddyKit上の無料Ansible Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAnsible Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ansible Academyコースには全4レッスンが含まれています。

タスクは思った場所で実行されるとは限りません

デフォルトでは、各タスクは対象ホストで実行されます。ただし、オーケストレーションでは、タスクをまったく別の場所で実行する必要がある場合があります。🎯

delegate_to を使う

delegate_to キーワードを使うと、現在のホストとは別のホストでタスクを実行しながら、そのホストの変数を引き続き使用できます。

- name: Add web node to load balancer
  community.general.haproxy:
    host: "{{ inventory_hostname }}"
    state: enabled
  delegate_to: lb01

典型的な使用例

Webノードをループ処理しながら、ロードバランサーの変更をLBホストに委任します。プレイはノードごとに実行されますが、アクションはLB上で実行されます。

localhost に委任する

localhost に委任して、管理ノード上でタスクを実行します。APIの呼び出しや、1か所からの通知送信に便利です。

- name: Notify chat
  ansible.builtin.uri:
    url: "{{ webhook }}"
    method: POST
  delegate_to: localhost

変数は元のホストに紐づいたままです

委任によって変わるのはタスクの実行場所であり、参照するファクトの所属先ではありません。inventory_hostname は委任先ではなく、元の対象ホストを示します。

run_once を使う

run_once キーワードを使うと、ホストごとに1回ではなく、バッチ全体に対してタスクを1回だけ実行できます。Ansibleは最初のホストを選んで実行します。

- name: Run database migration
  ansible.builtin.command: ./migrate.sh
  run_once: true

run_once が重要な理由

マイグレーションやリーダー選出のように、1回だけ実行すべきアクションがあります。run_once を使うと、すべてのホストが同じ共有ステップを繰り返すのを防げます。

2つを組み合わせる

run_once と delegate_to を組み合わせると、1つの選択したホスト上で1回だけアクションを実行できます。たとえば、1台のアプリノードからマイグレーションを実行できます。

- name: Migrate db once
  ansible.builtin.command: ./migrate.sh
  run_once: true
  delegate_to: app01

結果は共有されます

run_once を使うと、registered の結果はバッチ内のすべてのホストで共有されます。すべてのホストが、その1回の実行結果を参照できます。

- ansible.builtin.command: cat /etc/version
  run_once: true
  register: ver

委任先からファクトを収集する

収集したファクトを現在のホストではなく委任先ホストに紐づけたい場合は、delegate_facts を使用します。デフォルトでは無効です。

設定だけでなくオーケストレーション

これらのキーワードを組み合わせると、ホストごとの設定を本格的なオーケストレーションへと変えられます。1つの場所から、ホスト群全体にわたるアクションを調整できるのです。

確認問題

これらのオーケストレーション用キーワードを確認しましょう。

まとめ

delegate_to は別のホストでタスクを実行するために使い、run_once はバッチごとに1回だけ実行するために使います。これらがオーケストレーションの基本です。✅

よくある質問

「オーケストレーションのための delegate_to と run_once」レッスンは無料ですか?

はい。「オーケストレーションのための delegate_to と run_once」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ansible Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ansible Academyコースには全4レッスンが含まれています。

「オーケストレーションのための delegate_to と run_once」で何を学びますか?

複数のホストを対象とするタスクを1台で実行します。 ブラウザで直接実行するハンズオンコードでAnsible Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Ansible Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAnsible Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「オーケストレーションのための delegate_to と run_once」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAnsible Academyレッスンでコードを書いて実行できますか?

はい。すべてのAnsible Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. cli_command によるネットワークデバイスの自動化
  2. オーケストレーションのための delegate_to と run_once
  3. Web・App・DB 層を連携させる
  4. Load Balancer からの切り離しと再有効化
← Ansible Academyに戻る