説明
パッケージのインストールに state: latest を使うと、実行時にリポジトリで提供されている新しいバージョンが導入される場合があります。同じプレイブックでも実行時期によって結果が変わり、互換性や依存関係の変更がサービス障害につながる可能性があります。
自動更新は、計画的なセキュリティパッチ適用方針の一部として利用できます。バージョンを固定する場合も、セキュリティ修正を継続して適用できるよう、検証と更新の手順が必要です。
想定される影響
- 未検証のパッケージや依存パッケージの更新によって、障害や性能低下が起きる可能性があります。
- 実行時期によって導入結果が変わり、配布の再現性が低下する場合があります。
対処方法
- バージョン管理が必要な本番配布では、明示的なパッケージバージョンと
state: presentを使ってください。presentだけではバージョンは固定されません。 - 必要な依存関係とリポジトリも管理し、まず検証環境で更新を試してください。
update_only: trueは新規パッケージの導入を制限するもので、バージョンを固定するものではありません。 - 固定したバージョンのセキュリティ更新を確認し、定期的に更新してください。
例
既存の yum モジュールの抜粋であり、インストール済みの Ansible とパッケージバックエンドで対応している必要があります。リポジトリに対象バージョンが必要です。1.24.0 は比較用の値で、本番環境の現在の推奨バージョンではありません。
変更前
yaml
---
- name: 패키지 설치
hosts: localhost
tasks:
- name: nginx 최신 버전 설치
ansible.builtin.yum:
name: nginx
state: latest
実行時にリポジトリで利用できる最新バージョンをインストールまたは更新します。
変更後
yaml
---
- name: 패키지 설치
hosts: localhost
tasks:
- name: nginx 고정 버전 설치
ansible.builtin.yum:
name: nginx-1.24.0
state: present
インストールする nginx のバージョンを指定します。すべての依存パッケージやディストリビューションのパッケージリリースまで固定する例ではないため、必要な範囲を別途管理してください。