背景

Ansibleでターゲットホストに何かをコピーするとき
copyモジュールを使ってる人はとても多いと思います。

しかし恐ろしいぐらい遅いため、ansible copy slow何かで調べると
色々対策が書かれている記事があると思います。

まあそれを試しても劇的な改善はなく、結果として意味のないものです。

 

Synchronizeモジュールを使う

Ansible – synchronize

Copyモジュールと同等のことをやってみます。

1. ターゲットホストにファイルを配置する

- name: Copy Web API to /home/node
synchronize:
src: Web-API
dest: /home/node
recursive: yes
use_ssh_args: yes

 

2. パーミッションを変更する

- name: Change permission to /home/node/Web-API
file:
path: /home/node/Web-API
owner: node
group: node
recurse: yes
mode: 0755

Synchronizeモジュールにもownergroupオプションはあるんですが
これは Ansible 実行マシンに存在するユーザー、グループで且つ、
ターゲットホストにも存在しないといけないという制約があるので、
別タスクでパーミッション等を変更する必要があります。

 

比較

全部で350行ぐらいある Playbook の中のcopyモジュール版と
Synchronizeモジュール版で比べた結果です。

Copy

real 4m25.575s

Synchronize

real 2m12.755s

圧倒的