Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 41 Ad
Advertisement

More Related Content

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

More from Hiroyuki Ohnaka (20)

Advertisement

Recently uploaded (20)

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

×