More Related Content
PDF
PPTX
PPTX
PDF
Dockerfile を書くためのベストプラクティス解説編 PDF
Infrastructure as Code (IaC) 談義 2022 PDF
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24 PPTX
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした PPTX
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら What's hot
PDF
PDF
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams PDF
クラウドオーケストレーション「OpenStack Heat」に迫る! PDF
PDF
忙しい人の5分で分かるDocker 2017年春Ver PDF
Dockerfileを改善するためのBest Practice 2019年版 PPTX
PDF
PDF
OSSで出来るインシデント管理とサービス資産管理及び構成管理の自動化 PPTX
PDF
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回) PDF
AWS Black Belt Techシリーズ リザーブドインスタンス & スポットインスタンス PDF
Ansibleはじめよぉ -Infrastructure as Codeを理解- PDF
Google Cloud Dataflow を理解する - #bq_sushi PPTX
PDF
PPTX
Spring CloudとZipkinを利用した分散トレーシング PDF
マイクロサービスバックエンドAPIのためのRESTとgRPC PDF
PPTX
AWS Organizations連携サービスの罠(Security JAWS 第26回 発表資料) Similar to 2日間Fabricを触った俺が
色々解説してみる
PPT
PPTX
PDF
PDF
KEY
PPTX
PDF
Fabric + Amazon EC2で快適サポート生活 #PyFes PDF
PDF
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版 PDF
PDF
PDF
PPTX
「自動化...か、かっこいいタル」(憧れ)から始める自動化 PDF
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing PDF
PPTX
Open Source System Administration Framework - Func PDF
PDF
KEY
2日間Fabricを触った俺が
色々解説してみる
- 1.
- 2.
- 3.
- 4.
- 5.
#!/usr/bin/env
python
#
-‐*-‐
coding:
utf-‐8
-‐*-‐
from
fabric.api
import
env,
local,
run
import
difflib
env.hosts
=
[
‘mydevelopment.jp'
]
env.key_filename
=
[
'~/.ssh/mydevelopment.rsa'
]
env.user
=
'airtoxin'
env.port
=
9724
def
get_date():
remote_date
=
run(
'date'
)
local_date
=
local(
'date',
capture=True
)
for
line
in
difflib.ndiff(
[
remote_date
],
[
local_date
]
):
print
line
Example of Fabric
fabfile.py
サーバー実行コマンド
タスク名
ローカル実行コマンド
Pythonで実行結果を処理
- 6.
- 7.
- 8.
コマンド
• リモートでコマンドを実行 →run(‘command’)
• ローカルでコマンドを実行 → local(‘command’)
• sudoでコマンドを実行 → sudo(‘command’)
• ディレクトリの移動 → with cd(‘dirname’):
• ファイルアップロード → put(‘localpath’, ‘remotepath’)
• ファイルダウンロード → get(‘remotepath’, ‘localpath’)
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
Shell vs Fabric
ShellFabric
導入コスト
-
プリインストール
低∼中程度
Pythonのpipによる
可読性
低い
文法, ワンライナー
高い
Pythonのコード
文字列操作
難∼普通程度
perl, awk等を利用
楽
ライブラリ等を利用
学習コスト
無し∼高い
普段使い/初心者
低い∼普通
リスト内包表記, decorator
情報量
多い
言わずもがな
中
ほぼ枯れている
- 17.
Shell vs Fabric
ShellFabric
導入コスト
-
プリインストール
低∼中程度
Pythonのpipによる
可読性
低い
文法, ワンライナー
高い
Pythonのコード
文字列操作
難∼普通程度
perl, awk等を利用
楽
ライブラリ等を利用
学習コスト
無し∼高い
普段使い/初心者
低い∼普通
リスト内包表記, decorator
情報量
多い
言わずもがな
中
ほぼ枯れている
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
Example of Fabric
fabfile.py
サーバー実行コマンド
タスク名
ローカル実行コマンド
Pythonで実行結果を処理
#!/usr/bin/env
python
#
-‐*-‐
coding:
utf-‐8
-‐*-‐
from
fabric.api
import
env,
local,
run
import
difflib
env.hosts
=
[
‘mydevelopment.jp'
]
env.key_filename
=
[
'~/.ssh/mydevelopment.rsa'
]
env.user
=
'airtoxin'
env.port
=
9724
def
get_date():
remote_date
=
run(
'date'
)
local_date
=
local(
'date',
capture=True
)
for
line
in
difflib.ndiff(
[
remote_date
],
[
local_date
]
):
print
line
- 27.
- 28.
- 29.
- 30.
実行タスク
.
├── .gitignore
└── fabfile
├──__init__.py
├── deploy.py
├── hosts.py
├── monitor.py
└── test.py
deploy.py
@task( default=True )
def deploy():
with cd( '/path/to/myapp' ):
run( 'git checkout .' )
run( 'git pull' )
run( 'npm install' )
run( 'npm run compile' )
run( 'forever restart app.js' )
@task
def tagging():
hostname = local( 'hostname' )
run( 'git tag {host}-
{datetime}'.format( host=hostname,
datetime=now ) )
run( 'git push --tags' )
- 31.
.
├── .gitignore
└── fabfile
├──__init__.py
├── deploy.py
├── hosts.py
├── monitor.py
└── test.py
__init__.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import hosts
import deploy
import monitor
import test
- 32.
Task List
fu:fabric_test$ fab-l
Available commands:
deploy
deploy.deploy
deploy.tagging
hosts.production
hosts.staging
monitor
monitor.all
monitor.disc_capacity
monitor.load_average
@task( default=True )
def deploy():
- 33.
実行コマンド
$ fab [task1][task2] [task3]…
$ fab hosts.staging deploy
stagingサーバー群に対してdeployコマンド
が実行される
hostを直接指定するなら
$ fab -H myhost [tasks…]
- 34.
- 35.
直列タスク
from fabric.decorators
import task,parallel
@task
def deploy():
print env.host
fu:fabric_test$ fab hosts.production deploy
[production.com] Executing task 'deploy'
production.com
[myhost.jp] Executing task 'deploy'
myhost.jp
[myapp.jp] Executing task 'deploy'
myapp.jp
Done.
host毎に直列実行
されている
- 36.
並列タスク
from fabric.decorators
import task,parallel
@task
@parallel
def deploy():
print env.host
fu:fabric_test$ fab hosts.production deploy
[production.com] Executing task 'deploy'
[myhost.jp] Executing task 'deploy'
[myapp.jp] Executing task 'deploy'
myapp.jp
production.com
myhost.jp
Done.
これだけ
並列実行されている
- 37.
- 38.
- 39.
- 40.
- 41.