SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
Fabric Essentials
Yoshinari Takaoka
Kauli.inc
Agenda
目的:Capistrano から Fabric に移行したので
基本的なプラクティスを共有したい
●

Fabric の紹介

●

チュートリアル

●

Kauli のプラクティス

●

これからの展開

●

まとめ
Fabric の紹介
Fabric?
●

●

ssh で繋がったサーバ群にコマンドを一気に実行
するツール
それなりの台数が並んだサーバ群のシステム管理
やデプロイに使われる

●

http://fabfile.org/

●

同種のソフト
- Ruby の Capistrano や mina
- Perl の Cinnamon など
Fabric に移行した理由
●

Python で楽に書ける
- Kauli は Python の会社

●

Capistrano と出来ることにあまり差異はないようだ
- Capistrano でも現在込み入ったことはしていない
- Ruby なソフトウェアは バージョンアップ的な意味で 運用にあ
まり優しくない
Capistrano とやれることに差がないのであれば
移行してメンテできる人を増やした方がよい
チュートリアル
インストールは簡単(Ubuntu 12.04)
$ apt-get install build-essential python-dev
python-virtualenv
$ virtualenv fabrictest
$ cd fabrictest
$ source bin/activate
$ pip install fabric
以下、この環境を前提に説明します。
まずは Hello World

●

●

public な callableオブジェクト (関数やクラスな
ど) を実行単位(タスク) として定義
local 関数は localhost でシェルコマンドを実行
... 実は古いスタイルだけどね(後述)
まずは Hello World(2)
実際に以下をやってみる
●

fabfile.py に保存

●

task を一覧する
$ fab -l

●

タスクを実行する
$ fab hello

... デフォルト。変更可
リモートでコマンドを実行
●

run と sudo 関数をタスクの中で呼び出せばよい。
これらはリモートでコマンドを実行するときの基本。
local と区別する
リモートでコマンドを実行(2)
●
●
●

前のページのコードを実際に実行してみる
ssh で接続できることが前提
実行先のホストをどこかで指定する必要がある
- 指定する方法多数。Fabric を使うにあたっての
肝なのでこの後詳述。
実行先のホストを指定する方法(1)
●

●

ホスト単位
- 個々のホストを指定する
ロール(Role)単位
- 同じ役割の複数のホストをひとまとめにして
名前を付け、それを指定する
- fabfile.py 内で env.roledefs の定義が必須
実行先のホストを指定する方法(2)
●

env 変数でホストやロールを指定する
実行先のホストを指定する方法(3)
●

デコレータでホストやロールを指定する
実行先のホストを指定する方法(4)
●

コマンドラインからホストやロールを指定可
$ fab -H host1 hello
$ fab -R role1 hello
ホスト指定の裏技
$ fab hello:hosts=”host1,host2”
$ fab hello:roles=”role1”
●

●

●

上記はこれまで説明してきたどの指定方法よりも優
先される
デコレータの指定などを無視して意図しない動作を
させることが可能
事故の元なので使うべきではない。てか使うな。
ホスト指定方法と優先順位
               (優先順位高)
●
●
●
●

ホスト指定の裏技
デコレータ
env.hosts, env.roles 変数
コマンドライン
               (優先順位低)
優先順位を知った上でホスト指定を組み立てる
ことが重要
例題1:
Q. どのホストが呼び出されるか?
$ fab hello
def hello():
run(“echo 'hello world'”)
デコレータや env.hosts, env.roles が指定されて
いないと、どこも指定されていないのと同義
例題2:
Q. どのホストが呼び出されるか?
$ fab -H host1 hello
def hello():
run(“echo 'hello world'”)
例題3:
Q. どのホストが呼び出されるか?
$ fab -H host1 hello
@host('host2')
def hello():
run(“echo 'hello world'”)
例題4:
Q. どのホストが呼び出されるか?
$ fab -H host1 hello
env.hosts = ['host3','host4']
@host('host2')
def hello():
run(“echo 'hello world'”)
例題5:
Q. どのホストが呼び出されるか?
$ fab hello
env.roledefs = { 'role1': [ 'host1','host2','host3'] }
@host('host2')
@roles('role1')
def hello():
run(“echo 'hello world'”)
例題6:
Q. どのホストが呼び出されるか?
$ fab hello:hosts=”host2, host3”
@hosts('host1')
def hello():
run(“echo 'hello world'”)
ホスト指定まとめ(1)
●

ホスト指定の裏技は使うな
- デコレータや env 変数の設定を全て上書きでき
るので意図しない動作を産む可能性大

●

ホスト指定の裏技を除けば、実質デコレータが一番
優先順位が高い

●

ドキュメントちゃんと嫁

●

素振り大事。実際に動かして挙動を押さえておく。
ホスト指定まとめ(2)
- ホストやロールについて
http://docs.fabfile.org/en/1.8/usage/execution.html#defining-host-lists

- ホスト指定の優先順位
http://docs.fabfile.org/en/1.8/usage/execution.html#order-of-precede
nce
Kauli でのプラクティス
Kauli でのプラクティス
●

指定している設定値

●

Capistrano の “on” や “with” の代替

●

戻り値の検査

●

複数のタスクを組み合わせて一度に実行
指定している設定値(1)
●

env 変数で指定

●

直感的でわかりやすい
env.colorize_errors = True
- エラーに色を付けて知らせる
env.warn_only = True
- エラーに警告出してスルー(デフォルトは即終了)
指定している設定値(2)
env.parallel = True
- multiprocessing モジュールによる並列実行
- @parallel デコレータによる指定が不要に
env.pool_size = 5
- 同時に実行させるプロセス数
- CPU の数と相談しましょう
指定している設定値(3)
env.disable_known_hosts = True
- ssh の known_hosts を無視する
- man in the middle attack に対して無防備になるので注意
- 多数のホストに対して実行する場合に速度的な問題が出た
場合は試すと良い
env.timeout = 3
- ssh の接続タイムアウト(秒)
- 子プロセスによる並列実行を前提にしているため
接続待ちのプロセスがたまると LA があがるため短めに。
戻り値の検査
●

デフォルトでは、実行したコマンドの戻り値が 0 で
あれば正常と見なし、それ以外ならエラー
それに従わないコマンドもそれなりに存在する

●

コマンドの戻り値が undoc だと調べるのがたるい
- git とか puppet とか
- ソース読む羽目になったり
Capistrano の “on” や “with” の代替
cap> with role1 uname -a
$ fab -R role1 cmd:'uname -a'
cap> on host1 uname -a
$ fab -H host1 cmd:'uname -a'
Capistrano の “on” や “with” の代替(2)
●

実装は簡単

●

コマンドラインからタスクには引数を渡せる
- fab -H host1 cmd:'uname -a'

●

引数の部分にカンマが含まれている場合は要エスケープ
- fab -H host1 cmd:'ls -d /path/{to,hoge}/'
複数のタスクを組み合わせて一度に実行(1)

●
●

●
●

ネストした関数で複数のタスクを実行
複数のホストを組み合わせたタスクを同時に実行
させたい場合に重宝
execute 関数を使う
ホスト指定と組み合わせると意図しない動作になり
がちなので注意
複数のタスクを組み合わせて一度に実行(2)

●

以下のようにホスト指定をするとデプロイが3回行われる
$ fab -H host1,host2,host3 deploy
複数のタスクを組み合わせて一度に実行(3)
●

Kauli では、この手のタスクでは -R と -H によるホ
スト指定を禁止している
これからの展開
これからの展開
●

モジュール化

●

新しいスタイルのタスク定義へ
モジュール化(1)

●

●

これまでは fabfile.py 1ファイルにタスクを書く前提で説明をしてきた
が、Fabric では Python 流にモジュールを区切ることが可能
fabfile.py からモジュールを import すればドット
区切りでタスクを呼び出せる
モジュール化(2)
●

いろいろなプロダクトのタスクを分割するのに
役立つ
$ fab some_product.deploy
$ fab infra.pull_some_file

… みたいな感じ

●

fabfile.py への一極集中を解消

●

新しいスタイルのタスク定義が必須
新しいスタイルのタスク定義(1)
●

既存の関数ベースのタスク定義に @task デコレー
タを付ける

●

または、Task クラスを継承してクラスを作る

●

現在新スタイルのタスクは未使用

●

これまで説明してきた古いスタイルのタスク定義と
は共存不可
- ひとつでも新しいスタイルのタスクがあると、古い
スタイルのタスクはリストから外れ、使えなくなる
新しいスタイルのタスク定義(2)
まとめ
●
●

●

Fabric は Python で簡単に書ける
ホストの指定方法が肝。これさえ把握すれば多分ど
うとでもなる
Kauli では特に凄いことをしてるわけではない
皆で良くしていくもの。 Patches welcome.

●

モジュール化の方向に持って行きたい

●

ドキュメントもよく読みましょう
- http://docs.fabfile.org/
ご清聴ありがとうございました。

Más contenido relacionado

La actualidad más candente

Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)CLARA ONLINE, Inc.
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料Yasutaka Hamada
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料Yasutaka Hamada
 
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会Yasutaka Hamada
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことTrinityT _
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたatk1234
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Sho A
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Ransui Iso
 
Apache Auroraの始めかた
Apache Auroraの始めかたApache Auroraの始めかた
Apache Auroraの始めかたMasahito Zembutsu
 
クックパッドのスケーリング
クックパッドのスケーリングクックパッドのスケーリング
クックパッドのスケーリングSatoshi Takada
 
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなしMasahiro NAKAYAMA
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Ransui Iso
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistranokumachang_LL
 
お手軽並列処理
お手軽並列処理お手軽並列処理
お手軽並列処理博文 斉藤
 
今日から使い始めるChef
今日から使い始めるChef今日から使い始めるChef
今日から使い始めるChefMasahiro NAKAYAMA
 
シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairNaoya Inada
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016Hideki Saito
 

La actualidad más candente (20)

Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
 
Puppet on AWS
Puppet on AWSPuppet on AWS
Puppet on AWS
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
 
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのこと
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみた
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
Apache Auroraの始めかた
Apache Auroraの始めかたApache Auroraの始めかた
Apache Auroraの始めかた
 
クックパッドのスケーリング
クックパッドのスケーリングクックパッドのスケーリング
クックパッドのスケーリング
 
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4
 
NDS#31
NDS#31NDS#31
NDS#31
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
 
お手軽並列処理
お手軽並列処理お手軽並列処理
お手軽並列処理
 
今日から使い始めるChef
今日から使い始めるChef今日から使い始めるChef
今日から使い始めるChef
 
シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnair
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016
 

Similar a Fabric Essentials

XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用Shinya Okano
 
Fabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFesFabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFesSho Shimauchi
 
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Emma Haruka Iwao
 
「Ansible on Azure入門」資料
「Ansible on Azure入門」資料「Ansible on Azure入門」資料
「Ansible on Azure入門」資料Hidetoshi Hirokawa
 
Open stack reference architecture v1 2
Open stack reference architecture v1 2Open stack reference architecture v1 2
Open stack reference architecture v1 2Dell TechCenter Japan
 
LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!KLab株式会社
 
コンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのかコンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのかgree_tech
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例maebashi
 
最新版Hadoopクラスタを運用して得られたもの
最新版Hadoopクラスタを運用して得られたもの最新版Hadoopクラスタを運用して得られたもの
最新版Hadoopクラスタを運用して得られたものcyberagent
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?ogawatti
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
Eureka go 2015_12_12
Eureka go 2015_12_12Eureka go 2015_12_12
Eureka go 2015_12_12matsuo kenji
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来Kazuto Kusama
 
Jenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdiJenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdi昌桓 李
 
Capistrano in practice - WebCareer
Capistrano in practice - WebCareerCapistrano in practice - WebCareer
Capistrano in practice - WebCareerKyosuke MOROHASHI
 
サーバ構築自動化 On aws sqaleの場合
サーバ構築自動化 On aws   sqaleの場合サーバ構築自動化 On aws   sqaleの場合
サーバ構築自動化 On aws sqaleの場合Ryo Kuroda
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
Rubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェアRubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェアKouhei Sutou
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 

Similar a Fabric Essentials (20)

XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
Fabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFesFabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFes
 
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
 
「Ansible on Azure入門」資料
「Ansible on Azure入門」資料「Ansible on Azure入門」資料
「Ansible on Azure入門」資料
 
Open stack reference architecture v1 2
Open stack reference architecture v1 2Open stack reference architecture v1 2
Open stack reference architecture v1 2
 
Chef
ChefChef
Chef
 
LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!
 
コンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのかコンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのか
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
最新版Hadoopクラスタを運用して得られたもの
最新版Hadoopクラスタを運用して得られたもの最新版Hadoopクラスタを運用して得られたもの
最新版Hadoopクラスタを運用して得られたもの
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
Eureka go 2015_12_12
Eureka go 2015_12_12Eureka go 2015_12_12
Eureka go 2015_12_12
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
 
Jenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdiJenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdi
 
Capistrano in practice - WebCareer
Capistrano in practice - WebCareerCapistrano in practice - WebCareer
Capistrano in practice - WebCareer
 
サーバ構築自動化 On aws sqaleの場合
サーバ構築自動化 On aws   sqaleの場合サーバ構築自動化 On aws   sqaleの場合
サーバ構築自動化 On aws sqaleの場合
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Rubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェアRubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェア
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 

Fabric Essentials