とんちゃんといっしょ

Cloudに関する技術とか日常とかについて書いたり書かなかったり

Ansible Configuration Fileのtransport=smartについて

今年の夏ぐらいからChefあらAnsibleに乗り換えてまあまあ使ってきました。 Chefと比較した場合のAnsibleの利点として、エージェントレスで動作するということが挙げられます。

このエージェントレスでの動作ですが、簡単に言うと毎回SSH(他のプロトコルも利用可能)でアクセスして接続先のホストでコマンドを発行して任意の操作を実行しているわけです。

しかし、タスクごとに毎回SSHのセッションを張るのでタスクが多くなってくると意外と遅い。

そこで設定transport=smartの出番です。というかこれデフォルトだとsmartらしい。

まずSSHのControlPersistについて軽く説明。 ControlePersistはOpenSSHの5.6から搭載された機能で、SSHの多重化接続の永続化をしてくれる機能らしい。 つまり、ControlPersistで指定した場合、永続化されたセッションを使うのでアクセスが早くなるという仕組みになっている。 また、ControlPersistはタムアウト設定を指定することも可能なので1mとすると1分間アクセスがない場合は自動的にセッションが切れる。

で、話をtransport=smartに戻す。 transport=smartSSHのControlPersistが利用可能(OpenSSH 5.6以降)な場合はOpenSSHを利用し、ControlPersistが使えない場合はPythonSSHライブラリであるparamikoを使うという設定らしい。

まぁ、実を言うとOpenSSH 5.6以降がデフォルトで入ってるのはEnterprise Linux 6というかRHELの6とかCentOSの6なんでそれ以外だとControlPersistが有効になっているはず。 それでも遅いなと思う人や1分以上処理に時間が掛かる(パッケージインストール等)をする人は、設定ファイルのssh_argsで以下のように設定すると幸せになれるかも。

ssh_args = -o ControlMaster=auto -o ControlPersist=30m

公式的には30分がおすすめらしい。

結論

  • 設定ファイルにtransport=smartを明示しなくてもデフォルトでsmartが適用されている
  • OpenSSH 5.6以上を使うとAnsibleのタスクが早くなる
  • Enterprise Linux 6(RHEL6, CentOS6)はデフォルトだとOpenSSH 5.6以下なので自力で何とかする
  • 処理に時間が掛かるタスクがある場合はssh_argsControlPersist=30mを設定しておく

参考