レガシーChefからの脱却:Chef 12/13から最新Chef 18+へ挑む、現場の「生存戦略」ロードマップ
こんにちは。インフラの深淵を覗き続けてきたエンジニアです。
もし今、あなたの現場に「Chef 12や13で止まったまま、誰も触りたがらないレガシーな構成管理コード」が眠っているなら、それは「技術的負債」という名の時限爆弾です。セキュリティリスクはもちろん、モダンなCI/CDパイプラインとの連携も絶望的でしょう。
しかし、恐れることはありません。本稿では、レガシー環境を最新のChef 18+へ安全に引き上げるための「現場で本当に使える」戦略を伝授します。これを読み終える頃には、あなたのインフラは再び「自動化の武器」として蘇ります。
—
1. なぜ「今」、Chefをアップデートするのか?
Chef 12/13時代と現在では、もはや別物と言っていいほど進化しています。
- Chef InSpecの統合: テスト駆動インフラが標準化。
- Policyfileの採用: 環境ごとの「環境のゆらぎ(Dependency Hell)」を根絶。
- パフォーマンスの向上: Ruby実行エンジンの最適化。
「動いているからいいや」は、明日には「動かせないから困る」に変わります。段階的に登りましょう。
—
2. 脱却のための「3ステップ・移行ロードマップ」
一気に最新版へジャンプするのは自殺行為です。以下の順序を厳守してください。
Step 1: 依存関係の可視化(現状把握)
まずは、現在動いているコードが「何に依存しているか」を棚卸しします。
- `knife-ec2` や古すぎる `knife` プラグイン: これらは真っ先に壊れます。`chef-cli` パッケージに含まれる新しいツール群に移行する準備をしましょう。
- 非推奨(Deprecated)の警告: ローカルで `chef-client -l warn` を実行し、ログに溢れる非推奨警告を全てリストアップしてください。
Step 2: InSpecによる「現状の証拠固め」
アップグレードで最も怖いのは「意図せぬ設定変更」です。Chefを触る前に、Chef InSpec を使って、現在のインフラ状態をテストコードとして書き出してください。
- 「このパッケージが入っているか?」「この設定ファイルは存在するか?」を記述し、成功することを確認します。これが「戻れる場所(セーフティネット)」になります。
Step 3: クライアント・サーバーの順次更新
1. Chef Infra Server: サーバーを先行してアップグレードします(後方互換性があるため、古いクライアントも動きます)。
2. Chef Workstation: 開発者の環境を最新の Chef Workstation に刷新します。
3. Chef Client: 最後にノード側のクライアントを更新します。
—
3. 実践:Chefの「今」を体験するHelloWorld
最新の環境を構築し、最も小さく、最も強力な構成管理の一歩を踏み出してみましょう。
環境構築(Chef Workstationのインストール)
まずは、あらゆるChefツールが詰まった「Chef Workstation」をインストールします。
MacOSならHomebrewで一撃です
brew install –cask chef-workstation
バージョン確認。これが現在のあなたの「羅針盤」になります
chef -v
HelloWorld:最新の書き方でファイルを作成する
昔は `recipe` を直接書いていたかもしれませんが、今は Resource の抽象度が高まっています。`hello.rb` というファイルを作成してください。
冪等性を担保する宣言的な記述
「ファイルがあるべき状態」を定義するだけで、Chefが裏側で差分を計算します
file ‘/tmp/hello_chef.txt’ do
content ‘Chef 18+ の世界へようこそ!’
mode ‘0644’
owner ‘root’
group ‘root’
action :create # 冪等性: 既に同じ内容なら何もしない
end
実行はシンプルです。
chef-apply hello.rb
これで、環境がどうであれ、このファイルは常に「あるべき姿」に整えられます。これがインフラ自動化の真髄です。
—
4. 移行時に絶対にハマる「3つの罠」と対策
1. Rubyバージョンの乖離:
- 古いCookbookは、現在のChefに同梱されているRubyで動かないことがあります。`cookstyle` というツールを使い、モダンな構文へ自動修正してください。
- `cookstyle -a` で自動修正をかけるのが、現場の最短ルートです。
2. Chef Serverのアップグレード手順:
- Chef Server 12から18への直行は不可能です。マイナーバージョンを1つずつ追うか、バックアップからのリストア・移行を検討してください。`chef-server-ctl backup` を忘れると、夜を徹して泣くことになります。
3. Policyfileへの移行:
- 昔ながらの `environments` や `roles` の複雑な継承関係は、最新の `Policyfile` でフラット化しましょう。これにより、テスト済みの構成を確実に本番へ反映できるようになります。
—
最後に:エンジニアとしての心構え
「レガシーの刷新」は泥臭い作業です。しかし、この苦労を乗り越えた先には、「デプロイボタンを押すのが怖くない」という圧倒的な安心感が待っています。
最初は小さな `file` リソースの管理からで構いません。少しずつ、あなたのインフラを「コードによる支配下」に取り戻していきましょう。
もし詰まったら、Chefの公式ドキュメント(Chef Docs)という最強の辞書を開いてください。そして、何かあればまた相談してくださいね。あなたの自動化の旅を、全力で応援しています。
さあ、古いChefの呪縛を解き放ちましょう!