24
Copyright © NIFTY Corporation All Rights Reserved. ィ社内の Chef 利用について 2012.7.21 ィ株式会社 竹内 豪 (@tily)

ニフティ社内の Chef 利用について

Embed Size (px)

DESCRIPTION

2011年7月21日(土) 開催 DevLOVE Chef de DevOps 発表資料。 NIFTY Cloud 向け Cookbook の紹介と、Chef のテストフレームワークの話が中心です。

Citation preview

Page 1: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved.

ニフティ社内の Chef 利用について2012.7.21

ニフティ株式会社竹内 豪 (@tily)

Page 2: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

アジェンダ

1. 自己紹介

2. NIFTY Cloud Cookbook

3. Chef のテストについて調べてみた

2

Page 3: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

1.自己紹介

Page 4: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

自己紹介

・竹内 豪 (Twitter ID: @tily)

・もともと Web エンジニア (Dev 寄り)→ SNS エンジンやソーシャルゲームの開発/運用

・社内で NIFTY Cloud を効率的に利用する取り組み→ クラウド系の部署へ

・プライベートでもいろいろ変なものを作ってますブログ:http://d.hatena.ne.jp/tily

4

Page 5: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

Chef 関連の活動 ~ knife-nc

knife-ec2 の NIFTY Cloud 版

5

knife

ruby インスタンス A

管理サーバ Chef サーバ

インスタンス A

NIFTY Cloud

validator.pem

API 経由でインスタンス作成

SSH 経由でブートストラップ

validator.pem

rubygemschefclient

Page 6: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

Chef 関連の活動 ~ ドキュメント日本語化

主要ドキュメントの 30% 程度。協力者募集中です

6

Page 7: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

Chef 関連の活動 ~ 日本 Chef ユーザ会

DevOps Day TOKYO 2012 で発足今のところ目立った活動は特にしていませんが、ぜひ何かやりましょう

7

Page 8: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

2. NIFTY Cloud 向け Cookbook

Page 9: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

NIFTY Cloud 社内利用の問題点

同じような構築手順の繰り返し・管理画面にログインしてポチポチ FW 設定を追加したり・10 サーバにログインして同じユーザの追加を行ったり

9

→ インフラ構築の自動化・PoolParty・AWS CloudFormation

Page 10: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

poolparty の例

pool "myapp" docloud "app" do

using :ec2instances 1..1security_group do

authorize :from_port => 22, :to_port => 22end

endend

Ruby の DSL 形式でインフラ構造を表現

Page 11: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

poolparty の例

{"AWSTemplateFormatVersion" : "2010-09-09",/* 省略 */"Resources" : {

"Ec2Instance" : {"Type" : "AWS::EC2::Instance","Properties" : {

"ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]},"SecurityGroupIds" : [{ "Ref" : "InstanceSecurityGroup" }],"SubnetId" : { "Ref" : "SubnetId" },"KeyName" : { "Ref" : "KeyName" }

}},"InstanceSecurityGroup" : {

"Type" : "AWS::EC2::SecurityGroup","Properties" : {

"VpcId" : { "Ref" : "VpcId" },/* 省略 */

JSON 形式でインフラ構造を表現

Page 12: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

NIFTY Cloud 社内利用の問題点

初期構築だけでなく、運用に関するタスクが山盛り・セキュリティパッチ適用・セキュリティチェック・アカウント棚卸し

12

→ 構成管理ツール・Puppet・Chef

Page 13: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

解決策

NIFTY Cloud 向け Cookbook

13

Page 14: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

概要図

JSON{

“instance”: [{ /* インスタンス 1 の設定 */ },{ /* インスタンス 2 の設定 */ },{ /* インスタンス 3 の設定 */ },{ /* インスタンス 4 の設定 */ }

],“security_group”: [{ /* ファイアウォール 1 の設定 */},{ /* ファイアウォール 2 の設定 */}

],“load_balancer”: [{ /* ロードバランサ 1 の設定 */},{ /* ロードバランサ 2 の設定 */}

]}

NIFTY Cloud向け

Cookbook

JSON クラウド

LB

Chef 実行 API 経由で作成

Page 15: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

解決策

15

〇 クラウドインフラ構造をテンプレート (JSON) で管理→ テンプレートの使いまわし、作業効率化

〇 初期構築~構成管理までを Chef でシームレスに管理→ 運用に強いフレームワーク

・Chef の Cookbook という形で初期構築ツールを実装→ 基本的な NIFTY Cloud 上リソースの作成・削除

- サーバ、ファイアウォール、ロードバランサ、ディスク

Page 16: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential 16

chef-solo 実行機能

{"run_list": "recipe[nc::manager]","nc": {

"resource": {"instance": [

{"instance_id" : "server01","image_id" : 14,“chef_solo”: {

“json_attributes”: {“run_list”: [“recipe[apache]”,“recipe[mysql]”,“recipe[php]”

]}

}/* … */

インスタンスで実行したいchef-solo の内容を直接記述

Page 17: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

NIFTY Cloud 向け Cookbook の仕組み

管理サーバ Web サーバ

インスタンス A

NIFTY Cloud

API 経由でインスタンス作成

chefsolo

NIFTY Cloud向け Cookbook

Apache Cookbook

MySQL Cookbook

PHP CookbookJSON ファイル

Apache

PHP MySQL

Page 18: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential 18

デモ

デモ

Page 19: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

3. Chef のテストについて調べてみた

Page 20: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

Chef のテストについて調べてみた

“Test-Driven Infrastructure with Chef”

・インフラ自動構築システムのテスト=コストが高い

→ 物理サーバの購入→ テスト環境の構築

・クラウドの台頭によってテスト自動化が現実的に→ 仮想サーバを安価に構築→ API によりテスト環境構築も自動化可能

Page 21: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

さまざまなテストツール

・toft・cucumber-nagios + cuken・vmth・cucumber-chef- クラウド(現在は AWS のみ) 上でテスト- LXC で 1 インスタンスの中に複数サーバを構築

→ サーバ間をまたいだテストも実行可能

※LXC (Linux Containers、出典:Wikipedia 日本語版)一つのコントロールホスト上で、複数の隔離された Linux シス

テム(コンテナ)を走らせる、OSレベル仮想化のソフトウェア。

Page 22: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

cucumber-chef の主要コマンド

・インストールgem install cucumber-chef

・便利コマンドcucumber-chef displayconfig # 現在の設定表示cucumber-chef setup # AWS 上にテスト環境構築cucumber-chef test テスト名 # テスト実行

Page 23: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential

Cucumber-chef のテスト例

Feature: Technical team members can log into team serverSo that we are more efficient with our timeAs a technical teamWe can connect to a shared server to collaborate on client work

Scenario: Users can connect to server via ssh keyGiven a newly bootstrapped serverWhen the technical users recipe is appliedThen a user should be able to ssh to the server

Cucumber なので自然な英語でテストが表現される。

「サーバを作成して technical_users レシピすればSSH ログインできること」をテストするフィーチャ

Page 24: ニフティ社内の Chef 利用について

Copyright © NIFTY Corporation All Rights Reserved. Confidential