2014/05/24 第8弾 週末ランサーズ Tomonari NAKAMURA
Infrastructure as Code
ツールスタック / ヌーラボの事例
http://www.flickr.com/photos/statuelibrtynps/6276757947/
自己紹介
•名前:中村知成 ( @ikikko )
•所属
•株式会社ヌーラボ
•日本Jenkinsユーザ会
•推しメン:さっしー 現在、総選挙
速報1位!
• 
• 
• 
• 
• 
• 
• 
in ヌーラボ
!
•アプリ寄りの開発者
•インフラ方面も関わり出す
!
•Jenkinsやビルド環境の整備
アジェンダ
•背景
•Infrastructure as Code とは
•関連ツールスタック
•ヌーラボでの事例
背景
https://speakerdeck.com/nulabinc/yun-yong-devopsshi-dai-wosheng-kinukutameni
背景
•インフラそこまで詳しくない
•既存の手順書とか、シェルスクリ
プトはあった
•けど、見てもよく分からない><
サ
|
バ
背景
•インフラ周りが整備されてると嬉
しいな
•簡単に試せる環境とか
•いつでも動くように、スクリプトがメ
ンテされてるとか
!
!
!
Infrastructure
as Code
アジェンダ
•背景
•Infrastructure as Code とは
•関連ツールスタック
•ヌーラボでの事例
Infrastructure as Code
•インフラをコードとして表現
•アプリ開発で培った開発方法論を、
インフラ領域にも適用可
•テスト / 継続的インテグレーション
•コードレビュー / Pull Request
参考
•naoya さんのブログ記事
• http://d.hatena.ne.jp/naoya/20131215/1387090668
•mizzy さんの Web+DB Press  
「テスト駆動インフラ」
• http://gihyo.jp/magazine/wdpress/archive/2014/vol80
実は僕も
第3特集書いてます
アジェンダ
•背景
•Infrastructure as Code とは
•関連ツールスタック
•ヌーラボでの事例
各ツールの関連
Vagrant
•VirtualBoxやAWSなどの仮想マ
シンをコマンドで手軽に扱える
•AnsibleやChefとも連携可能
Vagrant.configure(2)	
  do	
  |config|	
  
!
	
  	
  config.vm.provision	
  "chef_solo"	
  do	
  |chef|	
  
	
  	
  	
  	
  chef.cookbooks_path	
  =	
  "cookbooks"	
  
	
  	
  	
  	
  chef.add_recipe	
  "httpd"	
  
	
  	
  end	
  
!
end
Ansible
•Python製のサーバ構成管理ツール
•冪等性: 何度実行しても結果は同じ
•サーバ側はPythonとsshdだけ
-­‐	
  name:	
  install	
  requirement	
  system	
  packages	
  
	
  	
  action:	
  yum	
  name={{	
  item	
  }}	
  
	
  	
  with_items:	
  
	
  	
  	
  	
  -­‐	
  make	
  
	
  	
  	
  	
  -­‐	
  gcc	
  
	
  	
  	
  	
  -­‐	
  curl
serverspec
•RSpec風のサー
バ構成管理テ
ストツール
•稼働前 / 稼働
中のサーバに
テスト
describe	
  "#{ENV['TARGET_HOST']}.spec"	
  do	
  
!
	
  	
  describe	
  service('tomcat')	
  do	
  
	
  	
  	
  	
  it	
  {	
  should	
  be_running	
  	
  	
  }	
  
	
  	
  	
  	
  it	
  {	
  should_not	
  be_enabled	
  }	
  
	
  	
  end	
  
!
	
  	
  describe	
  port(8080)	
  do	
  
	
  	
  	
  	
  it	
  {	
  should	
  be_listening	
  }	
  
	
  	
  end	
  
!
...
Jenkins
•継続的インテグレーションツール
•コミット時や定期実行で自動ビルド
ハンズオンで実践!
https://www.flickr.com/photos/ochre_jelly/7066887773
ハンズオン +α
アジェンダ
•背景
•Infrastructure as Code とは
•関連ツールスタック
•ヌーラボでの事例
ワークフロー
http://nulab-inc.com/ja/blog/nulab/nulab-immutable-infrastructure_1/
Packer
•イメージ (AMI)
作成ツール
•Ansibleを起動
時に実行可能
{	
  
	
  	
  "builders":	
  [{	
  
	
  	
  	
  	
  "type":	
  "amazon-­‐ebs",	
  
	
  	
  	
  	
  "region":	
  "us-­‐west-­‐2",	
  
	
  	
  	
  	
  "source_ami":	
  "ami-­‐ccf297fc",	
  
	
  	
  	
  	
  "instance_type":	
  "m1.small",	
  
	
  	
  	
  	
  "ssh_username":	
  "ec2-­‐user",	
  
	
  	
  	
  	
  "ami_name":	
  "base	
  {{isotime}}"	
  
	
  	
  }],	
  
	
  	
  "provisioners":	
  [	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  "type":	
  "ansible-­‐local",	
  
	
  	
  	
  	
  	
  	
  "playbook_file":	
  "ansible/ami.yml",	
  
	
  	
  	
  	
  	
  	
  "role_paths":	
  [	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "ansible/roles/base"	
  
	
  	
  	
  	
  	
  	
  ]	
  
	
  	
  	
  	
  }	
  
	
  	
  ]	
  
}
Fabric
•Python製のデプロイツール
•シェルコマンドを列挙していく、
シンプルな記述
@task	
  
def	
  start_tomcat():	
  
	
  	
  sudo('rm	
  -­‐f	
  /usr/java/tomcat/temp/*.{index,data}')	
  
	
  	
  sudo('service	
  tomcat	
  start’)	
  
	
  	
  print	
  green("Tomcat	
  started!!!")
Typetalk
•JenkinsやAnsibleの実行結果を通知
•   /    プラグインも提供
!
!
!
•Hubotで、Typetalk->Jenkinsの連携も
チャットってそんなに重要?
Infrastructure as Codeの先には
DevOpsが見えてくる
DevOpsで関わる全ての人が手軽に扱える
チャットは、ますます重要に!
ご清聴
ありがとうございました!

Infrastructure as code ~ ツールスタック / ヌーラボの事例 ~