creating-ansible-playbooks について
インフラ自動化向けに、Ansible のプレイブック、ロール、インベントリ、テンプレートの作成を支援するスキルです。開発者や運用担当者がサーバー構築、アプリ配備、設定管理、セキュリティ強化を行う際に、検証や冪等性の確認も案内します。
主な機能
- 01構築・配備用プレイブックの生成
- 02再利用可能な Ansible ロール
- 03インベントリと環境変数の設定
- 04Jinja2 設定テンプレートの生成
- 05lint・ドライラン・冪等性の検証
活用シーン
- 01サーバーの構築とサービス設定
- 02再利用可能なロールによるアプリ配備
- 03サーバー群の SSH 設定強化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jeremylongshore/ tons-of-skills-marketplace --skill creating-ansible-playbooksインストール後、Claude Code で/creating-ansible-playbooksを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/playbook_template.ymlREADME.mdvalidation_rules.ymlreferences/README.mdscripts/README.mdsecure_playbook.pytest_playbook.shvalidate_playbook.py詳細
Ansible Playbook の作成
概要
インフラストラクチャ自動化向けに、本番環境で使用できる Ansible playbook、ロール、インベントリを生成します。SSH ベースのエージェントレス自動化を使用して、サーバーのプロビジョニング、アプリケーションのデプロイ、サービスの設定、マシン群全体にわたる望ましい状態の適用に対応します。
前提条件
- Ansible 2.14+ がインストールされていること(
ansible --version) - ターゲットホストへの SSH アクセスと、鍵ベースの認証
- 制御ノードと管理対象ノードに Python 3.9+ がインストールされていること
- ターゲットホストのインベントリ(IP アドレスまたはホスト名)
- システムレベルのリソースを設定する場合は、権限昇格用の認証情報(sudo)
- playbook の検証用に
ansible-lintがインストールされていること
手順
- プロジェクト内の既存の Ansible ファイル(
ansible.cfg、inventory/、roles/、group_vars/)を確認し、現在の構成を把握します - 自動化の対象(サーバーのプロビジョニング、アプリケーションのデプロイ、構成管理、セキュリティ強化)を決定します
- 適切な構成(
hosts、become、vars、tasks、handlers)で playbook の YAML を作成します - 標準的なディレクトリ構成(
tasks/、handlers/、templates/、defaults/、vars/、meta/)を使用して、再利用可能なロジックをロールに切り出します - 環境固有の値を
group_vars/とhost_vars/に定義し、シークレットはvaultで暗号化したファイルに保存します - 環境によって異なる構成ファイルには Jinja2 テンプレートを使用します
- 構成変更を契機にサービスを再起動するハンドラーを追加します
ansible-lintとansible-playbook --check --diff(ドライラン)で playbook を検証します- playbook を 2 回実行し、2 回目に変更がないことを確認して、冪等性をテストします
出力
- タスク、ハンドラー、変数を構造化した Ansible playbook(
.yml) - Ansible Galaxy の構成に従ったロールディレクトリ
- 動的な構成ファイル用の Jinja2 テンプレート(
.j2) - ホストグループを含むインベントリファイル(INI または YAML)
- 環境を分離するための
group_vars/とhost_vars/ - 接続と権限昇格の設定を含む
ansible.cfg
エラー処理
| エラー | 原因 | 解決策 |
|---|---|---|
unreachable: Failed to connect to host | SSH 接続の失敗、またはホスト/ポートの誤り | SSH キー、ホストの IP アドレス、ポート 22 が開いていることを ansible -m ping で確認します |
become 時の permission denied | sudo パスワードがない、または正しくない | --ask-become-pass を追加するか、vault に ansible_become_password を設定します |
undefined variable | 変数が vars、defaults、インベントリのいずれにも定義されていない | 変数の優先順位を確認し、defaults/main.yml または group_vars/ に定義します |
ansible-lint: syntax-check failed | YAML 構文エラー、または非推奨モジュールの使用 | ansible-lint -v を実行して報告された問題を修正し、非推奨モジュールを置き換えます |
毎回の実行で changed になる(冪等性がない) | creates/removes によるガードなしで command/shell を使用している | creates: パラメーターを追加するか、目的に特化したモジュール(copy、template、file)に切り替えます |
例
- 「Nginx、Certbot、ポート 80/443 のみを許可するファイアウォールを備えた Ubuntu 22.04 サーバーをプロビジョニングする Ansible playbook を作成してください。」
- 「Gunicorn、systemd サービスファイル、ログローテーションを使って Python Flask アプリをデプロイするロールを生成してください。」
- 「すべてのサーバーの SSH 設定を強化する Ansible playbook を作成してください。root ログインを無効にし、鍵認証を必須にし、アイドルタイムアウトを設定します。」
リソース
- Ansible ドキュメント:https://docs.ansible.com/ansible/latest/
- Ansible Galaxy ロール:https://galaxy.ansible.com/
- Ansible Lint ルール:https://ansible.readthedocs.io/projects/lint/rules/
- ベストプラクティスガイド:https://docs.ansible.com/ansible/latest/tips_tricks/ansible_tips_tricks.html
コメント
Markdown 対応