Ansible

HOME > Ansible

Ansible:記事リスト

Ansibleのカテゴリーには以下の記事がリストされています。

ansible roleとは|チームで再利用できる自動化部品の境界を引く考え方

「ansible roleって何?playbookを書けばいいんじゃないの?」
Ansibleを使い始めてしばらくすると、ほぼ全員がこの問いにぶつかります。

roleは「ファイルを分割するための仕組み」ではありません。チームで同じ設定を繰り返し安全に使えるよう、自動化コードを「部品」として独立させる設計の考え方です。境界の引き方を誤ると、role化してもメンテナンスコストは下がらず、むしろ複雑さが増すことになります。

この記事では、ansible roleとは何かを概念から解説し、「どこで境界を引くか」という設計思考を具体例つきで説明します。roleのディレクトリ構造・実装手順は別記事に委ね、ここでは「なぜroleを使うのか・どう分けるか」という考え方の型に絞ります。

この記事のポイント

・ansible roleとはplaybookの処理を「名前のついた部品」として独立させるAnsibleの仕組み
・roleの境界は「1ソフトウェアスタック」「変更理由が同じ」「オーナーが同じ」の3基準で引く
・変数がroleの「インターフェース」。defaults/main.ymlを差し替え口として使うのが設計の要
・チームで共有するには「role内完結」「命名規則統一」「依存の明示」の3原則を守る

続きを読む "ansible roleとは|チームで再利用できる自動化部品の境界を引く考え方"

AnsibleのJinja2フィルター設計入門|変数変換・デフォルト値・リスト操作でPlaybookの柔軟性を高めるパターン集

Ansibleのroleを複数人で使い始めると、必ずと言っていいほど遭遇する問題があります。「変数を渡し忘れたらPlaybookがエラーで止まった」「インベントリから文字列で渡した値を条件分岐で使おうとしたら型エラーになった」——こうしたケースの多くは、Jinja2フィルターを設計の段階で適切に組み込むことで防げます。

この記事では、AnsibleのJinja2フィルターの設計入門として、defaultフィルター・型変換・文字列操作・リスト操作・ternaryの各パターンを、実際の実行例とrole設計への組み込み方まで含めて解説します。実行環境はAnsible 2.17 / RHEL 9.4です。

この記事のポイント

・defaultフィルターで未定義変数を安全な既定値で処理できる
・int・bool・stringフィルターで型の不一致エラーを防げる
・select・map・combineでリスト・辞書を動的に変換する設計ができる
・ternaryフィルターで条件分岐をインラインに書きPlaybookを短くできる

続きを読む "AnsibleのJinja2フィルター設計入門|変数変換・デフォルト値・リスト操作でPlaybookの柔軟性を高めるパターン集"

AnsibleのLookupプラグイン設計入門|ファイル・環境変数・外部データを変数として動的取得する実践パターン

「AnsibleのPlaybookを書いていると、SSH公開鍵の内容やAPIキーをどう渡すか迷うことがある。vars_filesに直書きすればgitにコミットするたびに秘密情報が漏れるし、環境ごとに別Playbookを用意するのも管理が煩雑だ…」

こうした「Playbookの外にある情報をその場で取ってきたい」という要求に答えるのが、Lookupプラグインです。ファイルの内容・環境変数・CSVから値を検索・コマンドの出力・パスワード生成まで、多彩な外部データをPlaybook変数として動的に取り込めます。

この記事では、AnsibleのLookupプラグインの仕組みと代表的なプラグイン(file・env・csvfile・pipe・password)の使い方を、実際のPlaybookコードと出力例を交えて解説します。設計パターンまで解説するので、現場で即使えるPlaybookの「柔軟性」が身につきます。

動作確認環境:Ansible 2.16 / Rocky Linux 9.4(コントロールノード・管理対象ノード共通)

この記事のポイント

・Lookupプラグインはコントロールノードで評価され、外部データを変数に変換する仕組み
・file・env・csvfile・pipe・passwordの5種で現場の大半のユースケースを網羅できる
・query()を使うとLookupをリスト形式で返せてloopと組み合わせやすくなる
・pipeプラグインは外部入力をそのまま渡すとシェルインジェクションのリスクがある

続きを読む "AnsibleのLookupプラグイン設計入門|ファイル・環境変数・外部データを変数として動的取得する実践パターン"

Ansibleのrole命名と変数プレフィックス規約|複数roleを併用しても名前が衝突しない名前空間を作る

「複数のroleを組み合わせたら、なぜかサービスの設定値がおかしくなった。調べてみると別のroleで同じ変数名を使っていた…」
Ansibleで構成管理の規模が大きくなると、こうした変数衝突のトラブルが起きやすくなります。Ansibleの変数はPlaybook実行中にグローバルなスコープを持つため、あるrole内で定義した変数が意図せず他のroleに上書きされる事故が発生するのです。

解決策は「命名規約」にあります。role名をプレフィックス(接頭辞)として変数名に付ける規約を徹底すれば、どれだけroleを増やしても名前空間を安全に分離できます。

この記事では、Ansible公式推奨のrole命名規約と変数プレフィックス設計の実践パターンを解説します。Rocky Linux 9 / RHEL 9環境(Ansible 2.16)で動作確認済みの具体的な設定例を交えて進めます。

この記事のポイント

・Ansible変数はPlaybook全体がスコープ—role変数は名前が衝突しやすい
・role名を変数プレフィックスにする(例: nginx_port)のが公式推奨の規約
・defaults/main.ymlでプレフィックスを付けると衝突リスクをほぼゼロにできる
・group_vars・host_varsはroleのdefaultsより優先されるため環境差分の上書きに使う

続きを読む "Ansibleのrole命名と変数プレフィックス規約|複数roleを併用しても名前が衝突しない名前空間を作る"

AnsibleがAWSの認証情報を解決する仕組み|AWS CLIのプロファイル・環境変数・IAMロールの優先順位

「AnsibleでEC2インスタンスを操作しようとしたら、認証情報はどこに書けばいいのか。AWS CLIで設定済みのプロファイルはそのまま使えるのか。それとも別途Ansible用の設定が必要なのか」
こうした疑問は、AnsibleでAWSリソースの自動化を始める段階で必ずぶつかる壁です。

AnsibleのAWSモジュールとAWS CLIは、どちらも内部でboto3という共通のPython SDKを使っています。そのため「AWS CLIで設定した認証情報がAnsibleにも効く」のは偶然ではなく、設計上の必然です。ただし、boto3には認証情報を解決するための「優先順位ルール」があり、これを把握していないと意図しないAWSアカウントで動いてしまうリスクがあります。

この記事では、AnsibleのAWSモジュールがboto3を介してどのように認証情報を解決するかを、優先順位の高い順に整理します。ローカル開発・CI/CD・本番EC2それぞれでの推奨設計パターンまで網羅します。動作確認環境はRHEL 10 / Rocky Linux 9です。

この記事のポイント

・AnsibleのAWSモジュールはboto3経由でAWS CLIと共通の認証情報チェーンを利用する
・認証情報の優先順位は「環境変数 → CLIプロファイル → EC2インスタンスプロファイル」の順
・aws_profile変数でPlaybookから明示的にCLIプロファイルを指定できる
・本番EC2ではIAMロールのみで認証できるためシークレットをサーバーに保存しなくていい

続きを読む "AnsibleがAWSの認証情報を解決する仕組み|AWS CLIのプロファイル・環境変数・IAMロールの優先順位"

Ansibleのrole引数設計|呼び出し側からroleへ変数を渡す経路と既定値の置き場所

「roleを再利用したいのに、呼び出すたびに本体のYAMLを書き換えている」
「defaults/main.ymlに書いた値が呼び出し側で上書きされているのかどうか確認する方法がわからない」

Ansibleのroleを使い始めた現場でよく聞かれる問いです。roleは「再利用可能なPlaybookの部品」として設計されていますが、変数の渡し方を誤ると呼び出しのたびに本体を書き換えることになり、再利用の恩恵が消えます。

この記事では、roleへ変数を渡す3つの経路(roles:ブロックのvars・include_roleのvars・インベントリ経由)を比較し、defaults/main.ymlを「roleの公開インターフェース」として設計する考え方を実例で解説します。変数優先順位の全体マップ(22段階)はすでに別記事で扱ったため、本記事はrole呼び出し時の引数受け渡しに絞って掘り下げます。

実行環境: RHEL 9.4 / ansible-core 2.16.3 で動作確認済み

この記事のポイント

・defaults/main.ymlがroleの「公開インターフェース」になる
・roles:配下のvarsで呼び出し側から値をインライン渡しできる
・include_roleのvars:はタスクレベルで動的に渡す経路として使う
・変数が効いていない時はdebugモジュールとansible-inventoryで確認する

続きを読む "Ansibleのrole引数設計|呼び出し側からroleへ変数を渡す経路と既定値の置き場所"

AnsibleでVPCから作るAWS環境の自動化|ネットワークを先に用意してからEC2を並べる順序設計

「Ansibleで書いたEC2起動のPlaybookを実行したら、subnet_idが見つからないと怒られた」
「VPCとEC2を別々のPlaybookに分けたが、どちらを先に流せばいいのか毎回迷う」

このエラーが出た時点で、設計に根本的な問題があります。EC2インスタンスはVPCの中に置くリソースです。VPCがなければサブネットも存在せず、EC2に渡すsubnet_idを得ることができません。

この記事では、AnsibleでAWS環境を構築する際の「リソース作成の順序設計」を解説します。VPCから始めてサブネット・IGW・セキュリティグループを用意してからEC2を起動するまでの流れを、Playbookの依存関係とregister変数の使い方を軸に説明します。

動作確認環境: Ansible 9.x / amazon.aws collection 8.x / Python 3.11 / RHEL 9.4

この記事のポイント

・VPC→サブネット→IGW→SG→EC2の順序を守らないとPlaybookは動かない
・register変数でVPC作成結果のIDをEC2タスクへ引き渡す
・role分割でVPCネットワーク層とEC2起動層の依存を明示的に管理する
・subnet_id/vpc_idが見つからないエラーは順序と変数名のミスが原因の9割

続きを読む "AnsibleでVPCから作るAWS環境の自動化|ネットワークを先に用意してからEC2を並べる順序設計"

既存Playbookのtaskをroleへ移すAnsibleの移行手順|ファイル配置と参照パスの付け替え

「Playbookのtasksが増えてきてroleに分けたい。でも files/templates のパスをどう直せばいいか、copy モジュールの src はどう変わるのか、調べても断片的な情報しか出てこない」
こういう場面で手が止まることは珍しくありません。

既存PlaybookをAnsible roleへ移す手順は難しくありませんが、copy・templateモジュールの src パスがrole構造では自動解決される仕様に変わります。ここを理解しないまま移設すると「ファイルが見つからない」エラーが出続けます。

この記事では、既存PlaybookのtasksブロックをAnsible roleへ移す手順を解説します。ansible-galaxy role initによるスケルトン生成、tasks/main.ymlへのtask移設、files/・templates/への再配置と参照パスの付け替え、そしてPlaybookからのrole呼び出しへの書き換えまで、順を追って説明します。

動作確認環境: RHEL 9.4 / ansible-core 2.17

この記事のポイント

・copyモジュールのsrcはrole内ではfiles/以下が自動探索され相対パスで指定できる
・ansible-galaxy role initでrole骨格を1コマンドで生成しファイル配置ミスを防げる
・handlers/main.ymlにnotifyハンドラを移設するのを忘れると再起動が実行されなくなる
・移行後はansible-playbook --check --diffで差分ゼロを確認してから本番適用する

続きを読む "既存Playbookのtaskをroleへ移すAnsibleの移行手順|ファイル配置と参照パスの付け替え"

Ansibleで複数のAWSリージョンへ同じ構成を展開する|region指定とインベントリ分割の設計

「TokyoとOregonで同じPlaybookを使いたいが、どこでリージョンを切り替えればいいのか分からない」
「インベントリをリージョンごとに分けるべきか、それとも変数で切り替えるべきか判断できない」

AWSのマルチリージョン展開をAnsibleで自動化しようとすると、最初に直面するのがインベントリとリージョン変数の設計問題です。特にモジュールに渡すリージョン指定と、インベントリの分割粒度の決め方は、後から変えると影響範囲が広く、最初から正しい設計を選んでおく必要があります。

この記事では、Ansibleで複数のAWSリージョンへ同じ構成を展開するためのインベントリ分割設計と、Playbookにおけるregion指定の方法を、実際のディレクトリ構成とサンプルを示しながら解説します。単一リージョン構成からの移行を考えている方にも、設計上の判断根拠が伝わるよう説明します。

この記事のポイント

・インベントリはリージョン別ディレクトリ型が運用しやすい
・group_varsにaws_regionを定義し全モジュールで参照する設計が基本
・AMI IDはリージョン固有のためgroup_varsで別管理が必須
・実行は -i inventory/ap-northeast-1 のようにリージョンを明示指定する

続きを読む "Ansibleで複数のAWSリージョンへ同じ構成を展開する|region指定とインベントリ分割の設計"

roleが別のroleを呼ぶAnsibleの構成|meta/main.ymlのdependenciesと呼び出し順序の決め方

「roleが増えてきて、どのPlaybookにも最初に common roleを書き忘れないよう管理するのが辛くなってきた。role側で『自分より先にこのroleを実行してほしい』と宣言できれば、Playbookを書く人が依存を意識せずに済むのに」

Ansibleを本格運用するとこういった設計課題が出てきます。その答えが meta/main.yml の dependencies ブロックです。roleが自分の依存を宣言することで、Playbookから webapp とだけ書けば common → nginx → webapp の実行順序が自動保証されます。

この記事では、ansible role in roleの実装方法として meta/main.yml の dependencies の基本構文、呼び出し順序の制御、重複排除の仕組みを実行ログを交えて解説します。実行環境はRHEL 9.4 / Rocky Linux 9.4です。

この記事のポイント

・meta/main.ymlのdependenciesで依存roleをrole側から宣言できる
・依存roleは宣言した順序で、本体roleより必ず先に実行される
・Ansibleは同一roleの重複実行をデフォルトで自動排除する
・allow_duplicates: trueで変数を変えた複数回実行が可能になる

続きを読む "roleが別のroleを呼ぶAnsibleの構成|meta/main.ymlのdependenciesと呼び出し順序の決め方"

Ansibleのhostsファイル設計|INI形式とYAML形式の書き分け・グループ入れ子・ホスト範囲指定の実践

「Ansibleのhostsファイル、どう書けばいいんだろう」——。インベントリの設定をしようとネットで調べると「INI形式」と「YAML形式」の2種類の書き方が出てきて、どちらを選べばいいか迷った経験はないでしょうか。

Ansibleのhostsファイル(インベントリファイル)は、操作対象のサーバーを定義するファイルです。どちらの形式も同等の機能を持ちますが、グループ入れ子やホスト範囲指定の書き方が大きく異なります。

この記事では、INI形式とYAML形式それぞれの記法を実例で比較しながら、グループ入れ子と連番ホストの範囲指定まで一通り解説します。記述が正しく解釈されているか確認するコマンドも紹介するので、初めてインベントリを設計する方もすぐに実践できる内容です。

この記事のポイント

・hostsファイルはINI形式とYAML形式の2種類で書ける
・グループ入れ子は[グループ名:children](INI)で定義する
・ホスト範囲はweb[01:05]形式でまとめて指定できる
・ansible-inventory --graphでグループ階層をツリー確認できる

続きを読む "Ansibleのhostsファイル設計|INI形式とYAML形式の書き分け・グループ入れ子・ホスト範囲指定の実践"

AnsibleをAWS SSM経由で実行する構成|踏み台を置かずにプライベートサブネットのインスタンスへ設定を配る

「プライベートサブネットのEC2をAnsibleで管理したいが、踏み台サーバーを立てる余裕がない」「全インスタンスのSSHポートを開放しているのがセキュリティ上の懸念だ」

こういった構成上の課題を解消するのが、Ansibleのcommunity.aws.aws_ssm接続プラグインです。AWS Systems Manager(SSM)のセッションマネージャーをトンネルとして使い、SSHポートを一切開放しないままプライベートサブネットのEC2インスタンスへPlaybookを適用できます。

この記事では、aws_ssm接続プラグインの動作原理から、IAMロール設計・インベントリ記述・Playbook実行結果まで、構成の全体像をAmazon Linux 2023の実機で確認した内容とともに解説します。

この記事のポイント

・aws_ssm接続プラグインはSSHポート不要でEC2にPlaybookを実行できる
・ターゲットEC2にはIAMロールとSSM Agentの稼働が必須条件
・ファイル転送にS3バケットが必要(ansible_aws_ssm_bucket_nameで指定)
・制御ノードにはAWS CLI v2・session-manager-plugin・boto3の導入が前提

続きを読む "AnsibleをAWS SSM経由で実行する構成|踏み台を置かずにプライベートサブネットのインスタンスへ設定を配る"

Ansibleとは何かを台数が増える現場から理解する|同じ設定を何台にも配り続けるための道具

「サーバーが3台のころは、SSHして同じコマンドを3回打てばよかった。それが10台になり、30台になり——いつの間にか特定のサーバーだけ設定が食い違っていた」
規模が大きくなると、手作業による管理は必ず綻びます。この問題を解くために生まれたのがAnsibleです。

この記事ではansibleとは何かを「台数が増えるほど手作業が通用しなくなる理由」という問いから解説します。インストール手順や具体的なPlaybookの書き方は扱いません。Ansibleを使い始める前に「なぜこの道具が必要なのか」を整理したい方向けです。

この記事のポイント

・Ansibleとはサーバーの「あるべき状態」を宣言して何台にも同時に配布する構成管理ツール
・手作業のSSH繰り返しは台数が増えるほど設定ズレとミスが避けられなくなる
・管理対象にエージェント不要でSSH接続だけで完結する軽量な設計が特徴
・「手順を書く」ではなく「状態を宣言する」発想の転換がAnsibleの本質

続きを読む "Ansibleとは何かを台数が増える現場から理解する|同じ設定を何台にも配り続けるための道具"

AnsibleのStrategy設計入門|linear・free・host_pinnedで複数ホストの並列実行を制御する方法

「1台が遅れると全体が止まる。なのに全体が止まって手が付けられない」
複数サーバーへのAnsible実行で、こんな状況に直面したことはないだろうか。
あるいは、100台規模でパッケージ更新を走らせたとき「全ホストがタスク1を終えるまで次に進めない」という無駄な待機時間に悩んだことはないだろうか。

こうした並列実行の動作を制御するのがAnsibleのstrategy(ストラテジー)設定だ。
strategyはPlaybookに一行加えるだけで動作が変わるが、「どのホストがいつ次のタスクへ進めるか」という挙動を根本的に変えるため、理解なしに切り替えるとホスト間の状態不整合を招くことがある。

この記事では、AnsibleのStrategy(linear・free・host_pinned)の仕組みを設計レベルで解説する。
forksとの組み合わせ方、serialとの使い分け、トラブルシュートまでを整理し、ホスト数が増えてきたチームが直面する並列実行の課題に答える。

この記事のポイント

・AnsibleのStrategyは「どのホストがいつ次のタスクへ進めるか」を制御する設定で、linear・free・host_pinnedの3種がある
・linearはデフォルト。全ホストが同じタスクを完了してから次に進む(遅いホストがボトルネックになる)
・freeは完了したホストが即座に次のタスクへ先行できる。ホスト間に依存がない処理で時間を短縮できる
・forksが「同時接続数の上限」、serialが「何ホストずつグループ化するか」を制御する点でstrategyとは別の軸になる

続きを読む "AnsibleのStrategy設計入門|linear・free・host_pinnedで複数ホストの並列実行を制御する方法"

Ansible EDA(Event-Driven Ansible)設計入門|rulebookのsource・condition・actionでイベント駆動型自動化を構築する方法

「サーバーのアラートが飛んできたとき、まずSlackを確認して、状況を判断してから手動でPlaybookを実行する——その数分間、本番環境は無防備なままです。」

従来のAnsibleは優れた構成管理ツールですが、「人間がansible-playbookコマンドを実行する」という前提で設計されています。定期的なパッチ適用やプロビジョニングには向いていますが、「障害検知→即時対応」という反射的な自動化には対応できていません。

この記事では、Ansible EDA(Event-Driven Ansible)のアーキテクチャを解説します。rulebookでイベントソース・条件・アクションを定義し、AlertManagerのアラートやWebhookを受信して自動でPlaybookを実行する仕組みを、設計の考え方から実践パターンまでまとめます。

この記事のポイント

・Ansible EDAはイベント検知を契機にPlaybookを自動実行するイベント駆動型の拡張仕組み
・rulebookでsource(イベント監視)・condition(条件評価)・action(実行処理)を定義する
・ansible-rulebook CLIがrulebookを解釈してイベント待ちループを維持し、条件合致で即時起動する
・AWXのEDAコントローラーでルール管理とPlaybook実行を統合し、本番規模の自律自動化を実現できる

続きを読む "Ansible EDA(Event-Driven Ansible)設計入門|rulebookのsource・condition・actionでイベント駆動型自動化を構築する方法"

Ansibleのansible.cfg設計入門|接続・実行・ログ・escalationの全セクションとプロジェクト別設定分離のパターン

「ansible.cfgをどこに置けばいいか分からない」「プロジェクト間で設定が干渉してしまった」──
こうした悩みの多くは、ansible.cfgの探索順と設計の理解不足から来ています。

この記事では、Ansibleの設定ファイルansible.cfgの役割・全セクション([defaults]・[privilege_escalation]・[ssh_connection])・プロジェクト別設定分離の設計パターンを体系的に解説します。RHEL 9 / Ubuntu 24.04 LTSで動作確認済みです。

この記事のポイント

・ansible.cfgは4段階の優先順で探索され、プロジェクト直下への配置が現場標準
・[defaults]・[privilege_escalation]・[ssh_connection]の3セクションが設計の中心
・pipelining=Trueの有効化でsudo対応かつPlaybook実行を大幅に高速化できる
・グローバル設定はansible.cfg、ホスト固有の差分はhost_varsに書き分けるのが鉄則

続きを読む "Ansibleのansible.cfg設計入門|接続・実行・ログ・escalationの全セクションとプロジェクト別設定分離のパターン"

Ansible Execution Environments(EE)設計入門|ansible-builderで実行環境をコンテナ化してチーム統一を実現する方法

「自分のPCでは動くのに、同僚のPCでは失敗する」
Ansibleを使い始めたチームが最初にぶつかる壁の多くは、実行環境のばらつきから来ます。コレクションのバージョン、Pythonライブラリのバージョン、Ansibleのマイナーバージョン……。個人の環境に依存した自動化は、チームに展開した瞬間に崩れます。

この問題を根本から解決するのが、Red Hatが推進する Ansible Execution Environments(EE) です。Playbookの実行に必要なすべての依存物(Ansible本体・コレクション・Pythonライブラリ・システムパッケージ)をコンテナイメージにパッケージし、「どこで実行しても同じ結果が出る」を実現する仕組みです。

この記事では、EEの設計思想とビルドツール ansible-builder の実践的な使い方、さらに ansible-navigator によるPlaybook実行の流れを解説します。Ansible CLIは使えるが実行環境の統一に悩んでいるエンジニアが掴んでおくべき設計思想を整理します。

この記事のポイント

・AnsibleのEEはPlaybook実行環境をOCIコンテナに封入してチームで統一する仕組み
・ansible-builderでEEイメージを作成し、ansible-navigatorで実行するのが基本フロー
・execution-environment.ymlにベースイメージ・コレクション・Pythonパッケージを定義する
・AWX・AAPへのEE登録でCI/CD全体の実行環境を一元管理できる

続きを読む "Ansible Execution Environments(EE)設計入門|ansible-builderで実行環境をコンテナ化してチーム統一を実現する方法"

AnsibleのMagic Variables設計入門|hostvars・groups・inventory_hostnameで動的なPlaybookを作る方法

「このPlaybook、サーバーが増えるたびに書き直さないといけない……」そんな悩みはありませんか?
Ansibleで複数ホストを管理するとき、ホスト名でファイル名を変えたい、他のサーバーのIPをconfigに埋め込みたい、特定グループにだけ条件分岐したい。こうした要求に応えるのが Magic Variables(特殊変数)です。

この記事では、AnsibleのMagic Variablesの概念から、hostvars・groups・inventory_hostname を使った実践的な設計パターンを体系的に解説します。さらに map・selectattr フィルタとの組み合わせパターンも取り上げ、「なんとなく動いている」Playbookを「意図を持って設計した」Playbookに変えるための設計入門として読んでください。

この記事のポイント

・Magic VariablesはAnsibleが自動で設定する組み込み変数で上書き不可
・inventory_hostnameでホスト名を、hostvarsで他ホストの変数を参照できる
・groupsとgroup_namesでグループ条件分岐やクロスホスト設定が実現できる
・map/selectattrフィルタとMagic Variablesを組み合わせるとIPリスト生成が一行で書ける
・ansible_play_hostsとansi_verbosityを使うと動的デバッグ出力と実行台数制御が可能

続きを読む "AnsibleのMagic Variables設計入門|hostvars・groups・inventory_hostnameで動的なPlaybookを作る方法"

AnsibleをGitHub Actionsに組み込む設計入門|SSH SecretsとWorkflowでPush→自動デプロイを実現する方法

「AnsibleのPlaybookをGitで管理しているのに、本番への反映は毎回手元から手動実行している」
「コードレビューを通ったPlaybookがどの環境に入っているのかが、いつも把握できていない」

Ansibleでサーバー構成を自動化した後に訪れるのが、この「実行管理」の課題です。どれほど精密なPlaybookを書いても、実行タイミングや担当者の手作業に依存していると、環境のズレ・適用漏れ・「どのバージョンが本番に入っているか分からない」問題が繰り返し発生します。

この記事では、AnsibleをGitHub Actionsのワークフローに組み込んで「gitのPushを契機にLinuxサーバーへ自動デプロイする」仕組みを解説します。SSHキーのSecrets管理・known_hostsの安全な設定・ワークフローファイルの設計から、ステージング/本番の環境別デプロイ設計まで、実際のコードで説明します。

実行環境: Rocky Linux 9.4(管理対象ノード)、Ansible 2.16、GitHub Actions(ubuntu-24.04)

この記事のポイント

・GitHubリポジトリへのPushを契機にAnsibleを自動実行できる
・SSHキーはBase64エンコードしてGitHub Secretsで安全に管理する
・GitHub-hostedとself-hostedランナーの選定が設計の核心
・GitHub Environmentsでstaging→production承認フローを実現できる

続きを読む "AnsibleをGitHub Actionsに組み込む設計入門|SSH SecretsとWorkflowでPush→自動デプロイを実現する方法"

AnsibleのマルチステージInventory設計|staging・productionのgroup_vars分離とホストパターンによる環境切り替え実践

「Playbookはできたのに、stagingで確認してから本番に入れようとして、うっかり本番のInventoryを指定してしまった」——Ansibleを使い始めて規模が大きくなると、こういったヒューマンエラーが現実のリスクになります。

「stagingと本番で同じPlaybookを使いたいが、接続先や設定値は当然違う。どう管理すればいい?」——答えはInventoryの設計にあります。環境分離はAnsibleが最も得意とする分野であり、正しいディレクトリ構成とgroup_varsの使い方を知れば、誤適用を構造的に防げます。

この記事では、staging・productionを安全に分離するInventoryのディレクトリ設計、group_varsの環境別配置パターン、そして--limitと--check・--diffによる本番昇格前確認フローを解説します。実行環境はAnsible 2.15以降を想定しています。

この記事のポイント

・stagingとproductionは別ディレクトリのInventoryで物理的に分離し、誤適用を構造的に防ぐ
・共通変数はroleのdefaults、環境固有値は各環境のgroup_vars/配下に配置する
・ansible-playbook -i inventories/staging のように実行時に-iで環境を明示指定する
・本番適用前は--list-hostsで対象確認→--check --diffで差分確認→本適用の3ステップを踏む

続きを読む "AnsibleのマルチステージInventory設計|staging・productionのgroup_vars分離とホストパターンによる環境切り替え実践"

Ansibleのデバッグ設計入門|-vvvフラグ・debugモジュール・assertで実行時エラーを体系的に切り分ける方法

「Playbookを実行したのにサーバーの設定が変わっていない」「エラーは出ないのに期待通りに動かない」——Ansibleを使い始めた頃、こういった壁に必ずぶつかります。

シェルスクリプトなら echo や set -x で処理の流れをすぐに追えますが、Ansibleは実際の処理がモジュールの中に隠れているため、同じ感覚でデバッグしようとすると詰まります。

この記事では、Ansibleのデバッグを体系化する3つの道具——詳細ログフラグ(-v~-vvvv)・debugモジュール・assertモジュール——と、実行範囲を絞る--step・--start-at-taskの使い方を解説します。「どのツールをどの場面で使うか」を整理するだけで、デバッグにかかる時間は大幅に短縮できます。

この記事のポイント

・-vフラグで詳細ログを出し、タスク結果とモジュール引数を確認できる
・debugモジュールで変数の実際の値や条件式の評価結果を可視化できる
・assertモジュールで「期待通りの状態か」を宣言的に検証し失敗させられる
・--start-at-taskで問題箇所から実行を再開すれば検証サイクルが速くなる

続きを読む "Ansibleのデバッグ設計入門|-vvvフラグ・debugモジュール・assertで実行時エラーを体系的に切り分ける方法"

Ansibleのloopとregistered変数設計入門|with_items廃止後の繰り返し処理と結果制御パターン

「Ansibleで複数のパッケージやユーザーに同じ設定を一括で適用したい。with_items を使って書いたら、実行時に非推奨の警告が出てきた」

こういった場面に直面したことのある方は多いはずです。Ansible 2.5(2018年リリース)から with_* 系のループ構文は非推奨(deprecated)となり、現在は loop: キーワードに統一されています。古い書き方でも一応動くため、気づかないまま使い続けているケースが現場でも少なくありません。

この記事では、loop の基本的な書き方から始め、loop_control によるログ制御、register 変数でループ結果を受け取り条件分岐に活用する設計パターン、さらに handler との組み合わせや運用でよく踏む落とし穴まで解説します。RHEL 9.4 / Ubuntu 24.04 LTS + Ansible 2.14 で動作確認済みです。

この記事のポイント

・with_items は非推奨。loop: キーワードが現在の標準的な繰り返し構文
・loop_control の label でログ出力を短縮し、index_var でインデックス番号を取得できる
・register 変数はループ全体の結果を .results リストとして保持する
・register + when の組み合わせで「失敗したアイテムにだけ再処理をかける」設計が可能
・handler + notify は「変更があったときだけ再起動する」冪等設計のもう一つの柱

続きを読む "Ansibleのloopとregistered変数設計入門|with_items廃止後の繰り返し処理と結果制御パターン"

AnsibleでDockerコンテナを管理する方法|community.dockerコレクションでコンテナのデプロイ・停止・削除を自動化する手順

「10台のサーバーに同じDockerコンテナを展開するのに、毎回SSHで入ってdocker runを手打ちしていませんか?」
Docker Composeで1台の管理はできても、複数サーバーへの一括展開となると途端に手が止まる——そんな状況は、Ansibleのcommunity.dockerコレクションを使えば解決できます。

この記事では、AnsibleからDockerコンテナを一括管理する方法を解説します。
community.dockerコレクションのインストールから、docker_containerモジュールによるコンテナのデプロイ・停止・削除、ネットワークとボリュームのPlaybook管理まで、RHEL 9.4 / Ubuntu 24.04 LTSで動作確認した実例を交えて紹介します。

この記事のポイント

・ docker_containerモジュールでコンテナのデプロイ・停止・削除を1つのPlaybookで管理できる
・ community.dockerコレクションはansible-galaxy collection installで導入する
・ loopを使えば複数コンテナをまとめて一括起動・停止できる
・ docker_networkとdocker_volumeでネットワークとVolumeもコード管理できる

続きを読む "AnsibleでDockerコンテナを管理する方法|community.dockerコレクションでコンテナのデプロイ・停止・削除を自動化する手順"

AnsibleでEC2インスタンスを自動作成・管理するPlaybook設計入門|amazon.awsコレクションとec2_instanceモジュールの使い方

「AWSのEC2インスタンスを毎回マネジメントコンソールから手作業で作っている」「Terraformを覚えるのは大変だが、手作業での環境構築はもう限界だ」
こういった悩みを持つLinuxエンジニアは少なくありません。

実は、すでにAnsibleを使っているなら、同じPlaybookの構造でVPC設計からEC2インスタンスの作成・起動・停止・削除まで一気通貫で自動化できます。
amazon.awsコレクションを使えば、VPC・サブネット・セキュリティグループの構築からEC2インスタンスの管理まで、Terraformなしでもインフラのコード管理が始められるのです。

「コンソールから手動でリソースを作るたびに、開発・ステージング・本番の設定がいつの間にかバラバラになっていく」——この構成ドリフト問題を根本から解消できるのが、AnsibleによるAWSリソースの冪等管理です。

この記事では、AnsibleのEC2プロビジョニング設計を基礎から解説します。
認証設計・VPC/セキュリティグループの準備・Playbookの基本パターン・プロビジョニング直後の接続設計まで、現場で再現できるレベルで説明します。
動作確認環境: RHEL 9.4 / Amazon Linux 2023(コントロールノード)、Ansible 2.16、amazon.aws 8.x。

この記事のポイント

・amazon.aws.ec2_instanceモジュール1つでEC2を冪等に作成・管理できる
・VPC・サブネット・セキュリティグループもAnsibleで構築し、IDをregister変数で受け渡せる
・IAM認証はIAMロール・環境変数・Ansible Vaultから現場に合った方法を選ぶ——Playbookに認証情報を書かない設計が鉄則
・add_hostでプロビジョニング直後から設定Playbookを続けて流せる
・本番適用前に--checkオプションでドライランを実行し、変更内容を事前確認する運用が重要

続きを読む "AnsibleでEC2インスタンスを自動作成・管理するPlaybook設計入門|amazon.awsコレクションとec2_instanceモジュールの使い方"

Ansibleのcopy・fileモジュールでファイル管理を自動化する方法|バックアップ・権限設定・シンボリックリンクの実践パターン

「サーバーが増えるたびに、設定ファイルをsftpで手動アップロードしている。バックアップを取り忘れて上書きしてしまう。パーミッションを間違えてApacheが起動しない。」
こういった手作業のミスは、サーバーが2台でも10台でも確実に起きる。とくに同じ設定ファイルを複数のサーバーへ展開する作業は、コピーミス・権限ミス・バックアップ漏れの温床だ。

この記事では、Ansibleのcopyモジュールとfileモジュールを使って、設定ファイルの配布・権限設定・バックアップを冪等に自動化する方法を解説する。RHEL 9.4 / Rocky Linux 9環境で動作確認済み。基本的なPlaybookの構造は理解している前提で、実務で即使える設計パターンを中心に説明する。

この記事のポイント

・copyモジュールはコントロールノードのファイルをリモートサーバーへ冪等に配布する
・backup: yesを指定すると上書き前に元ファイルが自動でバックアップされる
・validateオプションで構文エラーのあるファイルの書き込みを事前にブロックできる
・fileモジュールはstate: directory/link/absentでディレクトリ・リンク・削除を冪等管理できる
・fetchモジュールでリモートの設定ファイルをコントロールノードへ一括回収できる

続きを読む "Ansibleのcopy・fileモジュールでファイル管理を自動化する方法|バックアップ・権限設定・シンボリックリンクの実践パターン"

Ansible・Puppet・Chefの違いを比較する|エージェントレス構成管理を選ぶ判断基準と導入設計

「Ansibleがいいと聞くけれど、PuppetやChefと何が違うのかがわからない」

構成管理ツールを調べ始めると、必ずこの3つの名前にぶつかります。どれも「サーバーの設定をコードで管理する」ツールですが、動く仕組みも、導入にかかる工数も、運用で必要になる知識もまったく違います。この違いを理解しないまま選ぶと、検証環境を組む段階で止まってしまいます。

この記事では、Ansible・Puppet・Chefを「エージェントの有無」「push型とpull型」「記述言語」の3軸で比較し、どんな現場でどれを選ぶべきかの判断基準を整理します。RHEL 9.4 / Rocky Linux 9 / Ubuntu 24.04 LTS で動作確認した実際の出力例を交えて解説します。

この記事のポイント

・Ansibleはエージェント不要。SSHとPython 3があれば即動く
・PuppetとChefはターゲットに常駐エージェントを入れるpull型
・記述言語はAnsibleがYAML、Puppetが独自DSL、ChefがRuby
・数十台規模で変更頻度が中程度なら、Ansibleが最短で回り始める

続きを読む "Ansible・Puppet・Chefの違いを比較する|エージェントレス構成管理を選ぶ判断基準と導入設計"

Ansibleのfailed_when・changed_when・ignore_errorsでタスク結果を制御する方法|commandモジュールを安全に扱う設計パターン

「なぜかAnsibleのタスクが全部 "changed" になってしまう」「commandモジュールを使ったら、実際には変わっていないのに毎回 "changed" と表示される」

こんな状況に直面したことはないでしょうか。Ansibleはcommandモジュールやshellモジュールを使う場合、終了コードが0なら「OK(成功)」、0以外なら「failed(失敗)」と判断しますが、「変更があったか否か」についてはPlaybook側で明示的に定義しない限り、常に「changed」と返します。

この記事では、failed_when・changed_when・ignore_errorsの3つのキーワードを使い、タスクの成否と変更状態をPlaybook側から精密に制御する方法を解説します。register変数を活用した条件判定からset_factによる変数の加工・再利用まで、RHEL 9.4 / Ubuntu 24.04 LTS の実環境で動作確認した出力例を交えながら、現場で即使えるパターンを紹介します。

この記事のポイント

・failed_whenで「終了コード以外の失敗条件」をPlaybook側で定義できる
・changed_whenでcommandの「変更有無」の判定ロジックを上書きする
・ignore_errorsはエラー後も処理を継続するが、乱用は要注意
・registerとセットで使い、stdout/rcを条件式に組み込む設計が基本
・set_factでregister変数を加工すると、後続タスクで再利用しやすくなる

続きを読む "Ansibleのfailed_when・changed_when・ignore_errorsでタスク結果を制御する方法|commandモジュールを安全に扱う設計パターン"

Ansibleの接続設計|コントロールノードとSSH鍵・踏み台サーバーの設定からインベントリ変数まで

「Ansibleをインストールしたのに、最初のping疎通がどうしても通らない」

Ansible入門でよく聞くつまずきです。コマンドのオプションを調べる前に、まず「どのノードに・どのユーザーで・どの鍵で接続するか」という接続設計を固めることが先決です。インベントリの書き方1つで、同じPlaybookが動いたり動かなかったりします。

この記事では、Ansibleの接続設計の全体像を解説します。SSH鍵認証の設定からインベントリ変数の書き方、踏み台サーバー(ProxyJump)経由の構成パターンまで、RHEL 9.4 / Rocky Linux 9 / Ubuntu 24.04 LTSで動作確認した手順を順番に紹介します。

この記事のポイント

・Ansibleの接続はインベントリの変数(ansible_host / ansible_user等)で制御する
・SSH鍵配布はssh-copy-idで行い、known_hostsの確認を先に済ませる
・踏み台経由はansible_ssh_common_argsにProxyJumpを指定するだけ
・ansible pingが全ホストでSUCCESSになれば接続設計は完成

続きを読む "Ansibleの接続設計|コントロールノードとSSH鍵・踏み台サーバーの設定からインベントリ変数まで"

Ansibleのbecomeでsudo権限を設計する方法|become_user・become_methodと最小権限設計の実践

「Ansibleを本番環境で動かしたいが、rootユーザーでSSH接続するのが怖い」「become を使えば良いと聞いたが、どこに書けばいいのかわからない」

Ansibleで構成管理を自動化するとき、必ずぶつかるのが「権限」の問題です。Webサーバーの設定ファイルを書き換えるには root 権限が必要ですが、SSHを root で直接接続するのはセキュリティリスクが大きく、多くの企業で禁止されています。そこで使うのが become(privilege escalation:権限昇格)です。

この記事では、Ansibleの become の仕組みと、運用現場で崩れない権限設計のパターンを解説します。become_user・become_method の使い分けから、設定スコープ(ansible.cfg・inventory・タスクレベル)の選択、Ansible Vault を使ったパスワードの安全管理まで、順を追って体系的に身につけられます。

この記事のポイント

・become: true でSSH接続ユーザーを root に昇格させて操作できる
・設定スコープは「ansible.cfg>inventory変数>タスクレベル」の3段構造
・タスクごとに become を個別指定することで最小権限原則を守れる
・become_pass は Ansible Vault で暗号化して Git に安全にコミットする

続きを読む "Ansibleのbecomeでsudo権限を設計する方法|become_user・become_methodと最小権限設計の実践"

AnsibleのBlocks・rescue・alwaysでエラー処理を設計する方法|タスク失敗時のロールバックと通知の実践パターン

「Ansibleでデプロイ中にタスクが失敗した——何台ものサーバーのうち、どのサーバーが中途半端な状態になっているのか分からない」
こうした状況に直面したとき、Playbookにエラー処理が設計されていれば、失敗を検知してロールバックを自動実行できます。

Ansibleではblock・rescue・alwaysという3つのキーワードを組み合わせることで、失敗時の回復処理と後処理を宣言的に設計できます。この記事では、RHEL 9.4・Ansible Core 2.16で動作確認した上で、3つのブロックの仕組みと現場ですぐ使える実務パターンを解説します。

この記事のポイント

・block・rescue・alwaysで失敗時の自動ロールバックを設計できる
・rescueではansible_failed_taskで失敗原因を取得できる
・alwaysは成否を問わず実行。ロック解除・通知に使う
・rescue内で失敗するとfailed=1。軽量タスクのみに絞る

続きを読む "AnsibleのBlocks・rescue・alwaysでエラー処理を設計する方法|タスク失敗時のロールバックと通知の実践パターン"

Ansibleのrole設計入門|ディレクトリ構造とtasks・handlers・defaultsで再利用可能なコードを作る方法

「AnsibleのPlaybookが長くなりすぎて、どこに何を書いたか分からなくなってきた」
「同じ設定を複数のPlaybookにコピーしているが、修正のたびに全箇所を書き直す羽目になっている」

こうした課題の答えが Ansible role(ロール) です。roleはPlaybookの処理を機能単位で分割し、別のPlaybookでもそのまま再利用できるようにする仕組みです。Ansibleを本格的に使い始めたら、最初に覚えるべき設計パターンのひとつです。

この記事では、roleのディレクトリ構造からansible-galaxy initによる雛形作成、handlersとdefaultsの使い方、listenキーワードによる複数role間のhandler共有、meta: flush_handlersによる即時実行制御、さらにmeta/main.ymlを使ったrole間の依存関係の宣言まで、実際のサーバーでの実行結果とともに解説します。またPlaybookの実行順序(pre_tasks → roles → tasks → post_tasks)の中でroleをどのように使うべきかも合わせて説明します。
実行環境:Rocky Linux 9.4 / Ansible 2.16.3(コントロールノード)、管理対象:Rocky Linux 9.4

この記事のポイント

・ansible roleはPlaybookを機能単位に分割・再利用する仕組み
・ansible-galaxy initコマンドでディレクトリ雛形を一瞬で生成できる
・handlers/notifyでサービス再起動を冪等に管理できる(changedの時だけ発火)
・handlerはフェーズ(pre_tasks/roles/tasks/post_tasks)の末尾でまとめて発火する
・listenキーワードで複数roleから1つのhandlerをまとめて呼べる
・defaultsは外部から上書き可能、varsは上書きを抑制する役割
・meta/main.ymlのdependenciesでrole間の依存関係をコードで宣言できる

続きを読む "Ansibleのrole設計入門|ディレクトリ構造とtasks・handlers・defaultsで再利用可能なコードを作る方法"

AnsibleのWindows管理入門|WinRM設定とansible.windows collectionで混在環境を自動化する方法

「LinuxサーバーはAnsibleで管理しているが、Windows Serverだけは手作業のまま残っている」
インフラを自動化していても、社内に数台ある Windows Server だけが Ansible の管理外に置かれてしまうケースは多くあります。「Windows は別のツールが必要では」と思われがちですが、Ansible は Linux と同じ Playbook 形式で Windows Server を自動管理できます。手作業のサービス再起動・ソフトウェアインストール・設定ファイルの配置が、Playbook 1本で完結します。さらに、同じ Playbook を何度実行しても結果が変わらない「冪等性(べきとうせい)」がAnsibleの最大の強みです。「すでにインストール済みか」「サービスは起動中か」といった判定を Ansible が内部で自動的に行うため、手順書のような if 分岐を自分で書く必要がありません。

この記事では、Ansible から Windows Server を管理するための接続設定(WinRM)と、ansible.windows collection の主要モジュールの使い方を解説します。WinRM 有効化・インベントリ設定・認証方式の選択から、win_service・win_package・win_copy・win_user の実践例まで、RHEL 10 / Rocky Linux 9 のコントロールノードと Windows Server 2022 ターゲットの環境で動作確認しています。

この記事のポイント

・AnsibleはWinRM(ポート5985/5986)でWindows Serverに接続して管理できる
・Windows側でEnable-PSRemoting -Forceを実行してWinRMを有効化する
・インベントリにansible_connection: winrmを設定するだけで既存のPlaybook形式が使える
・win_service・win_package・win_copy・win_userで混在環境を冪等に一括管理できる

続きを読む "AnsibleのWindows管理入門|WinRM設定とansible.windows collectionで混在環境を自動化する方法"

Ansibleのimport_tasksとinclude_tasksの違いと使い分け|静的・動的読み込みの設計判断

「import_tasksとinclude_tasks、どちらを使えばいい?」
Ansibleを本格的に使い始めると、Playbookが大きくなってきてタスクを複数ファイルに分割したくなります。その際に選択肢となるのが、この2つのモジュールです。どちらも外部タスクファイルを読み込む命令ですが、読み込まれるタイミングが根本的に異なります。

間違えると「whenを付けたのに全タスクが動く」「loopが使えない」「tagsが思った通りに効かない」といった問題が起きます。この記事では、RHEL 9.4 / Rocky Linux 9.4で動作確認した実例をもとに、import_tasksとinclude_tasksの仕組みの違い、when・loop・tagsへの影響、そして設計判断の指針を解説します。

この記事のポイント

・import_tasksは静的(パース時)、include_tasksは動的(実行時)に読み込まれる
・whenをimport_tasksに付けると各タスクに条件がコピーされ、loopは使用不可
・include_tasksはwhenでファイル全体をスキップ、loopで繰り返し読み込みが可能
・動的ファイル名・条件付き読み込み・繰り返しが不要なら、import_tasksをデフォルトに

続きを読む "Ansibleのimport_tasksとinclude_tasksの違いと使い分け|静的・動的読み込みの設計判断"

Ansibleのasyncとpollで長時間タスクを制御する方法|タイムアウト対策と並行実行の設計

「AnsibleのPlaybookを流したら途中でSSH接続が切れてタスクの成否がわからなくなった」「大量のホストに長時間かかる更新を流したいが、1台ずつ順番に待っていては時間がかかりすぎる」——

Ansibleのデフォルト動作は「タスクが完了するまでSSH接続を保持し続ける同期実行」です。数秒で終わるタスクなら問題ありませんが、パッケージの大規模更新やソースビルドなど、数分以上かかる処理ではSSHのタイムアウトや長い待ち時間が問題になります。

この記事では、Ansibleの async と poll を使って長時間タスクを非同期実行に切り替える方法を解説します。基本的な仕組みから async_status による完了確認、複数ホストへの並行実行設計、現場でよくある落とし穴まで体系的にまとめました。

この記事のポイント

・asyncでタスクをバックグラウンド実行し、SSHタイムアウトを回避できる
・poll: 0(fire-and-forget)+async_statusで複数ホストの並行実行が可能
・retries×delayがasync値以上になるよう設計することが重要
・Windowsモジュールはasyncに対応していないため注意が必要

続きを読む "Ansibleのasyncとpollで長時間タスクを制御する方法|タイムアウト対策と並行実行の設計"

Ansible CollectionsとFQCNの基礎知識|ansible.builtinと外部コレクション導入の実践手順

「PlaybookのモジュールをFQCNで書くよう指摘された。ansible.builtinとは何か、どう書けばいいのか分からない」
Ansible 2.10以降を使い始めると、こういった疑問を抱く方が多くいます。

この変化は一時的な仕様変更ではありません。Ansible CollectionsとFQCN(Fully Qualified Collection Name)は、Ansible全体のモジュール体系を整理した根本的なアーキテクチャ改革です。ansible-lintでの警告への対応だけでなく、外部Collectionの導入や自動化コードの保守性にも直結する重要な概念です。

この記事では、CollectionsとFQCNの基本的な概念から、ansible.builtin名前空間の使い方、community.generalなどの外部Collection導入手順、そしてPlaybookへの実装パターンまでを解説します。単なるコマンドリファレンスではなく、ansible-lintの警告を解消しながらモダンな記法に移行するための実践的な設計視点を重点的に扱います。実行環境はRHEL 10 / Rocky Linux 9です。

この記事のポイント

・FQCNは「名前空間.コレクション名.モジュール名」の3パート形式でAnsible 2.10から標準化された
・ansible.builtinは追加インストール不要の組み込みコレクションでcopy/file/serviceなどが含まれる
・外部CollectionはCollection単位でインストールしrequirements.ymlで宣言管理できる
・ansible-lintのfqcn警告はモジュール名をFQCN形式に書き直すことで解消できる

続きを読む "Ansible CollectionsとFQCNの基礎知識|ansible.builtinと外部コレクション導入の実践手順"

ansible-pullで構成管理をGitOps化する方法|プル型運用の仕組みとcron連携の設計

「サーバーが増えるたびに、毎回SSHで接続してansible-playbookを手動実行している」——そんな運用になっていませんか。
管理対象が数台のうちは問題ありませんが、10台・50台・100台と増えると、プッシュ型の運用はじわじわと限界を迎えます。

この記事では、ansible-pullを使ったプル型のGitOps構成管理について、仕組みから設計パターンまで解説します。
Gitリポジトリを「構成の正」として管理し、各サーバーがcronで定期的に自分自身へPlaybookを適用する。
そのアーキテクチャを一から理解することが、この記事の目的です。

この記事のポイント

・ansible-pullはノード自身がGitからPlaybookを取得して適用する
・push型との根本的な違いは「接続の向き」と「実行の主体」にある
・Gitリポジトリ+cronでGitOpsに近い自律型構成管理が実現できる
・ノード数が多いほどプル型の運用コストメリットが大きくなる

続きを読む "ansible-pullで構成管理をGitOps化する方法|プル型運用の仕組みとcron連携の設計"

AWX入門|AnsibleをGUIで運用する方法とジョブテンプレート・スケジュール実行の構築手順

「Ansibleは使えている。でも、チームに展開しようとしたら途端に行き詰まった」
複数のエンジニアが手元のPCからansible-playbookを実行すると、誰がいつどのPlaybookをどのサーバーに対して走らせたか追跡できません。SSH鍵やVaultパスワードは全員が持つ必要があり、定期実行のたびにcrontabを設定するサーバーを探して回る羽目になります。

この記事では、Ansible CLIにGUI管理機能を追加するOSSプロジェクト「AWX」の概念と導入全体像を解説します。
インストールコマンドの羅列ではなく、「AWXがチーム運用のどこを解決するのか」「ジョブテンプレートとスケジュール実行をどう設計するか」に軸足を置きます。Ansible CLIは使えるが、チーム展開・GUI管理に移行したいエンジニアが最初に掴んでおくべき設計思想を整理します。

この記事のポイント

・AWX = Ansible Tower のOSS版。CLI実行にGUI・RBAC・監査ログを追加する
・ジョブテンプレートはPlaybook・インベントリ・認証情報の実行定義書
・スケジュール実行・通知をGUIで設定し、crontabの属人化を解消できる
・デプロイはKubernetes推奨。検証ならminikubeまたはk3sで即日構築可能

続きを読む "AWX入門|AnsibleをGUIで運用する方法とジョブテンプレート・スケジュール実行の構築手順"

Ansibleで複数サーバーのユーザーアカウントを一括管理する実践|userモジュールと鍵配布の設計

「サーバーが20台に増えた。新しいメンバーのアカウントを全台に追加してほしい」——そう依頼されたとき、あなたのチームはどう対応していますか?

一台ずつSSHで接続して `useradd` を実行し、公開鍵を `~/.ssh/authorized_keys` にコピーする——この作業を手作業で繰り返すと、「あのサーバーだけUID番号が違う」「1台だけ鍵の登録を忘れた」「退職したメンバーの鍵がどこかに残っている」という問題が必ず起きます。

この記事では、Ansibleの `user` モジュールと `authorized_key` モジュールを組み合わせ、複数サーバーのユーザーアカウントと公開鍵を一括管理する設計を解説します。ansible-playbookの単体コマンド解説ではなく、インベントリ設計・変数管理・ロール設計という統制の視点でまとめています。

「ansible user 公開鍵 一括管理」を実現したいエンジニアはぜひ参考にしてください。

動作確認環境:RHEL 9.4 / Rocky Linux 9.4 / Ubuntu 22.04 LTS(Ansible 2.16)

この記事のポイント

・userモジュールで全台のアカウントをPlaybookで宣言管理できる
・exclusive: trueで古い公開鍵を全台から自動削除できる
・group_varsでユーザーリストを変数化すると1ファイルで全台管理できる
・Roleに切り出すことでユーザー管理設計を複数環境に再利用できる

続きを読む "Ansibleで複数サーバーのユーザーアカウントを一括管理する実践|userモジュールと鍵配布の設計"

Ansibleのdelegate_toとrun_onceの使い方|ロードバランサー操作を含むオーケストレーション設計

「複数のWebサーバーを順番に更新したいが、ロードバランサーの切り離し処理をAnsibleでどう書けばいいかわからない」「delegate_toとrun_onceを使えばいいと聞いたが、どう組み合わせればいいのか見えてこない」

複数ホストを跨ぐ依存関係のある処理をAnsibleで自動化しようとすると、この壁に当たります。ロードバランサーの操作がその代表例です。

この記事では、delegate_toとrun_onceの仕組みをゼロから整理し、ロードバランサー操作を含む無停止デプロイのオーケストレーション設計を実装例つきで解説します。動作確認環境はRHEL 10 / Rocky Linux 9(Ansible 2.17以降)です。

この記事のポイント

・delegate_toでタスクを別ホスト(LBなど)に移譲できる
・run_once: trueで全ホスト中1回だけ実行を保証できる
・delegate_to+run_onceで実行場所と回数を同時に制御できる
・serial: 1と組み合わせて無停止ローリングデプロイを設計できる

続きを読む "Ansibleのdelegate_toとrun_onceの使い方|ロードバランサー操作を含むオーケストレーション設計"

AnsibleでLinuxサーバーのパッチ適用を自動化する方法|dnf・aptモジュールとserialによるローリング更新

「10台、20台のLinuxサーバーに毎月パッチを当てる作業、まだSSHで一台ずつ手作業でやっていませんか?」

管理台数が増えるほど、パッチ適用漏れやサービス停止の確認忘れが起きやすくなります。緊急パッチが出たときに深夜から手作業で20台を回るのは、体力的にも精神的にも限界があります。

この記事では、Ansibleのansible.builtin.dnfモジュールとansible.builtin.aptモジュールを使い、RHEL系・Debian系のLinuxサーバーへのパッチ適用を自動化する方法を解説します。単純な一括実行にとどまらず、serialによるローリング更新で本番環境のリスクを抑えながら、事前チェック・事後検証まで組み込んだ実運用に耐える設計パターンを作り上げます。

動作確認環境:Ansible 2.16 / Rocky Linux 9.4 / Ubuntu 24.04 LTS

この記事のポイント

・dnf/aptモジュールのstate:latestで複数台に一括パッチ適用できる
・serialを使うとローリング更新で障害リスクを段階的に抑えられる
・pre_tasks/post_tasksで適用前後の自動検証を組み込める
・register/assertでパッチ失敗を即座に検知して処理を止められる

続きを読む "AnsibleでLinuxサーバーのパッチ適用を自動化する方法|dnf・aptモジュールとserialによるローリング更新"

Ansibleのfactsとgather_facts制御|setupモジュールでホスト情報を収集して条件分岐に使う方法

「本番に5台のRHELと3台のUbuntuが混在している。同じPlaybookで両方に対応できるのか?」
Ansibleを使い始めて間もないエンジニアが必ずぶつかる壁だ。

この問題を解決するのが facts(ファクト) だ。AnsibleはPlaybookのタスクを実行する前に、対象ホストのOS情報・CPU・メモリ・ネットワーク設定を自動で収集する。収集した情報はPlaybook内で変数として参照できるため、OSの種類に応じて処理を切り替えたり、メモリ容量によってパラメータを変えたりといった「環境適応型のPlaybook」を実現できる。

この記事では、Ansible factsの仕組み・setupモジュールが収集する情報の種類・gather_factsの制御方法(無効化・部分収集)・when条件分岐へのfacts活用パターン・カスタムfactsの定義方法を、実際の実行結果とともに解説する。

動作確認環境: RHEL 9.4 / Ubuntu 24.04 LTS、Ansible 2.16.x

この記事のポイント

・gather_facts: true(デフォルト)でsetupモジュールが自動的にホスト情報を収集する
・ansible_distributionでOS種別を判定してwhen条件分岐に使える
・gather_facts: falseに設定すると大規模環境でPlaybookを高速化できる
・/etc/ansible/facts.d/にINIファイルを置くとカスタムfactsを定義できる

続きを読む "Ansibleのfactsとgather_facts制御|setupモジュールでホスト情報を収集して条件分岐に使う方法"

Ansibleのcheckモードとdiffでドライラン検証する方法|本番適用前に変更内容を確認する運用設計

「Playbookを本番に流したら予想外のファイルが書き換わった」「サービスが再起動してダウンタイムが発生した」——

Ansibleは冪等性を持つ強力なツールですが、Playbook内容のミスや環境差異が積み重なると、本番環境で思わぬ変更が走ることがあります。これを防ぐ第一の手段が --check(ドライランモード)と --diff の組み合わせです。

この記事では、ansible-playbook --check --diff を使って本番適用前に変更内容を正確に把握する方法を、実際の出力例を交えて解説します。checkモードの仕組みから始まり、diff出力の読み方、check非対応モジュールの回避策、現場で使える安全運用フローまでを網羅します。

この記事のポイント

・ansible-playbook --check --diffで本番変更内容を事前に確認できる
・diffの「---」が変更前、「+++」が変更後の内容を示す
・commandとshellモジュールはcheckモードでスキップされる点に注意
・本番適用前は「check→出力確認→apply」の3ステップが基本形

続きを読む "Ansibleのcheckモードとdiffでドライラン検証する方法|本番適用前に変更内容を確認する運用設計"

Ansibleの実行を高速化する方法|ansible.cfgのpipelining・forks・fact cachingチューニング

「playbookを実行したら完了まで5分以上かかった。」「管理対象のサーバーが増えるたびに実行時間が比例して伸びている。」

Ansibleのデフォルト設定は「まず動かすこと」を重視した設計になっており、速度の最適化は考慮されていません。5台のサーバーでは許容範囲だった実行時間も、50台・100台と増えると深刻なボトルネックになります。

この記事では、ansible 高速化のカギとなるansible.cfgの3つの設定——forks(並列数)・pipelining(SSHオーバーヘッド削減)・fact caching(Fact収集のキャッシュ化)——を、仕組みから設定手順まで体系的に解説します。「ansible 高速化 ansible.cfg」の設定値で悩んでいる中級者・大規模インフラ管理者の方に向け、現場で効果が確認できた設定を整理しました。

この記事のポイント

・ansible.cfgのforks・pipelining・fact cachingの3設定でAnsibleは劇的に速くなる
・pipeliningはSSH接続のオーバーヘッドを1タスクあたり最大2/3削減できる
・fact cachingはgathering=smartと組み合わせてFact収集を初回のみに絞る
・pipelining有効化時はターゲットホストのrequiretty無効化が必須

続きを読む "Ansibleの実行を高速化する方法|ansible.cfgのpipelining・forks・fact cachingチューニング"

ansible-lintとMoleculeによるコード検証入門|静的解析とroleテストで変更事故を防ぐ

「Playbookに変更を加えたら、本番サーバーで想定外の動作が起きた。commitする前に問題を検出できていれば」
Ansibleの運用経験が増えるほど、こういったヒヤリハットが積み重なっていきます。

ansible-lintとMoleculeを組み合わせれば、コードを実際に本番へ流す前に大多数の問題を事前検出できます。ansible-lintが構文・スタイルの静的解析を担い、Moleculeがroleの実行テストと冪等性確認を担います。この2段構えの仕組みをCIに組み込めば、Pushのたびに自動でコード品質を守れます。

この記事では、RHEL 10 / Rocky Linux 9の実行環境を前提に、ansible-lintのインストールから.ansible-lintでのルール調整、Moleculeの初期化からmolecule testの全フェーズ実行、そしてGitHub Actionsへの組み込みまでを手順ごとに解説します。

この記事のポイント

・ansible-lintはPlaybookとroleのコード品質違反を静的解析で即座に検出するツール
・Moleculeはroleをコンテナで実行して冪等性テストを自動化するフレームワーク
・molecule testで全フェーズ(create/converge/idempotence/verify/destroy)を一括実行できる
・GitHub Actionsに組み込めばPushごとにlintとroleテストが自動実行される

続きを読む "ansible-lintとMoleculeによるコード検証入門|静的解析とroleテストで変更事故を防ぐ"

Ansibleの変数優先順位と設定スコープを整理する|vars・defaults・group_vars・host_varsの使い分け

「インベントリに変数を書いたのに、なぜかPlaybookの値で上書きされてしまう」
「roleを別プロジェクトに流用したら、意図しない値で動いてインフラを壊しかけた」

Ansibleの変数トラブルで時間を取られた経験はないでしょうか。こうした問題の多くは、Ansibleが持つ「22段階の変数優先順位」を把握していないことが原因です。変数をどこに書くかによって、どの値が最終的に使われるかが変わる——これがAnsible変数設計の核心です。

この記事では、Ansible変数の定義場所ごとの優先順位、group_vars・host_varsで環境差分を管理するパターン、roleのdefaults/varsの使い分けを実際のYAMLとコマンド出力を交えて解説します。
「変数をどこに書くべきか」の判断基準を身につければ、環境ごとの設定ミスや予期しない上書きを大幅に減らせます。

この記事のポイント

・Ansible変数は22段階の優先順位を持ち、extra_vars(-e)が最高優先度
・group_vars/all→グループ名→host_varsの順で優先度が上がる
・roleのdefaults(上書き可)とvars(固定)を使い分けるのが設計の基本
・ansible-inventory --hostコマンドで変数の最終適用値を一覧確認できる

続きを読む "Ansibleの変数優先順位と設定スコープを整理する|vars・defaults・group_vars・host_varsの使い分け"

Ansibleの冪等性設計|command・shellモジュールの罠と安全なPlaybookの4原則

「Ansibleを使い始めたのに、同じPlaybookを2回実行したらエラーになった」「手動でサーバーを触った後にAnsibleを流すと設定が壊れる」——Ansibleを導入した現場でこうした問いに直面することがあります。
原因の多くは、Playbook設計の段階で「冪等性(べきとうせい)」の考え方が抜けていることにあります。冪等性とは「何度実行しても同じ結果が得られる性質」のことで、Ansibleの設計思想の核心です。

この記事では、Ansibleが冪等性を必要とする理由から、冪等性を破壊してしまうアンチパターン、そして現場で機能する4つの設計原則まで体系的に解説します。さらに、冪等性の高いPlaybookを本番環境へ安全に展開するためのロールアウト設計(serial・max_fail_percentage)も合わせて押さえます。
冪等性が崩れた時にdebugモジュールとregisterで素早く原因を特定するトラブルシュート手順も解説します。RHEL 10 / Rocky Linux 9 の実環境で確認した実行例つきで説明しているので、自分のPlaybookにすぐ応用できます。

この記事のポイント

・Ansibleの冪等性とは「何度実行しても同じ状態に収束する」設計の性質
・command/shell乱用とstate未指定が冪等性を破壊する2大アンチパターン
・4原則:モジュール優先・creates条件付け・state明示・handler活用
・--check/--diffで事前確認後、serialとmax_fail_percentageで本番への安全な段階展開を設計する

続きを読む "Ansibleの冪等性設計|command・shellモジュールの罠と安全なPlaybookの4原則"

Ansibleのwhen条件・loop・tagsでPlaybookを制御する方法|環境ごとの分岐と対象タスクを絞り込む設計パターン

「本番サーバーとテスト環境で別々のパッケージをインストールしたい」
「ユーザーアカウントを10件、同じ設定で一括作成したい。コピペを繰り返すのはつらい」
「Playbookが100行を超えてきた。今日はNginxの設定変更だけ反映して、他のタスクはスキップしたい」
「設定ファイルの書き込みが失敗したとき、自動でバックアップから元に戻したい」

Ansibleを本格的に使い始めると、必ずこうした要求に直面します。単純な「命令を並べるだけ」のPlaybookは、環境差分への対応・複数リソースの一括操作・部分実行・エラー時の自動回復が必要になった瞬間に限界を迎えます。

この記事では、Ansibleの制御フロー3本柱であるwhen条件式(実行分岐)・loop繰り返し処理・tags部分実行を体系的に解説します。さらにregister/set_factによる動的変数設計とblock・rescue・alwaysによるエラーハンドリング設計も含め、RHEL 10 / Rocky Linux 9の実行例とともに説明します。

この記事のポイント

・whenはOS種別・ファクト変数・register結果・グループ判定など多様な条件を記述できる
・loopはリスト・辞書を使った繰り返しで複数ユーザー・パッケージの一括操作を簡潔に書ける
・tagsで「インストールだけ」「設定だけ」を選択実行でき大規模Playbookの運用効率が上がる
・registerで保存した実行結果をset_factで加工することで動的な変数設計が実現できる
・block/rescue/alwaysはPythonのtry/except/finallyに相当するエラーハンドリング構造

続きを読む "Ansibleのwhen条件・loop・tagsでPlaybookを制御する方法|環境ごとの分岐と対象タスクを絞り込む設計パターン"

Ansible GalaxyでRoleを管理する方法|requirements.ymlと自社role設計の実践

「AnsibleのPlaybookを書くたびにNginxやMySQLのroleをゼロから書いている。誰かが公開していれば使いたいのに、どこから探せばいいか分からない」
Ansibleを使い始めると、こういった悩みが必ず出てきます。

実は、AnsibleにはAnsible Galaxyという公式のrole共有プラットフォームがあります。世界中のエンジニアが作成したroleが多数登録されており、ansible-galaxy installコマンド1本で自分のプロジェクトに取り込めます。コミュニティroleを上手に活用すれば、構成管理の開発コストを大幅に削減できます。

この記事では、Ansible GalaxyからのroleインストールとPlaybookへの組み込み方、requirements.ymlによる依存バージョン管理、そして自社独自roleの骨格設計まで解説します。単なるコマンドリファレンスではなく、チーム開発で実際に使える設計パターンを重点的に扱います。実行環境はRHEL 10 / Rocky Linux 9です。

この記事のポイント

・Ansible Galaxyはコミュニティroleの公式共有プラットフォームで1コマンドで取り込める
・requirements.ymlでrole依存とバージョンを宣言しチームで環境を統一できる
・ansible-galaxy role initで自社roleの骨格を生成し再利用しやすい設計を実現できる
・本番環境ではバージョン固定とGalaxy/Automation Hubの使い分けが品質の鍵になる

続きを読む "Ansible GalaxyでRoleを管理する方法|requirements.ymlと自社role設計の実践"

Ansible動的インベントリ設計|aws_ec2プラグインでEC2ホストを自動取得する仕組みと設定パターン

「EC2インスタンスを起動するたびにhosts.iniを手動で書き直している。Auto ScalingでIPが変わったらもうPlaybookが動かない」
AWSでAnsibleを使い始めたエンジニアが必ずぶつかる壁だ。クラウド環境では静的なインベントリファイルとインフラの実態がすぐに乖離する。その結果、「インベントリにあるホストが実際には存在しない」エラーや、「起動したばかりのインスタンスがPlaybookの対象にならない」という問題が頻発する。

この記事では、Ansibleの動的インベントリ(Dynamic Inventory)の仕組みと、aws_ec2プラグインを使ったEC2ホスト自動取得の設定パターンを解説する。aws_ec2.yamlの記述方法、タグベースのグループ設計、ansible-inventoryコマンドによる動作確認、静的インベントリとの併用設計、host_vars・Ansible Vaultを活用したマルチ環境対応、トラブルシュートまで、設計の観点から順を追って説明する。
動作確認環境: RHEL 10 / Ubuntu 24.04 LTS、Ansible 2.17(amazon.aws 8.x)、boto3 1.34。

この記事のポイント

・aws_ec2プラグインはEC2 APIをリアルタイムで呼び出してホスト一覧を自動生成する
・aws_ec2.yaml 1ファイルにリージョン・フィルター・グループ条件を定義できる
・タグ(Env/Role)のkeyed_groupsでhosts.ini不要の自動グループ化が実現できる
・host_vars・Ansible Vaultと組み合わせてマルチ環境の設定差分を安全に管理できる

続きを読む "Ansible動的インベントリ設計|aws_ec2プラグインでEC2ホストを自動取得する仕組みと設定パターン"

AnsibleのJinja2テンプレートとhandler設計|設定ファイルの動的生成とサービス自動再起動の仕組み

「設定ファイルをサーバーごとに手作業でコピーしているが、環境ごとに内容を変えるのが面倒だ」
「Ansibleで設定ファイルを配布した後、サービスのreloadを毎回手動でやっている」

こんな悩みは、Ansibleを使い始めたエンジニアが必ずぶつかる壁だ。copyモジュールで静的ファイルを配布するだけでは、環境ごとの差異(ホスト名・ポート番号・SSL設定の有無など)を吸収できない。設定変更のたびに手動でサービスを再起動するのは自動化の恩恵を半分しか受けていない状態だ。

この記事では、Ansibleの templateモジュール(Jinja2テンプレートで設定ファイルを動的生成)と handler/notify(設定変更を検知してサービスを自動再起動)の仕組みを、httpd.confを題材に解説する。さらに flush_handlers(handler即時実行)・listen(疎結合な通知設計)・handler連鎖(Ansible 2.9以降)まで踏み込み、実務で使えるPlaybook設計の全体像を網羅する。動作確認環境: RHEL 10 / Rocky Linux 9・Ansible 2.17。概念から実際のPlaybook設計まで順を追って説明する。

この記事のポイント

・templateモジュールはJinja2で変数・条件分岐を埋め込める設定ファイル配布モジュール
・handlerはnotify時のみPlay終了後に1回だけ実行される通知型タスク
・flush_handlersでhandlerを即時実行でき、後続taskが再起動後サービスに依存する場合に使う
・listenで複数taskから1つのhandlerを疎結合に呼び出せる
・handler連鎖(Ansible 2.9以降)でhandlerが別のhandlerをnotifyできる

続きを読む "AnsibleのJinja2テンプレートとhandler設計|設定ファイルの動的生成とサービス自動再起動の仕組み"

Ansible Vaultでシークレットを安全に管理する方法|パスワードファイルや暗号化変数の実践例

「playbookにパスワードを直書きしてしまっている……」
そう気づいた瞬間、ぞっとした経験はないでしょうか。Ansibleはサーバーを自動設定できる便利なツールですが、DBのパスワードやAPIキーをplaybookにベタ書きしてしまうと、Gitにコミットした瞬間に認証情報が漏洩するリスクが生まれます。

この記事では、Ansibleに標準搭載されている Ansible Vault を使って、パスワードや秘密鍵などのシークレット情報を安全に暗号化・管理する方法を解説します。vault-passwordファイルによるパスワードレス実行、変数ファイルの部分暗号化、group_varsとの分離設計、CI/CD連携まで実践的な手順をカバーします。

この記事のポイント

・ansible-vault encrypt でファイルをAES256で丸ごと暗号化してGitに安全にコミットできる
・vault_password_fileで対話入力なし・自動実行が可能になる
・vars.ymlとvault.ymlを分けると変数名を平文で検索しながら値だけ暗号化できる
・vault-idで本番・開発のVaultパスワードを環境ごとに分離できる

続きを読む "Ansible Vaultでシークレットを安全に管理する方法|パスワードファイルや暗号化変数の実践例"

AnsibleとシェルスクリプトSSHループの違い|構成管理に踏み出す判断

「サーバーが10台を超えたあたりから、SSHループのシェルスクリプトが手に負えなくなってきた」
そういう相談を受けることが多くなりました。

シェルスクリプトでSSHを束ねる手法は、台数が少ないうちは確かに便利です。しかしある規模を超えると、スクリプトの複雑さ・冪等性の欠如・メンテナンスコストが一気に牙を剥いてきます。

この記事では、シェルスクリプトSSHループとAnsibleが「どこが違うのか」を概念レベルで整理し、どのタイミングでAnsibleに踏み出すべきかを判断できる知識を提供します。コマンド一覧のリファレンスではなく、「なぜAnsibleが必要なのか」という設計思想の解説を軸にしています。

この記事のポイント

・SSHループは「手順の自動化」、Ansibleは「状態の自動化」という根本的な違いがある
・冪等性(何度実行しても同じ結果になる性質)の有無が最大の分岐点
・サーバー台数が10台超・設定変更が月1回以上ならAnsibleへの移行が効果的
・inventoryとrole分離で、設定の再利用性と可読性が大幅に向上する

続きを読む "AnsibleとシェルスクリプトSSHループの違い|構成管理に踏み出す判断"

Terraformのmoduleとfor_each・countで構成を再利用する設計パターン

「Terraformコードが増えるにつれて、似たようなリソース定義が至る所にコピーされてしまう」
「for_eachとcountはどう使い分ければいいのか。リストの途中を変更したら、意図しないリソースが破棄されてしまった」
Terraformを使い始めると、最初はうまくいく。VPCを作り、EC2を作り、サブネットを定義する。しかし3つ目、4つ目の環境を作り始めたとき、コードが爆発的に膨らんでいることに気づく。workspace機能や-var-fileで環境を分けるアプローチも有効だが、S3バックエンドのバケット名・DynamoDBテーブル名を環境ごとに切り替える記述が煩雑になりやすく、コードの三重管理という根本的な問題は解消しない。

この記事では、terraform moduleの使い方と、for_each・countを組み合わせた構成の再利用設計パターンを解説します。moduleの基本構造から、countとfor_eachの使い分け基準(インデックスずれによるリソース破棄リスクを含む)、localsブロックを使った環境設定の一元管理、dynamic blockの活用、よくあるトラブルの対処まで、実務で通用するパターンを段階的に説明します。

この記事のポイント

・terraform moduleでリソース定義を再利用可能な単位にまとめられる
・countはインデックス(数値)でリソースを識別するため途中削除でずれが起きる
・for_eachはキー名(文字列)で管理するため途中追加・削除しても影響が限定される
・dynamic blockでfor_eachを使うとリソース内のブロックを宣言的に管理できる

続きを読む "Terraformのmoduleとfor_each・countで構成を再利用する設計パターン"

Ansibleのinventory・role・module設計|現場で崩れない構成管理の基礎

「Ansibleを使い始めたけれど、ファイルが増えるにつれて管理が混乱してきた」「inventoryをどう分けるべきか、roleはどう設計すればいいかが分からない」
こういった悩みは、Ansibleを実務で使い始めた多くのエンジニアが通る道です。

チュートリアルの段階ではひとつのPlaybookに全部書いても問題ありません。ですが、管理するサーバー台数が増え、環境(dev・stg・prod)が分かれ、チームで共有するようになった瞬間に「なぜこう書いたのか誰も分からない」「本番に間違えた設定が流れた」といった問題が起きます。

この記事では、ansible inventory role module の3軸を軸に、現場で崩れない構成管理の設計方針を解説します。「inventoryのINI形式・YAML形式の使い分け」「ファイルの置き場所の原則」「roleの分割粒度」「moduleの選び方」「ansible-inventoryによる変数の事前検証」まで、実際に手を動かしながら理解できる内容にしています。動作確認環境はRHEL 9.4 / Rocky Linux 9.4、ansible-core 2.15系です。

この記事のポイント

・inventory は INI形式(手軽)とYAML形式(階層記述)から用途に合わせて選択する
・ansible inventory は dev/stg/prod のディレクトリに分割し group_vars で環境差分を自動適用する
・ansible-inventory --list / --graph で変数とグループ構造を実行前に必ず検証する
・role は機能単位(nginx/mariadb)で分割し依存性を meta/main.yml で管理する
・module は「冪等性が保証されるか」を基準に選択。command/shell は最終手段
・vars_prompt で本番実行に確認ステップを追加し、--check --diff でドライラン必須

続きを読む "Ansibleのinventory・role・module設計|現場で崩れない構成管理の基礎"

AnsibleでAWS上にNginx・PHP・MariaDBを自動構築する実践手順

「AWSのEC2に毎回手作業でNginxやPHPを入れている」「環境を再現しようとしたら設定が違っていた」
こういう悩みを抱えているLinuxエンジニアは少なくありません。

この記事では、AnsibleをつかってAWS EC2上にNginx・PHP・MariaDBを自動構築する実践的な手順を解説します。
Inventoryファイルの設計からRole分割、Playbookの実行・確認まで、現場で再現できるレベルで説明します。

この記事のポイント

・ansible-playbookコマンド1本でEC2にLEMP環境を自動構築できる
・RoleでNginx・PHP・MariaDBを分離すれば再利用性が大きく上がる
・Inventoryに接続情報を集約することで複数台管理も一元化できる
・AWSセキュリティグループのポート開放を事前に忘れると接続でつまずく

続きを読む "AnsibleでAWS上にNginx・PHP・MariaDBを自動構築する実践手順"

手作業のサーバー設定から卒業する|構成管理ツールAnsibleの入門ハンズオン

「またあの作業か……」サーバーが増えるたびに、同じSSH接続と同じコマンド打鍵を繰り返していませんか?
10台ならまだ我慢できます。しかし20台・50台と増えた瞬間、手作業は「管理の限界」にぶつかります。

この記事では、構成管理ツール Ansible(アンシブル)の入門から実践的なPlaybook設計まで、完全初心者でも理解できるように解説します。
「コマンドを1台ずつ打つ」作業から卒業して、インフラ自動化の入口に立ちましょう。

この記事のポイント

・Ansibleはエージェント不要でSSH経由だけでサーバーを自動設定できる
・Inventoryで対象サーバーを定義し、Playbookで手順を宣言的に書く
・べき等性(何度実行しても同じ結果)がAnsibleの最大の強み
・セミナーLP(ansible.linuxmaster.jp)で実機ハンズオンを体験できる

続きを読む "手作業のサーバー設定から卒業する|構成管理ツールAnsibleの入門ハンズオン"

Linux無料マニュアル(図解60P) 名前とメールで30秒登録