【実務・中級編】AnsibleでAWS Systems Manager(SSM)セッションマネージャー経由の管理を実現する踏み台レス構築術 – インフラ構成管理(IaC)活用バイブル

踏み台サーバーは「負債」である。Ansible × SSM Session Manager で構築する境界防御ゼロの自動化環境

インフラエンジニア諸君。まだ「踏み台サーバー(Bastion Host)」を維持管理しているのか?
SSH鍵のローテーション、パッチ当て、そして何より「踏み台経由のAnsible実行」という、遅延と不安定さを招くアーキテクチャに甘んじているなら、今すぐそのレガシーを捨てろ。

AWS環境において、SSM Session Manager(以下SSM)を介してAnsibleを実行することは、単なる「セキュリティ強化」ではない。「SSHのポート開放という地雷を埋めずに、プライベートな世界へ直接リーチする」という、運用のパラダイムシフトだ。

本稿では、プロの現場で即座に採用すべき、SSM経由の疎通設計と、Ansible運用を劇的に加速させる極意を伝授する。

—

1. 接続の深淵:SSH over SSM の仕組みを理解する

SSHポート(22)をSecurity Groupで全閉鎖したままAnsibleを動かす。その正体は、`ProxyCommand`を利用したトンネル構築だ。

設定すべき `~/.ssh/config` のベストプラクティス

SSHの設定ファイルに以下の設定を書き込むことで、AWS CLIがSSMを通じて通信をラップしてくれる。

AWS SSM経由の接続設定
host i- mi-
ProxyCommand sh -c “aws ssm start-session –target %h –document-name AWS-StartSSHSession –parameters ‘portNumber=%p'”
IdentityFile ~/.ssh/your-key.pem # 必要に応じて。SSM使用時は公開鍵認証不要な場合も多い
StrictHostKeyChecking no
UserKnownHostsFile /dev/null

この設定により、`ansible-playbook` は「普通のSSH」として通信を行い、バックグラウンドではSSMの暗号化されたトンネルを流れる。踏み台サーバーの管理コストはこれでゼロになる。

—

2. チーム開発の生産性を底上げする「神」構成

Ansibleのディレクトリ構造が汚いチームは、例外なく崩壊する。IaCのコードは「誰が読んでも即座に意図が伝わる」ドキュメントでなければならない。

推奨ディレクトリ構造

.
├── ansible.cfg # プロジェクト単位の最適化
├── inventory/
│ ├── aws_ec2.yml # AWS Dynamic Inventory(必須)
│ └── group_vars/
├── roles/ # 再利用可能なモジュール群
└── site.yml # エントリーポイント

チーム開発のための `ansible.cfg` 設定

[defaults]
実行速度を極限まで引き上げる
pipelining = True
forks = 20
冪等性を担保するために、無駄なログを抑止
stdout_callback = yaml

[ssh_connection]
SSM経由の接続を最適化
ssh_args = -o ControlMaster=auto -o ControlPersist=60s

  • `pipelining = True`: SSHの回数を減らし、モジュール実行速度を劇的に向上させる。これだけで実行時間が半分になることも珍しくない。

—

3. 実践:AWS Dynamic Inventory の完全自動化

IPアドレスをハードコードするような前時代的な運用は今すぐ廃止せよ。AWSのタグで動的に管理するのだ。

`inventory/aws_ec2.yml`

plugin: aws_ec2
regions:

  • ap-northeast-1

filters:
tag:Environment: production
SSMを使うための重要な設定
compose:
ansible_host: instance_id

この設定により、`ansible-playbook -i inventory/aws_ec2.yml` を叩くだけで、タグ付けされた全てのインスタンスが自動的にターゲットとなる。EC2が増減しても、 inventory を書き換える必要は一切ない。

—

4. 現場で震えるほど役立つ「小技」と「プラグイン」

1. ターミナル操作の劇的短縮:`fzf` + `ansible-inventory`

対象ホストを選択する際、毎回リストを眺めるのは非効率だ。以下のコマンドをエイリアスにしておけ。

fzfで動的にホストを選択して実行
ansible-playbook site.yml -l $(ansible all –list-hosts | fzf)

これだけで、目的のノードまで0.5秒で到達できる。

2. 必須プラグイン:`ansible-lint`

CI/CDパイプラインに必ず組み込め。YAMLの構文ミスだけでなく、「非効率なループの使用」や「セキュリティリスクのある書き方」を自動で指摘してくれる。 チームメンバーのコード品質を一定に保つための最強の門番だ。

3. デバッグの救世主:`mitogen`

Ansibleの実行速度に限界を感じたら、迷わず `mitogen for Ansible` を導入せよ。SSHのオーバーヘッドを極限まで排除し、Pythonの実行を最適化する。大規模環境でのプロビジョニング時間が劇的に短縮される。

—

結論:IaCは「美学」である

踏み台サーバーを排除し、SSMで閉域網をコントロールする。これは単なる技術選択ではなく、「インフラをコードという純粋な論理体系に落とし込む」というエンジニアリングの美学だ。

自動化の先には、常に「次なる課題」がある。しかし、まずはここから始めよう。無駄なコネクションを排除し、冪等性の高いコードを書き、チーム全体の生産性を最大化する。それが、我々SREに課せられた責務だ。

さあ、今すぐ `ansible.cfg` を開き、あなたのインフラを「真のコード」へ進化させろ。

タイトルとURLをコピーしました