狠狠撸

狠狠撸Share a Scribd company logo
Devops @ Gengo -- AWS日本語初会議
DevOps @Gengo
冨田陽介
@seikoudoku2000
DevOps歴6ヶ月
AWS歴6ヶ月
好きなサービス:EC2
好きなチーム:ペイトリオッツ
Company

Chikirin の日記
Gengo 訪問!
OUTLINE
Our setup
ChefとVagrant
課題
今後
OUTLINE
Our setup
ChefとVagrant
課題
今後
Dev 7人、DevOps 2人、QA1人
60 + production servers (120 total )
about 10 repos
3 environments (Git flow)
15 + active contributors
nginx proxy

WordPress webアプリ

APIサーバ

webアプリ
その2

APIサーバ
その2

その他色々
OUTLINE
Our setup
ChefとVagrant
課題
今後
API or コンソール

+ omnibus plugin
share
folder
Sharing recipe on servers and local
Production/QA

Local

Knife-Solo

Vagrant

roles/api.rb

Vagrantfile

run_list(

config.vm.provision :chef_solo do |chef|
chef.add_recipe "base::git"

"role[base]",

chef.add_recipe "nginx"

"recipe[nginx]",
"recipe[python]",

chef.add_recipe "php_pack"

"recipe[repos::api]",

chef.add_recipe "python"

"recipe[monit]",

chef.add_recipe "repos::api"
:

"recipe[monit::nginx]",

:

"recipe[monit::api]"

:

)

:
end
Changing server configuration in a template
cookbooks/repos/templates/api.erb
-----<%- case node[‘environment'] %>
<%- when "live" %>

Define in nodes/xxx.json

api_url = 'http://api.gengo.com'
<%- when "qa" %>
api_url = 'http://yyy.api.gengo.com'
<%- when "dev" %>
api_url = 'http://localhost:8080'
<%- end %>
------

or
Vagrantfile
Changing Resource in a Recipe.
cookbooks/repos/recipes/api/default.rb
if node['environment'] == "dev"
git "#{node['repos']['home']}/#{project}" do
repository "git@github.com:gengo/api.git"
ssh_wrapper "/tmp/private_code/wrap-ssh4git.sh"
action :checkout
notifies :restart, "service[#{project}]"
end
else
deploy "/mnt#{node['repos']['home']}/#{project}" do
ssh_wrapper "/tmp/private_code/wrap-ssh4git.sh"
repo 'git@github.com:gengo/api'
branch "#{node['repos']['branch']}"
keep_releases 3
notifies :restart, "service[#{project}]"
end
end
感想
● Good
○ 動くコードが残る。(コードの壁 < 言葉の壁 )
○ マニュアル作業を(段々)しなくなる。
○ いつでも作り直せるという安心感。
( = disposable infrastructure)

● Bad / Question
○ デプロイだけしたい時にちょっと微妙。
○ Recipeのテスト書くべき? (監視とは継続的なテストである)
○ 冪等性?
disposable > idempotence
OUTLINE
Our setup
ChefとVagrant
課題
今後
Devops @ Gengo -- AWS日本語初会議
Vagrantfileのメンテが大変
● サーバ / ローカルの二重メンテ
○ レシピの変更はサーバに流して終わりになりがち。
○ Vagrantの起動がよくエラーになる。。

● アプリケーションは進化する/増えていく
○ 処理がVangrantfileに一極集中。全体が見えない。
 ? “Divide and Conquer”
○ 起動時間がどんどん長くなる
○ メンテが益々大変に。
不安定な開発環境構築
→ 作業の属人化
  (agileなのに)チームのagilityの低下
OUTLINE
Our setup
ChefとVagrant
課題
今後
Docker
?Linuxコンテナ(LXC)のラッパー
?軽量 / 起動が速い
→多くのコンテナを起動することが容易(らしい)
Vagrantfileのメンテが大変
● サーバ /ローカルの二重メンテ
○ レシピの変更はサーバに流して終わりになりがち。
○ Vagrantの起動がよくエラーになる。。
?サーバで流したレシピをそのままコンテナに流す

● アプリケーションは進化する/増えていく
○ 処理がVangrantfileに一極集中。全体が見えない。
 ? “Divide and Conquer”
○ 起動時間がどんどん長くなる
○ メンテが益々大変に。
?コンテナが増えるだけ。他には影響しない。
必要に応じて連携

起動
参照

起動
础奥厂の话があまりなくてすいません、、
Any Questions?

@gengo, @gengo_ja
https://github.com/gengo
http://gengo.doorkeeper.jp
Devops @ Gengo -- AWS日本語初会議
Devops @ Gengo -- AWS日本語初会議
Devops @ Gengo -- AWS日本語初会議
Devops @ Gengo -- AWS日本語初会議
Development Flow

More Related Content

Devops @ Gengo -- AWS日本語初会議