こんにちは。インフラの世界へようこそ。
現場で「Ansibleで構成管理をしよう」と息巻いたとき、最初にぶつかる壁が「ネットワークの境界線」です。踏み台サーバー(Jump Host)が1つならまだしも、セキュリティ要件が厳しい環境では、多段の踏み台を経由しなければターゲットに辿り着けないことも珍しくありません。
今日は、その複雑怪奇なネットワークを、Ansibleを使って「まるで隣のサーバーを操作するように」扱うための極意を伝授します。
—
1. なぜ「SSHの多重ホップ」で躓くのか?
AnsibleはデフォルトでSSHを使用してターゲットと通信します。しかし、踏み台サーバーを介する場合、単なる `ssh` コマンドではなく、「どうやってトンネルを掘り、その中を通るか」をAnsibleに教える必要があります。
これを適当に設定すると、ファイル転送が異常に遅くなったり、接続がタイムアウトしてイライラすることになります。そうならないための「プロの作法」を学びましょう。
—
2. 必須の基礎:`ProxyJump` vs `ProxyCommand`
SSHの設定には大きく分けて2つの流儀があります。
- ProxyJump (`-J`): OpenSSH 7.3以降で導入された現代的な方法。シンプルで直感的です。
- ProxyCommand: 古い環境や、踏み台上で複雑なスクリプトを走らせたい場合に使う、より低レイヤーな制御方法。
結論:特別な理由がない限り `ProxyJump` を使ってください。
Ansibleでの設定方法(`ansible.cfg` または `inventory`)
インベントリファイルに記述するのが最も管理しやすいです。
inventory.ini
[targets]
ターゲットホストの定義
web-server-01 ansible_host=10.0.1.5
[targets:vars]
bastion-host経由で接続するための魔法の呪文
ansible_ssh_common_args=’-o ProxyJump=user@bastion-host’
これだけで、Ansibleは「まずbastion-hostにSSHし、そこからターゲットへジャンプする」という動きを自動化してくれます。
—
3. 【深淵】多段踏み台環境(Multi-hop)の攻略法
セキュリティが強固な現場では、`bastion-1` → `bastion-2` → `target` と3段ジャンプが必要なこともあります。この場合、`ProxyJump` をカンマ区切りでつなぐのが最強の解決策です。
多段ホップの記述例
ansible_ssh_common_args=’-o ProxyJump=user@bastion-1,user@bastion-2′
これだけで、Ansibleの裏側でSSHが多段トンネルを自動構築してくれます。もう個別にSSH設定ファイル(`~/.ssh/config`)をこねくり回す必要はありません。
—
4. 現場で震えるほど役立つ「パフォーマンス高速化」の裏技
多段ホップ環境でAnsibleを動かすと、ファイル転送(`copy`モジュールなど)が遅いと感じることがあります。これは、SSH接続を毎回再利用しているからです。
以下の設定を `ansible.cfg` に追加してください。これができると「デキるエンジニア」の仲間入りです。
[ssh_connection]
SSH接続を使い回す設定(ControlMaster)
これにより、多段接続でも2回目以降の通信が劇的に速くなります
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o ForwardAgent=yes
pipelining = True
- ControlMaster/ControlPersist: 1度開いたコネクションを維持します。多段ホップでのハンドシェイクのオーバーヘッドを劇的に削減します。
- pipelining: これを `True` にすると、Ansibleのモジュール実行時にスクリプトを一時ファイルに書き出さず、SSHのパイプ経由で直接実行します。転送量とI/Oを減らす、現場必須の最適化設定です。
—
5. HelloWorld的動作確認
まずは、設定が正しく効いているか確認しましょう。いきなりplaybookを流すのではなく、疎通確認から入るのが鉄則です。
-v をつけて詳細なSSHのログを見るのがコツです
ansible targets -i inventory.ini -m ping -v
もしここでエラーが出るなら、まずは `ssh -J user@bastion-1,user@bastion-2 user@target` をターミナルで直打ちし、SSH鍵が正しく渡っているか確認してください。Ansibleは、その「手元のSSH」の延長線上にしかありません。
—
最後に:先輩からのアドバイス
「踏み台経由の自動化」は、一見複雑に見えますが、一度この仕組みをマスターすれば、どんなにネットワークが分断された堅牢な環境でも、あなたは自由自在にインフラを操作できるようになります。
まずは1段の `ProxyJump` から始めてみてください。それが成功すれば、多段ホップも「ただのカンマ区切り」に過ぎないことに気づくはずです。
インフラ自動化の旅はまだ始まったばかりです。一緒に、ストレスフリーな運用環境を作っていきましょう!応援しています。