【実務・中級編】【CI/CD連携】GitHub ActionsとAnsibleを組み合わせてインフラデプロイを自動化する手順 – インフラ構成管理(IaC)活用バイブル

GitHub Actions × Ansible:泥臭い手作業を「コードの力」で絶滅させるための極限CI/CD構築術

インフラエンジニアの諸君。まだ「手元の端末から `ansible-playbook` を叩く」という原始的な儀式を続けているのか?

その作業、今日で終わりにしよう。CI/CDパイプラインを構築することは、単なる自動化ではない。「インフラの状態をGitに正解として定義し、人間の介在によるミスを物理的に排除する」という、SREとしての規律そのものだ。

本稿では、GitHub Actionsを活用して、Gitプッシュをトリガーにリモートサーバーを自動構成する「止められないインフラ」の作り方を伝授する。

—

1. 脳死で設定すべき「鉄壁のセキュリティ」とSSHの極意

まず、絶対にやってはならないのが「公開鍵をリポジトリに含める」ことだ。SSH鍵はGitHubの `Settings > Secrets and variables > Actions` に格納せよ。

SSH Agentの魔法

毎回 `ssh-add` する必要はない。GitHub Actionsの `webfactory/ssh-agent` を使えば、ワークフロー実行時のみメモリ上に鍵がロードされる。

.github/workflows/deploy.yml
jobs:
deploy:
runs-on: ubuntu-latest
steps:

  • uses: actions/checkout@v4
  • uses: webfactory/ssh-agent@v0.9.0

with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}

プロの小技: 接続先の `known_hosts` を毎回手動管理するのはナンセンスだ。Ansible実行時のSSH接続で `StrictHostKeyChecking=no` を一時的に指定する設計にするか、あるいは初期構築時に `ssh-keyscan` で登録するフローをパイプラインに組み込め。

—

2. 現場を救う「最強のディレクトリ構成」とベストプラクティス

Ansibleの構成は、規模が大きくなると必ず破綻する。最初から「Roleベースのモジュール化」を強制せよ。

.
├── group_vars/ # 環境ごとの変数(all, prod, staging)
├── roles/
│ └── common/ # 全サーバー共通設定
│ └── web-server/ # アプリケーション固有設定
├── site.yml # エントリポイント
└── inventory.ini # インベントリ(動的生成が理想)

チーム開発における「絶対のルール」

1. 変数にハードコードを許すな: IPアドレスやパスワードは必ず `group_vars` に逃がせ。
2. `ansible.cfg` の共有: プロジェクトルートに配置し、SSHパイプライン設定などをチームで統一せよ。

[defaults]
# 出力を人間が読みやすくする神設定
stdout_callback = yaml
# パフォーマンス向上のためのパイプライン化
pipelining = True

—

3. 実践:GitHub Actions での Ansible 実行フロー

単にコマンドを叩くだけでは、冪等性が崩れた瞬間に死ぬ。必ず `–check` モードでのテストを組み込むのがSREの嗜みだ。

  • name: Run Ansible Playbook

run: |
# 冪等性の検証(ドライラン)
ansible-playbook -i inventory.ini site.yml –check

# 実際の適用
ansible-playbook -i inventory.ini site.yml

—

4. 生産性を極限まで高める「神ツール・設定」

開発スピードを劇的に上げるために、今すぐこれらを導入しろ。

① VS Code プラグイン「Ansible」

Red Hat公式のAnsible拡張を入れるだけで、構文ハイライトとLintチェックがリアルタイムで行われる。YAMLのインデント地獄から解放される唯一の手段だ。

② `ansible-lint` をCIに強制注入せよ

コードレビューで「インデントが…」と指摘するのは時間の無駄だ。GitHub Actionsで `ansible-lint` を走らせ、Lintが通らないコードはマージ不能にする設定をGitHubのBranch Protection Rulesで強制せよ。

  • name: Linting

run: ansible-lint roles/

③ 隠れたキーボードショートカット(VS Code)

  • `Ctrl + Shift + P` -> `YAML: Toggle folding` : 巨大なYAMLを構造単位で折りたたみ、全体像を瞬時に把握する。
  • `Alt + 上下キー`: 行の移動。Ansibleのタスク順序を入れ替える際、マウスを使うのは素人だ。

—

5. 最後に:インフラを「コード」として愛せ

自動化の本質は、デプロイを速くすることではない。「何度やり直しても、同じ結果が得られる」という信頼(Trust)をシステムに組み込むことだ。

GitHub ActionsとAnsibleを組み合わせたこのパイプラインは、君たちのインフラを「触るのが怖いブラックボックス」から「何度でも書き換え可能なキャンバス」へと進化させる。

さあ、今すぐこのYAMLをリポジトリにコミットし、手動デプロイという名の「負債」を消し去れ。健闘を祈る。

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