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

Ansible × GitHub Actions:インフラの「手作業」を過去の遺物にする、自動化パイプラインの極意

こんにちは。クラウドの世界へようこそ。
日々、サーバーにSSHでログインして「apt update」や設定ファイルの書き換えを行っていませんか?もしそうなら、今日でその「職人芸」は卒業しましょう。

これから紹介するのは、「GitHubにコードをプッシュするだけで、インフラが自動的に最新状態になる」という、エンジニアが手に入れるべき究極の武器です。初心者の方でも、本質さえ掴めば確実に構築できます。一緒に見ていきましょう。

—

1. なぜ「Ansible × GitHub Actions」なのか?

まず、ツールの役割を整理します。

  • Ansible: 「インフラの設計図」を書き、それを実行するツールです。「どのパッケージを入れ、どの設定ファイルをどう書くか」を宣言し、冪等性(べきとうせい)――何度実行しても同じ結果になる性質――を担保します。
  • GitHub Actions: 「いつ実行するか」を決める司令塔です。「mainブランチにプッシュされたら、Ansibleを動かせ!」という自動化のトリガーを引きます。

この二つを組み合わせることで、「コードがインフラの真実(Single Source of Truth)である」という、モダンなSREの基本原則が完成します。

—

2. 【準備】最も重要なセットアップ

A. SSH鍵の生成と配布

AnsibleはSSH経由でサーバーを操作します。GitHub Actionsからサーバーに安全にログインするために、専用のSSH鍵ペアを作成しましょう。

パスフレーズなしの鍵を生成(CI自動化のため必須)
ssh-keygen -t ed25519 -f deploy_key

生成された公開鍵(`deploy_key.pub`)の中身を、操作対象のサーバーの `~/.ssh/authorized_keys` に追記してください。

B. GitHub Secretsへの登録

秘密鍵(`deploy_key`)をGitHubに直接置くのは厳禁です。GitHubの「Settings」>「Secrets and variables」>「Actions」に以下を登録します。

  • `SSH_PRIVATE_KEY`: `deploy_key` の中身
  • `SERVER_IP`: 操作対象サーバーのIPアドレス

—

3. 【ハンズオン】HelloWorld:Nginxを自動デプロイする

まずは、サーバーにNginxをインストールする「HelloWorld」を作りましょう。

Ansibleの設計図を書く (`playbook.yml`)

Ansibleの美しさは、やり方ではなく「状態」を記述することにあります。

—

  • name: Webサーバーの構築

hosts: all
become: yes # sudo権限で実行
tasks:

  • name: Nginxがインストールされている状態にする

apt:
name: nginx
state: present
update_cache: yes

  • name: Nginxを起動し、有効化する

service:
name: nginx
state: started
enabled: yes

パイプラインを定義する (`.github/workflows/deploy.yml`)

GitHub Actionsがこのファイルを読み取り、Ansibleを呼び出します。

name: Deploy Infrastructure
on:
push:
branches: [ main ]

jobs:
deploy:
runs-on: ubuntu-latest
steps:

  • uses: actions/checkout@v3
  • name: SSH鍵をセットアップ

run: |
mkdir -p ~/.ssh
echo “${{ secrets.SSH_PRIVATE_KEY }}” > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H ${{ secrets.SERVER_IP }} >> ~/.ssh/known_hosts

  • name: Ansibleを実行

run: |
# サーバーをinventoryとして動的に指定
ansible-playbook -i “${{ secrets.SERVER_IP }},” -u root playbook.yml

—

4. なぜこれが最強なのか?

この構成を導入すると、あなたの開発ライフサイクルは劇的に変わります。

1. 冪等性の恩恵: もしサーバーの設定が誰かに書き換えられても、GitHubにプッシュするだけで、Ansibleが「正しい状態」に瞬時に修復してくれます。
2. 属人化の解消: 「あのサーバー、どうやって設定したんだっけ?」という悩みは消滅します。すべての歴史はGitHubのコミットログに残ります。
3. CI/CDの第一歩: これをマスターすれば、次はコンテナ化(Docker)や、Terraformによるクラウド基盤のコード化へとスムーズにステップアップできます。

—

先輩からのアドバイス

初心者が最もハマるのは「SSHの接続エラー」と「権限周り」です。最初はうまくいかなくて当然です。その時は、`ansible-playbook` コマンドに `-vvv` というオプションを付けて実行してみてください。詳細なログが、どこで詰まっているかを雄弁に語ってくれます。

インフラをコードで操る快感を一度味わえば、もう手動でのサーバー操作には戻れなくなりますよ。さあ、まずはこの `playbook.yml` をプッシュすることから始めてみてください。

あなたの自動化ライフが、今日ここから始まります。応援しています!

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