🎆

AWXでUbuntuサーバーの初期設定をやってしまおう

2024/09/14に公開

はじめに

前回までAnsibleTowerやAWXを現在のバージョンで建てることをやりました。 なので、今回はAWXを使って、Linuxをサーバー運用するときの初期設定をやっちゃえば少し楽なんじゃないかと思ったので、それを実際にやってみようと思います。

ローカル環境

機種: M1 Macbook Air(2020)
OS: MacOS Sonoma 14.6.1
メモリ: 16GB
AWX: ver.24.6.1
AWX operator: ver.2.19.1
minikube: v1.33.1

VM環境

OS: Linux (ubuntu 24.04)
サイズ: Standard B2s (2 vcpu 数、4 GiB メモリ)

使用するplaybook

今回は、下記のブログのものを参考に自動化させてしまおうと思います。 これに加えて、言語とタイムゾーンの設定も入れていきます。
※この記事の序盤のssh設定の部分に関しては、今回VM作成の際に設定してしまったので飛ばしています。
https://zenn.dev/sanwa_starch/articles/2023-05-17-ed2221a065da3b

以下が私の作成したyamlになります。
こちらをpushして、githubに乗せています。

---
- name: Set up Ubuntu
  hosts: all
  become: yes

  tasks:
    - name: "setting ssh access log"
      lineinfile:
        path: /etc/ssh/sshd_config.d/50-cloud-init.conf
        regexp: "SyslogFacility AUTH"
        line: SyslogFacility AUTH
        backrefs: false

    - name: "setting ssh access log"
      lineinfile:
        path: /etc/ssh/sshd_config.d/50-cloud-init.conf
        regexp: "LogLevel INFO"
        line: LogLevel INFO
        backrefs: false

    - name: Install ufw
      apt:
        name: ufw

    - name: allow ssh
      command: ufw allow ssh

    - name: Allow everything and enable UFW
      expect:
        command: ufw enable
        responses:
          "Command may disrupt existing ssh connections. Proceed with operation \\(y|n\\)?": y

    - name: Set logging
      command: ufw logging medium

    - name: "setting auto-reboot"
      lineinfile:
        path: /etc/apt/apt.conf.d/50unattended-upgrades
        regexp: '^(# )Unattended-Upgrade::Automatic-Reboot "false";'
        line: Unattended-Upgrade::Automatic-Reboot "true";
        backrefs: false

    - name: "setting auto-reboot"
      lineinfile:
        path: /etc/apt/apt.conf.d/50unattended-upgrades
        regexp: '^(# )Unattended-Upgrade::Automatic-Reboot-Time "02:00";'
        line: Unattended-Upgrade::Automatic-Reboot "02:00";
        backrefs: false

    - name: reboot service
      command: systemctl restart unattended-upgrades.service

    - name: install Rsyslog
      command: apt install rsyslog

    - name: install Logrotate
      command: apt install logrotate

    - name: "setting Logrotate"
      lineinfile:
        path: /etc/logrotate.conf
        regexp: "^rotate 4"
        line: rotate 48
        backrefs: false

    - name: "setting Logrotate"
      lineinfile:
        path: /etc/logrotate.conf
        regexp: "^dateext"
        line: dateext
        backrefs: false

    - name: "setting Logrotate"
      lineinfile:
        path: /etc/logrotate.conf
        regexp: "^#compress"
        line: compress
        backrefs: false

    - name: reboot service
      command: systemctl restart logrotate.service

    - name: Install jp lang
      apt:
        name: language-pack-ja-base

    - name: Install jp lang
      apt:
        name: language-pack-ja

    - name: setting jp lang
      command: update-locale LANG=ja_JP.UTF-8 LANGUAGE=”ja_JP:ja”

    - name: change TZ to Tokyo
      command: timedatectl set-timezone Asia/Tokyo

簡単に何をしているかを説明すると、上から

  1. sshのアクセスログを有効にしている。
  2. ファイアウォールの設定のため、ufwを導入してsshだけポート開放して、ufwのアクセスログを有効にしている。
  3. Ubuntuが自動アップデートしたときに、自動で再起動される設定をしている。
  4. Rsyslog と Logrotate を使用して自動ログローテーション、自動削除などの機能を導入している。 Loglotateサービスを再起動して、設定を反映させている。
  5. サーバーの日本語設定とタイムゾーンを東京に設定している。

実行準備

私の環境で必要な設定はリソース欄になります。 私個人のGithubからplaybookを引っ張ってきて、これを利用するようにしています。

Githubに乗せてある資材を引っ張ってくる設定(プロジェクト)

私のプロジェクトは以下のように設定して、Githubにプッシュしてある資材を取り出しています。

認証情報

私は、azureVMに対して実行したいので下の画像のような設定にしています。

インベントリー、ホストの設定

インベントリー欄から追加をして作成をしてください。

※注意
この先のテンプレート設定では、ホストの設定はインベントリー単位での設定をすることになるので、ホスト欄からホストを指定してもよいですが、インベントリーで作ったところからホスト設定したほうが、事故が少なくなると思います。

テンプレート設定(実行設定)

ここで、設定したものを実行したときに下記の実行結果に繋がります。
プロジェクト、インベントリー、認証情報、そしてplaybookは自分で作ったものを選択していきます。

これらが設定できたら、テンプレートから実行ができます。

実行結果

実行完了されると、AWX側では以下のような表示になるかと思います。

実行結果を簡単に確認していくと、タイムゾーンの設定はされていると確認できます。

日本語表記の件についても、
こちらは

man apt

での表示結果です。 きちんと日本語表記ですね。

複数サーバーへのアクセス

自動化させる大きな利点の一つでもある複数サーバーへ同時に設定が可能にな
ることが挙げられると思いますが、AWXではホストを追加するだけでそれができるので、非常に楽です。
認証情報は都度追加していただけると良いです。
※yaml内でhosts: allと記述されている必要はあります。

ホスト設定画面

実行画面

まとめ

今回は、基本的なUbuntuでのサーバー初期設定をAWXで行いました。 初期設定は、どんな事するときでも必ず通る手順だと思いますので、こういった部分をAWXで自動化させてしまえば非常に作業が楽かなと思います。 複数サーバーに行うときでも、ホストを追加していけば、同じようにできますのでぜひAWXを業務で活用してみてはいかがでしょうか。

EMP Tech Blog

Discussion