25 Sep 2015, 23:27

Ansibleを踏み台サーバ越しに実行する方法

Ansibleを使ってどんどん構築の自動化を進めている。
すすめていくと、Ansibleを実行する端末からネットワーク的に直接届かないサーバに対してプロビジョニングしたいケースがでてくる。そこで、踏み台サーバ越しにAnsibleでプロビジョニングしていくことを試してみる。

環境

KVMを使って仮想のゲストサーバを立てたが、
ゲストサーバはホストサーバと通信する用の(外に出る場合にはNAT通信)IPアドレスしか持っていない状況で、 Ansibleの実行対象としたかったのが背景。

ホストサーバに直接Ansibleをインストールして実行するわけにもいかず、ホストサーバを踏み台にして、 Ansibleを実行することがやりたかったこと。

f:id:mosuke5:20150925232414p:plain

SSHの設定ファイルを作る

"Ansibleで" と書いたが要はSSHです。Ansibleのコネクションの方法はいくつかありますが、SSHを使っている。
まずはSSHで踏み台サーバを経由してAnsible実行対象サーバへ接続できるように準備しました。
技術を検証するときの重要なポイントですが、その仕組みが何で実現されているかわかると、このように検証項目を分解することができてデバッグなどにも役立ちますね。 これはいわゆる「多段SSH」というやつで、以前にもブログに書いた内容です。

一般的には~/.ssh/configにこういった設定は書いたりもしますが、
Ansible実行の場合、特定の端末に依存したくなかったので、
ansible-playbookのレポジトリに別途ファイルを作るって管理することにしました。
なぜ特定の端末に依存したくなかったかというと、一人で利用する場合には良いのですが、複数人での運用環境の場合、ことなる環境でAnsibleのplaybookを実行しなければいけないことがあったからです。

## sshconfigという名前のファイルにした
Host ansible-target
    HostName 192.168.33.10
    User xxxxx
    ProxyCommand ssh -W %h:%p [email protected] 

上記のファイルを使って多段SSHできることを確認します。 こちらで、問題なくターゲットのホストにSSH接続できれば問題なしです。

$ ssh -F sshconfig ansible-target

Ansible実行時にSSH設定ファイルを利用する

ここまで来たらとても簡単です。
Ansibleには、Ansible実行時の設定を管理するansible.cfgという設定ファイルを利用することができます。非常に便利なので活用方法は覚えておくといいです。
そのansible.cfgに下記を追記し、ansible実行時に上記のsshconfigを読み込まれるようにすることで踏み台越しにAnsibleを実行することができます。

# ansible.cfg
[ssh_connection]
ssh_args = -F sshconfig 

まとめ

Ansibleを使った自動化をどんどん進めていくといろんな場面に遭遇します。 その1つとしてAnsibleを実行する端末からネットワーク的に直接届かないサーバへのプロビジョニングです。

今回は、いわゆる多段SSHを使った踏み台サーバ越しでのAnsibleの実行方法について解説しました。
Ansibleの設定自体も重要ですが、その機能が実現している方法がわかると、仕組みの理解やデバッグの手助けになるでしょう。

関連する記事はこちら
  • Ansible、実行速度高速化の実験。ControlMasterとPipeliningについて (2015/12/01)
  • Kubernetes上のリソースをAnsibleで管理する (2019/08/21)
  • AnsibleのTerraform moduleを考察してみる (2019/03/25)
  • Vagrant×Ansible環境の3つのスタイルとそのメリット・デメリットについて (2016/01/25)
  • インフラのデプロイとテストを同時実行できるようにする (2015/12/17)
  • comments powered by Disqus
    このエントリーをはてなブックマークに追加