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

More Related Content

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

Japan VMUG UserCon 2023 LT
Japan VMUG UserCon 2023 LTJapan VMUG UserCon 2023 LT
Japan VMUG UserCon 2023 LTunemotoakihiro
 
AWS App RunnerでASP.NET Core Webアプリケーションを動かしてみた
AWS App RunnerでASP.NET Core Webアプリケーションを動かしてみたAWS App RunnerでASP.NET Core Webアプリケーションを動かしてみた
AWS App RunnerでASP.NET Core Webアプリケーションを動かしてみたKen'ichirou Kimura
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)NTT DATA Technology & Innovation
 
Next-L Enju ワークショップ #76
Next-L Enju ワークショップ #76Next-L Enju ワークショップ #76
Next-L Enju ワークショップ #76Kosuke Tanabe
 
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...NTT DATA Technology & Innovation
 
Running Kubernetes on Azure
Running Kubernetes on AzureRunning Kubernetes on Azure
Running Kubernetes on AzureMasaki Yamamoto
 
自動化ツール Ansible に触れてみよう(技術インターン)
 自動化ツール Ansible に触れてみよう(技術インターン) 自動化ツール Ansible に触れてみよう(技術インターン)
自動化ツール Ansible に触れてみよう(技術インターン)akira6592
 
ITフォーラム2021 先端IT活用推進コンソーシアム(7/7)
ITフォーラム2021 先端IT活用推進コンソーシアム(7/7)ITフォーラム2021 先端IT活用推進コンソーシアム(7/7)
ITフォーラム2021 先端IT活用推進コンソーシアム(7/7)aitc_jp
 
DevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきかDevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきかEtsuji Nakai
 
Android & Nui & Physical Computing
Android & Nui & Physical ComputingAndroid & Nui & Physical Computing
Android & Nui & Physical ComputingTakahiro KUREBAYASHI
 
17-D-1 Azure開発の極意 ~2011年版~
17-D-1 Azure開発の極意 ~2011年版~17-D-1 Azure開発の極意 ~2011年版~
17-D-1 Azure開発の極意 ~2011年版~Sunao Tomita
 
Snowflakeって実際どうなの?数多のDBを使い倒した猛者が語る
Snowflakeって実際どうなの?数多のDBを使い倒した猛者が語るSnowflakeって実際どうなの?数多のDBを使い倒した猛者が語る
Snowflakeって実際どうなの?数多のDBを使い倒した猛者が語るRyota Shibuya
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化DeNA
 
Net なプロジェクトでも jenkins を使ってみた
Net なプロジェクトでも jenkins を使ってみたNet なプロジェクトでも jenkins を使ってみた
Net なプロジェクトでも jenkins を使ってみたOda Shinsuke
 

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

Japan VMUG UserCon 2023 LT
Japan VMUG UserCon 2023 LTJapan VMUG UserCon 2023 LT
Japan VMUG UserCon 2023 LT
 
AWS App RunnerでASP.NET Core Webアプリケーションを動かしてみた
AWS App RunnerでASP.NET Core Webアプリケーションを動かしてみたAWS App RunnerでASP.NET Core Webアプリケーションを動かしてみた
AWS App RunnerでASP.NET Core Webアプリケーションを動かしてみた
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
Next-L Enju ワークショップ #76
Next-L Enju ワークショップ #76Next-L Enju ワークショップ #76
Next-L Enju ワークショップ #76
 
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
 
Running Kubernetes on Azure
Running Kubernetes on AzureRunning Kubernetes on Azure
Running Kubernetes on Azure
 
自動化ツール Ansible に触れてみよう(技術インターン)
 自動化ツール Ansible に触れてみよう(技術インターン) 自動化ツール Ansible に触れてみよう(技術インターン)
自動化ツール Ansible に触れてみよう(技術インターン)
 
AutoTVM紹介
AutoTVM紹介AutoTVM紹介
AutoTVM紹介
 
第10回しゃちほこオラクル倶楽部
第10回しゃちほこオラクル倶楽部第10回しゃちほこオラクル倶楽部
第10回しゃちほこオラクル倶楽部
 
Unity開発ロードマップ最新情報
Unity開発ロードマップ最新情報Unity開発ロードマップ最新情報
Unity開発ロードマップ最新情報
 
ITフォーラム2021 先端IT活用推進コンソーシアム(7/7)
ITフォーラム2021 先端IT活用推進コンソーシアム(7/7)ITフォーラム2021 先端IT活用推進コンソーシアム(7/7)
ITフォーラム2021 先端IT活用推進コンソーシアム(7/7)
 
DevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきかDevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきか
 
自宅インフラの育て方 第2回
自宅インフラの育て方 第2回自宅インフラの育て方 第2回
自宅インフラの育て方 第2回
 
Android & Nui & Physical Computing
Android & Nui & Physical ComputingAndroid & Nui & Physical Computing
Android & Nui & Physical Computing
 
17-D-1 Azure開発の極意 ~2011年版~
17-D-1 Azure開発の極意 ~2011年版~17-D-1 Azure開発の極意 ~2011年版~
17-D-1 Azure開発の極意 ~2011年版~
 
Snowflakeって実際どうなの?数多のDBを使い倒した猛者が語る
Snowflakeって実際どうなの?数多のDBを使い倒した猛者が語るSnowflakeって実際どうなの?数多のDBを使い倒した猛者が語る
Snowflakeって実際どうなの?数多のDBを使い倒した猛者が語る
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
 
Net なプロジェクトでも jenkins を使ってみた
Net なプロジェクトでも jenkins を使ってみたNet なプロジェクトでも jenkins を使ってみた
Net なプロジェクトでも jenkins を使ってみた
 

More from Hiroyuki Ohnaka

remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱いHiroyuki Ohnaka
 
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験Hiroyuki Ohnaka
 
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code &  A clean dev env, working every ...Remote Development with Visual Studio Code &  A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...Hiroyuki Ohnaka
 
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプルHiroyuki Ohnaka
 
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Hiroyuki Ohnaka
 
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescriptHiroyuki Ohnaka
 
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版Hiroyuki Ohnaka
 
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版Hiroyuki Ohnaka
 
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~Hiroyuki Ohnaka
 
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘いHiroyuki Ohnaka
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Hiroyuki Ohnaka
 
「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」Hiroyuki Ohnaka
 
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)Hiroyuki Ohnaka
 
TDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcTDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcHiroyuki Ohnaka
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)Hiroyuki Ohnaka
 
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!Hiroyuki Ohnaka
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Hiroyuki Ohnaka
 
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまでHiroyuki Ohnaka
 
pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約Hiroyuki Ohnaka
 

More from Hiroyuki Ohnaka (20)

remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱い
 
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
 
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code &  A clean dev env, working every ...Remote Development with Visual Studio Code &  A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
 
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル
 
Mackerelの薄い本
Mackerelの薄い本Mackerelの薄い本
Mackerelの薄い本
 
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話
 
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescript
 
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
 
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~
 
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視
 
「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」
 
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)
 
TDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcTDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbc
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)
 
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
 
pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約
 

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

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