SlideShare a Scribd company logo
「クラウド本気で始めました」な
SIerの

Chef活用と実践
~Chefアンチパターンとの戦い~
Chef Casual Talks Sapporo Vol.1
はじめまして!(じゃない方はこんばんは!)
Masashi Terui
照井 将士
!
https://www.facebook.com/marcy.terui
https://twitter.com/FumblePerson
!
        (株)アグレックス 札幌事業所 システム部
         AWS Consulting Partner ←New!!
         AWSチームリーダー ※ただし、現状1人チーム
!
Chef歴:10ヶ月くらい?
!
AWS Certified Solutions Architect
Winner of Tuningathon #5
JAWS-UG Sapporo
Chef Meetup Sapporo ← New!!
!
東京生まれ札幌育ち
!
1987年 東京都大田区に生まれる
1992年 札幌へ移住
概要的な
概要的な
• 中堅(?)SIerの地方拠点というパッとしない場所で、

スピード感の求められるクラウド業界で戦うために、

どんな風��Chefを使っている(使おうとしている)のか
!
• そこに行きつくまでの変遷
!
• これから(の悩みw)
Chefを使い始めたきっかけ
Chefを使い始めたきっかけ
元々インフラができる人が居なかった所に、
WEBの仕事が一気に増えた
Chefを使い始めたきっかけ
元々インフラができる人が居なかった所に、
WEBの仕事が一気に増えた
↓
当時、新入社員でやる気に満ち溢れていた(?)ので、
率先してインフラに手を出した
Chefを使い始めたきっかけ
元々インフラができる人が居なかった所に、
WEBの仕事が一気に増えた
↓
当時、新入社員でやる気に満ち溢れていた(?)ので、
率先してインフラに手を出した
↓
気が付いたら1人で���期間でけっこうな数のサーバ(自社DC仮想環境)立てて管理してた
Chefを使い始めたきっかけ
元々インフラができる人が居なかった所に、
WEBの仕事が一気に増えた
↓
当時、新入社員でやる気に満ち溢れていた(?)ので、
率先してインフラに手を出した
↓
気が付いたら1人で短期間でけっこうな数のサーバ(自社DC仮想環境)立てて管理してた
↓
AWS事業が始まり、さらに増えるペースが上がった
Chefを使い始めたきっかけ
元々インフラができる人が居なかった所に、
WEBの仕事が一気に増えた
↓
当時、新入社員でやる気に満ち溢れていた(?)ので、
率先してインフラに手を出した
↓
気が付いたら1人で短期間でけっこうな数のサーバ(自社DC仮想環境)立てて管理してた
↓
AWS事業が始まり、さらに増えるペースが上がった
↓
このままじゃ回らなくなると思い、Chefを使い始めた
そんなこんなで使ってはみたものの…
そんなこんなで使ってはみたものの…
• Chefを使い始めて、構築の速度は上がったが、

イマイチ効率化された感は無かった

そんなこんなで使ってはみたものの…
• Chefを使い始めて、構築の速度は上がったが、

イマイチ効率化された感は無かった

• 使う度に修正しながらで、使いまわしに不安

そんなこんなで使ってはみたものの…
• Chefを使い始めて、構築の速度は上がったが、

イマイチ効率化された感は無かった

• 使う度に修正しながらで、使いまわしに不安

• AWS事業が軌道に乗り始めた

→増員の話も出始めるが、スキル面もあり、なかなか進まない
そんなこんなで使ってはみたものの…
• Chefを使い始めて、構築の速度は上がったが、

イマイチ効率化された感は無かった

• 使う度に修正しながらで、使いまわしに不安

• AWS事業が軌道に乗り始めた

→増員の話も出始めるが、スキル面もあり、なかなか進まない
このまま増員なかったら、回らなくなる恐れ。
増員できたとして、今まで書いてきたCookbookは

他人に使わせることができる状態なのだろうか…?
↓
そんなこんなで使ってはみたものの…
• Chefを使い始めて、構築の速度は上がったが、

イマイチ効率化された感は無かった

• 使う度に修正しながらで、使いまわしに不安

• AWS事業が軌道に乗り始めた

→増員の話も出始めるが、スキル面もあり、なかなか進まない
このまま増員なかったら、回らなくなる恐れ。
増員できたとして、今まで書いてきたCookbookは

他人に使わせることができる状態なのだろうか…?
やり方を見直す必要性
↓
↓
見直すにあたって
見直すにあたって
良い指針があった。
[和訳] 初心者CHEFアンチパターン
http://www.creationline.com/lab/3080
見直すにあたって
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう
良い指針があった。
[和訳] 初心者CHEFアンチパターン
http://www.creationline.com/lab/3080
見直すにあたって
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう
2. 会社名つきの巨大なCookbookを作ってしまう
良い指針があった。
[和訳] 初心者CHEFアンチパターン
http://www.creationline.com/lab/3080
見直すにあたって
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう
2. 会社名つきの巨大なCookbookを作ってしまう
3. "Environments"を単なる論理的な「環境」以上の目的で使ってしまう
良い指針があった。
[和訳] 初心者CHEFアンチパターン
http://www.creationline.com/lab/3080
見直すにあたって
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう
2. 会社名つきの巨大なCookbookを作ってしまう
3. "Environments"を単なる論理的な「環境」以上の目的で使ってしまう
4. Community Cookbookをフォークしてしまう
良い指針があった。
[和訳] 初心者CHEFアンチパターン
http://www.creationline.com/lab/3080
見直すにあたって
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう
2. 会社名つきの巨大なCookbookを作ってしまう
3. "Environments"を単なる論理的な「環境」以上の目的で使ってしまう
4. Community Cookbookをフォークしてしまう
5. Role内でrun_listを管理してしまう
良い指針があった。
[和訳] 初心者CHEFアンチパターン
http://www.creationline.com/lab/3080
見直すにあたって
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう
2. 会社名つきの巨大なCookbookを作ってしまう
3. "Environments"を単なる論理的な「環境」以上の目的で使ってしまう
4. Community Cookbookをフォークしてしまう
5. Role内でrun_listを管理してしまう
6. 無秩序なdata bagを作ってしまう
良い指針があった。
[和訳] 初心者CHEFアンチパターン
http://www.creationline.com/lab/3080
見直すにあたって
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう
2. 会社名つきの巨大なCookbookを作ってしまう
3. "Environments"を単なる論理的な「環境」以上の目的で使ってしまう
4. Community Cookbookをフォークしてしまう
5. Role内でrun_listを管理してしまう
6. 無秩序なdata bagを作ってしまう
7. chef-shellを知らない、使わない
良い指針があった。
[和訳] 初心者CHEFアンチパターン
http://www.creationline.com/lab/3080
見直すにあたって
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう
2. 会社名つきの巨大なCookbookを作ってしまう
3. "Environments"を単なる論理的な「環境」以上の目的で使ってしまう
4. Community Cookbookをフォークしてしまう
5. Role内でrun_listを管理してしまう
6. 無秩序なdata bagを作ってしまう
7. chef-shellを知らない、使わない
8. LWRPを怖がってしまう
良い指針があった。
[和訳] 初心者CHEFアンチパターン
http://www.creationline.com/lab/3080
見直すにあたって
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう
2. 会社名つきの巨大なCookbookを作ってしまう
3. "Environments"を単なる論理的な「環境」以上の目的で使ってしまう
4. Community Cookbookをフォークしてしまう
5. Role内でrun_listを管理してしまう
6. 無秩序なdata bagを作ってしまう
7. chef-shellを知らない、使わない
8. LWRPを怖がってしまう
9. NIH(Not Invented Here)症候群 (外部発祥だから利用しない症候群) に陥ってしまう
良い指針があった。
[和訳] 初心者CHEFアンチパターン
http://www.creationline.com/lab/3080
見直すにあたって
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう
2. 会社名つきの巨大なCookbookを作ってしまう
3. "Environments"を単なる論理的な「環境」以上の目的で使ってしまう
4. Community Cookbookをフォークしてしまう
5. Role内でrun_listを管理してしまう
6. 無秩序なdata bagを作ってしまう
7. chef-shellを知らない、使わない
8. LWRPを怖がってしまう
9. NIH(Not Invented Here)症候群 (外部発祥だから利用しない症候群) に陥ってしまう
10. 孤独なChef使いになってしまう
良い指針があった。
[和訳] 初心者CHEFアンチパターン
http://www.creationline.com/lab/3080
見直すにあたって
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう
2. 会社名つきの巨大なCookbookを作ってしまう
3. "Environments"を単なる論理的な「環境」以上の目的で使ってしまう
4. Community Cookbookをフォークしてしまう
5. Role内でrun_listを管理してしまう
6. 無秩序なdata bagを作ってしまう
7. chef-shellを知らない、使わない
8. LWRPを怖がってしまう
9. NIH(Not Invented Here)症候群 (外部発祥だから利用しない症候群) に陥ってしまう
10. 孤独なChef使いになってしまう
良い指針があった。
[和訳] 初心者CHEFアンチパターン
http://www.creationline.com/lab/3080
 _人人人人人人人人人人_
>ほぼ全部当てはまってた<
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
どうせやるなら、
開発・運用フローも見直そう
あとテストとか、それとテストとか、ついでにテストとか
見直した
こんな感じでやってます
こんな感じでやってます
1. 個々のCookbookはBitbucketのPrivete repositoryにホスト(2014.6.11現在 Cookbook数 約30)

①
こんな感じでやってます
1. 個々のCookbookはBitbucketのPrivete repositoryにホスト(2014.6.11現在 Cookbook数 約30)

2. 変更検知、または深夜に一日一回全てのCookbookをテスト

kitchen-dockerでCentOS6,Amazon Linuxに対して、busser-serverspecによるテスト

テスト結果はHipChatに通知(Jenkins plugin)

②
①
こんな感じでやってます
1. 個々のCookbookはBitbucketのPrivete repositoryにホスト(2014.6.11現在 Cookbook数 約30)

2. 変更検知、または深夜に一日一回全てのCookbookをテスト

kitchen-dockerでCentOS6,Amazon Linuxに対して、busser-serverspecによるテスト

テスト結果はHipChatに通知(Jenkins plugin)

3. 各案件に紐づけてKitchen情報をホスト(git clone→knife solo cookですぐ実行・再現できる状態)

基本的にはBerksfileと、node,role,environment、LWRPを使うための簡単なラッパーを置く程度

②
①
③
こんな感じでやってます
1. 個々のCookbookはBitbucketのPrivete repositoryにホスト(2014.6.11現在 Cookbook数 約30)

2. 変更検知、または深夜に一日一回全てのCookbookをテスト

kitchen-dockerでCentOS6,Amazon Linuxに対して、busser-serverspecによるテスト

テスト結果はHipChatに通知(Jenkins plugin)

3. 各案件に紐づけてKitchen情報をホスト(git clone→knife solo cookですぐ実行・再現できる状態)

基本的にはBerksfileと、node,role,environment、LWRPを使うための簡単な���ッパーを置く程度

4. 現状、特に大したことはしていない。2のテスト結果によって褒めてくれたり、けなされたりして、

一人で黙々とCookbook書いてる時のモチベーション維持とかw

※別の用途ではもう少し仕事してます
②
①
③ ④
実際のユースケース
実際のユースケース
• 適用方法=knife solo

Chef Serverはまだ使っていない
実際のユースケース
• 適用方法=knife solo

Chef Serverはまだ使っていない
• どこまでやるのか?

→基本、アプリケーションのデプロイ以外全て
実際のユースケース
• 適用方法=knife solo

Chef Serverはまだ使っていない
• どこまでやるのか?

→基本、アプリケーションのデプロイ以外全て
• EC2の監視はCloudWatchにカスタムメトリクスをAWS CLIで投げる形が多く、

その辺りもCookbook化している
実際のユースケース
• 適用方法=knife solo

Chef Serverはまだ使っていない
• どこまでやるのか?

→基本、アプリケーションのデプロイ以外全て
• EC2の監視はCloudWatchにカスタムメトリクスをAWS CLIで投げる形が多く、

その辺りもCookbook化している
• RDSのParameterGroup変更や、MySQLユーザ作成などもやる

この辺りは手っ取り早いからとやってしまっているが、

ここでやるのが正しいかと言われると微妙…
見直して特に良かった所
見直して特に良かった所
• Cookbookの開発効率が断然上がった

スケルトン書いて、テスト書いて、

非同期でテストを回しながら書けると効率が全然違う

まさにアプリケーション開発の感覚でサクサク書ける

見直して特に良かった所
• Cookbookの開発効率が断然上がった

スケルトン書いて、テスト書いて、

非同期でテストを回しながら書けると効率が全然違う

まさにアプリケーション開発の感覚でサクサク書ける

• 再利用性が向上した

適切な単位でCookbookを分け、別々のレポジトリにするの大事

(以前は適用順に左右されたり、一部だけ再利用しようとすると問
題が起きたりしていた)

※他との併用が必要ならmetadata.rbに書けば良い

見直して特に良かった所
• Cookbookの開発効率が断然上がった

スケルトン書いて、テスト書いて、

非同期でテストを回しながら書けると効率が全然違う

まさにアプリケーション開発の感覚でサクサク書ける

• 再利用性が向上した

適切な単位でCookbookを分け、別々のレポジトリにするの大事

(以前は適用順に左右されたり、一部だけ再利用しようとすると問
題が起きたりしていた)

※他との併用が必要ならmetadata.rbに書けば良い

• 確信を持って使えるものがあるという安心感

実際に構築・運用する場面で非常に嬉しい
そして今では…
そして今では…
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう

→Clear!!
そして今では…
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう

→Clear!!
2. 会社名つきの巨大なCookbookを作ってしまう

→Crear!!
そして今では…
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう

→Clear!!
2. 会社名つきの巨大なCookbookを作ってしまう

→Crear!!
3. “Environments”を単なる論理的な「環境」以上の目的で使ってしまう

→Clear!!
そして今では…
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう

→Clear!!
2. 会社名つきの巨大なCookbookを作ってしまう

→Crear!!
3. “Environments”を単なる論理的な「環境」以上の目的で使ってしまう

→Clear!!
4. Community Cookbookをフォークしてしまう

→Clear!!
そして今では…
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう

→Clear!!
2. 会社名つきの巨大なCookbookを作ってしまう

→Crear!!
3. “Environments”を単なる論理的な「環境」以上の目的で使ってしまう

→Clear!!
4. Community Cookbookをフォークしてしまう

→Clear!!
5. Role内でrun_listを管理してしまう

→「Roleはバージョン管��されない一時データである」ことが問題なのでOK
そして今では…
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう

→Clear!!
2. 会社名つきの巨大なCookbookを作ってしまう

→Crear!!
3. “Environments”を単なる論理的な「環境」以上の目的で使ってしまう

→Clear!!
4. Community Cookbookをフォークしてしまう

→Clear!!
5. Role内でrun_listを管理してしまう

→「Roleはバージョン管理されない一時データである」ことが問題なのでOK
6. 無秩序なdata bagを作ってしまう

→Clear!!
そして今では…
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう

→Clear!!
2. 会社名つきの巨大なCookbookを作ってしまう

→Crear!!
3. “Environments”を単なる論理的な「環境」以上の目的で使ってしまう

→Clear!!
4. Community Cookbookをフォークしてしまう

→Clear!!
5. Role内でrun_listを管理してしまう

→「Roleはバージョン管理されない一時データである」ことが問題なのでOK
6. 無秩序なdata bagを作ってしまう

→Clear!!
7. chef-shellを知らない、使わない

→Clear!!(自動テストの方が楽なので結局あまり使ってないけど…)
そして今では…
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう

→Clear!!
2. 会社名つきの巨大なCookbookを作ってしまう

→Crear!!
3. “Environments”を単なる論理的な「環境」以上の目的で使ってしまう

→Clear!!
4. Community Cookbookをフォークしてしまう

→Clear!!
5. Role内でrun_listを管理してしまう

→「Roleはバージョン管理されない一時データである」ことが問題なのでOK
6. 無秩序なdata bagを作ってしまう

→Clear!!
7. chef-shellを知らない、使わない

→Clear!!(自動テストの方が楽なので結局あまり使ってないけど…)
8. LWRPを怖がってしまう

→Clear!!(sawanobolyさんのQiita記事きっかけで克服しました)
そして今では…
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう

→Clear!!
2. 会社名つきの巨大なCookbookを作ってしまう

→Crear!!
3. “Environments”を単なる論理的な「環境」以上の目的で使ってしまう

→Clear!!
4. Community Cookbookをフォークしてしまう

→Clear!!
5. Role内でrun_listを管理してしまう

→「Roleはバージョン管理されない一時データである」ことが問題なのでOK
6. 無秩序なdata bagを作ってしまう

→Clear!!
7. chef-shellを知らない、使わない

→Clear!!(自動テストの方が楽なので結局あまり使ってないけど…)
8. LWRPを怖がってしまう

→Clear!!(sawanobolyさんのQiita記事きっかけで克服しました)
9. NIH(Not Invented Here)症候群 (外部発祥だから利用しない症候群) に陥ってしまう

→Clear!!
そして今では…
1. すべてのChefデータを1つの巨大なGitレポジトリに入れてしまう

→Clear!!
2. 会社名つきの巨大なCookbookを作ってしまう

→Crear!!
3. “Environments”を単なる論理的な「環境」以上の目的で使ってしまう

→Clear!!
4. Community Cookbookをフォークしてしまう

→Clear!!
5. Role内でrun_listを管理してしまう

→「Roleはバージョン管理されない一時データである」ことが問題なのでOK
6. 無秩序なdata bagを作ってしまう

→Clear!!
7. chef-shellを知らない、使わない

→Clear!!(自動テストの方が楽なので結局あまり使ってないけど…)
8. LWRPを怖がってしまう

→Clear!!(sawanobolyさんのQiita記事きっかけで克服しました)
9. NIH(Not Invented Here)症候群 (外部発祥だから利用しない症候群) に陥ってしまう

→Clear!!
10. 孤独なChef使いになってしまう

→ここが最後にして最大の問題orz
これから(の悩みw)
これから(の悩みw)
• だいぶ他人に使ってもらうのに良い感じになってきたと思うのだけど、

やっぱり最初の敷居が高いのか触ってもらえない

→勉強会、ハンズオンの実施等、社内・社外(Meetup)絡めてやっていきたい

これから(の悩みw)
• だいぶ他人に使ってもらうのに良い感じになってきたと思うのだけど、

やっぱり最初の敷居が高いのか触ってもらえない

→勉強会、ハンズオンの実施等、社内・社外(Meetup)絡めてやっていきたい

• WEB以外のAWS案件(Windows Server)が増えてきている

→Windows対応ってどんな感じなんでしょう?

これから(の悩みw)
• だいぶ他人に使ってもらうのに良い感じになってきたと思うのだけど、

やっぱり最初の敷居が高いのか触ってもらえない

→勉強会、ハンズオンの実施等、社内・社外(Meetup)絡めてやっていきたい

• WEB以外のAWS案件(Windows Server)が増えてきている

→Windows対応ってどんな感じなんでしょう?

• Chef Server活用

→規模の大きい話が上がってきているのもあるが、

  活用ガイドを読んでそうじゃないパターンでの活用法に魅力を感じた

これから(の悩みw)
• だいぶ他人に使ってもらうのに良い感じになってきたと思うのだけど、

やっぱり最初の敷居が高いのか触ってもらえない

→勉強会、ハンズオンの実施等、社内・社外(Meetup)絡めてやっていきたい

• WEB以外のAWS案件(Windows Server)が増えてきている

→Windows対応ってどんな感じなんでしょう?

• Chef Server活用

→規模の大きい話が上がってきているのもあるが、

  活用ガイドを読んでそうじゃないパターンでの活用法に魅力を感じた

• 個々のCookbookは十分にテストしているが、

やっぱり本番適用直前にもテストしたい

→AWSでCookbook単位じゃないテストの方法って、

 Vagrant + Jenkins の CI を AWS でも回す(naoyaのはてなダイアリー) 

 http://d.hatena.ne.jp/naoya/20130521/1369102714

 これが今も鉄板ですか?
以上
ご質問・アドバイス等あればお願いします!

More Related Content

「クラウド本気で始めました」なSIerのChef活用と実践~Chefアンチパターンとの戦い~