Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ChefとItamaeをニコイチしてAnsibleにマイグレーションした話

2021/1/24 July Tech Festa 2021 winter

  • Be the first to comment

ChefとItamaeをニコイチしてAnsibleにマイグレーションした話

  1. 1. Copyright 2021 Hiroyuki Onaka #jtf2021w_e ChefとItamaeをニコイチして Ansibleにマイグレーションした話 2021/1/24 July Tech Festa 2021 winter 大中浩行(@setoazusa)
  2. 2. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e アジェンダ Linuxサーバーのプロビジョニングにおいて、ツールが 導入先ごとにChefとItamaeに別れていたのを、Ansible にマイグレーションして仕様を共通化した事例を紹介し ます。 インフラ自動化のツールは比較的乗り換えのコストが高 いと見なされがちですが、どのようにして複数ツールが 混在している環境統一していったのかを取り上げます。
  3. 3. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e アジェンダ • もともとの状況 • なぜAnsibleか • 移行プロセス • アーキテクチャー • 環境差分の考え方 • これから
  4. 4. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e おことわり • ツールの優劣の話はメインではないです。 • ツールの設計思想としてはChefのほうが今でも 好みです。 • 今日はAnsibleによるインフラのコード化を運用 化するなかで、モジュール構成や、対象となる 環境、他ツールとの連携をどのようにつなぎこ んでいるかをメインにお話しします。
  5. 5. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e もともとの状 況
  6. 6. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e もともとの状況 • アトラシアン製品(Jira/Confluence/Bitbucket 等)のプロビジョニング • Javaで動作するWebアプリケーション • 製品ごとにプロビジョニング仕様がある (共通している仕様もあるが個別の仕様もある) • 導入先によって構成・仕様が違う
  7. 7. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e もともとの状況 • 導入先がパブリッククラウド(AWS)とオンプ レの仮想環境(VMWare/KVM)の導入先にわ かれる • 導入先によってChefを使用している環境と Itamaeを使用している環境が混在していた • 自分はもともとChef側をメンテナンス
  8. 8. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e なぜAnsibleか
  9. 9. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e いったんはChefにそろえようとしたが… • Itamaeのレシピはrubyスクリプトなので、 rubyのロジックを織り込んでレシピの動的生 成(メタプログラミング)が出来る→可読性が 極めて悪い (ロジックが織り込めること自体はChefも同 様だが)
  10. 10. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e 今でもChefが一番お気に入り • 規模が大きい案件ではChefの role/environmentによる、環境/仕様のバ リエーションごとの属性出し分けがマッチす る • DSLの完成度もChefは高い
  11. 11. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e ただ、ChefはAttributeの優先度の仕様が複雑怪奇… 【Chef Solo】attributeはどう使い分けるべきか。 | Developers.IO http://dev.classmethod.jp/server-side/chef/attribute-overrides-pattern/
  12. 12. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e Ansibleを選んだ理由 • DSLがYAMLであることの不自由さは正直ある • ただ、サーバーのプロビジョニングにおける ユースケースの網羅度合いについては、Ansible が優れている • 公式ドキュメントを読み込んでいけばどうにか なる
  13. 13. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e 移行プロセス
  14. 14. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e 進め方(1) • いったん全環境のプロビジョニングをChefで統 一する • 導入先の環境が全てCentOS(6/7)なのでItamae にあったUbuntu関連の仕様は削除する • 全環境のプロビジョニングをAnsibleに統一でき るまで一年強
  15. 15. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e 進め方(2) • Ansibleはスタンドアローンで実行する(プロ ビジョニングするサーバー上で直接ansible- playbookコマンドを実行する) • 異なる導入先(顧客)の接続ホストを同一の Ansible上で管理しようとすると複雑になる ため
  16. 16. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e 進め方(3) • サーバー上にAnsible関連のモジュールが 入ってしまうことに関しては割り切る • AWS環境の導入先はPackerからansible- playbookコマンドを実行してAMIイメージを 作成する(EC2インスタンスの作成は Terraform)
  17. 17. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e アーキテク チャー
  18. 18. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e 実行する環境の分類 • スタンドアローンでの実行(サーバーにrsync でplaybookを転送、sshで接続してansible- playbookコマンドを実行) • Packerからの実行 • Vagrantからの実行(ローカル開発環境)
  19. 19. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e • どの環境も、ansible-playbookコマンドを実 行するシェルスクリプトを用意して、実行環 境の差異(カレントディレクトリー)はそこで 吸収する • VagrantのAnsible Provisionerは使用しない
  20. 20. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e provisioning-vagrant.sh provisioning-packer.sh provisioning.sh
  21. 21. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e Vagrantからの実行
  22. 22. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e Packerからの実行
  23. 23. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e Packerからの実行(Packer側定義)
  24. 24. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e Ansible-playbookコマンドを実行するスクリプト (provisioning.sh)
  25. 25. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e ディレクトリー構成 全製品共通部分のrole 共通部分のrole 個別製品ごとのrole Playbook定義
  26. 26. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e 構成の切替はPlaybookに集約する 分 全製品共通部のrole 共通部分のrole 個別製品ごとのrole
  27. 27. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e 導入先の設定切替はinventoryで切り替える
  28. 28. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e OSのバージョンごとの切り替え
  29. 29. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e 環境差分の考 え
  30. 30. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e • パッケージの構造上、起動スクリプト・設定 ファイル等にカスタマイズする箇所が分散し ている • 環境差分の箇所をなるべく一カ所に集中させ る
  31. 31. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e 方針 • 環境ごとの設定値の違いは極力 systemdの ユニット定義ファイルに集約する • ユニット定義で設定した環境変数をアプリ ケーションの設定に反映できるよう、起動ス クリプトや設定ファイルの初期値を修正する。
  32. 32. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e Systemdのユニット定義(1)
  33. 33. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e Systemdのユニット定義(2)
  34. 34. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e 設定ファイルの編集イメージ(Tomcatのserver.xml)
  35. 35. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e • Ansibleのlineinfile • Ansible上でシェルのワンライナー(sed等)で編 集 • XMLの編集はどうする? • Node.js? Groovy? • XMLStarlet を使用しているが正直おすすめできない
  36. 36. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e この範疇でおさまらないカスタマイズをする場合 はどうする? • オリジナルの設定ファイルの既定値が製品の マイナーバージョンをあげた時に予告無しに 変更が入る→ワンライナーが記述しづらい • このような場合はpatchモジュールが有効
  37. 37. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e Patchモジュールによる設定ファイルのカスタマイ ズ(1)
  38. 38. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e Patchモジュールによる設定ファイルのカスタマイ ズ(2)
  39. 39. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e これから
  40. 40. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e CIを回す • 現在はブランチのマージ時にvagrant-awsプ ラグインを使ってEC2インスタンスを立ち上 げ、そこでansible-playbookを実行している • vagrant-awsのメンテナンスが停滞している問題 • ansible-list等の導入で実行コストのバランス をよくしていきたい
  41. 41. Copyright 2021 Hiroyuki Onaka #jtf2021w_e #jtf2021w_e ありがとうございました! • Hiroyuki Onaka • @setoazusa • blog.fieldnotes.jp

×