SlideShare uma empresa Scribd logo
1 de 13
簡易デプロイツール(スクリプト)を
作ってみた話
@adokoy0001
yomitan.pm #6
自己紹介
横田 敏明 (Toshiaki Yokoda)
Twitter: @adokoy0001
宿泊施設向けシステムベンダー勤務
Perl使ってます!
今日のお話
Net::OpenSSHとParallel::ForkManagerを使って、
「とにかく俺は複数リモートにコマンドを投げたいだけなんだ!」
という人向けの、
簡単なデプロイツールを作ってみました。というお話。
ここに公開: https://github.com/adokoy001/Perl-SSH-Task
目的
• SSHで複数のリモートに同じコマンドを投げたい
• 公開鍵認証を使わずにパスワードでやりたい(危ないけど)
• SSH初回接続時のフィンガープリント確認を無視したい(危ないけど)
• sudoやりたい
• 並列に実行したい
• 処理が終了した順に結果が見れればOK
• サーバ、サーバ群の指定を柔軟かつ簡単にしたい
• サーバをグループ分けするのではなく、ラベル(タグ)を付ける。
• ラベルを指定してコマンドを実行するサーバ群を指定可能
• 記述を簡単にしたい
• ※ただし、Perlに慣れている人にとって。
作ったものの概要(1)
• Perl-SSH-Taskという名前でGitHubに公開
• https://github.com/adokoy001/Perl-SSH-Task
• スクリプトファイル(ssh_task.pl)に引数を与えて実行
• $ perl ssh_task.pl <対象サーバorラベル> <タスク名>
• $ perl ssh_task.pl <対象サーバorラベル> do <任意のコマンド>
• $ perl ssh_task.pl <対象サーバorラベル> do_sudo <任意のコマンド>
• $ perl ssh_task.pl --server-list
• 登録設定したサーバの情報を一覧表示
• $ perl ssh_task.pl --task-list
• 登録設定した共通タスクを一覧表示
作ったものの概要(2)
• コンフィグファイル
• Perl形式で記述。設定ファイルを読んでevalして変数に格納(適当)
• servers.conf : リモートのIP・ユーザ・パスワード、ラベルなどを設定。
• tasks.conf : サーバに実行したいコマンドのテンプレート的なもの。
• config.conf : 最大並列実行数やフィンガープリント確認スキップの設定など。
• こんな人向け
• 公開鍵認証とか使わずに手っ取り早くユーザ・パスワードで
• 設定ファイルに直書きなのでアレですが・・・
• DSLとか覚えたくない
• とにかくSSHでリモートにコマンドを実行させられるなら良い
インストール
$ git clone https://github.com/adokoy001/Perl-SSH-Task.git ./my_ssh_task
$ cd my_ssh_task
$ cpanm --installdeps .
以上
※ cpanm,Plenv環境推奨
まずはservers.confの記述
{
my_server_01 => {
label => ['internal','development','my_favorite'],
host => 'localhost',
port => 22,
user => 'myname',
password => 'mypassword',
general_task => {
server_info => 'server_info',
upgrade => 'upgrade_apt',
reboot => 'reboot'
},
specified_task => {
test_1 => [["~/.plenv/shims/perl -v"]],
test_2 => [["~/.plenv/shims/perl global"]]
}
},
(以下、サーバ設定が続く)
サーバ名
ラベル(複数指定可能)
接続に必要な情報
tasks.conf で設定したタスクを登録
固有タスクを直接登録
Perlスタイルでサーバの設定を記述
同時に実行したい複数のサーバを
指定するために、ラベルを設定する。
ホスト、ポート、ユーザ、パスワード
を設定する。
tasks.conf(後述)で設定した共通タス
クのタスク名を指定する。
このホスト固有の処理があれば、タ
スク名を付けてタスクを直接登録す
る。
共通タスクをtasks.confに記述
{
server_info => [
["hostname"],
["uname -a"],
["ifconfig"],
["free"],
["cat /proc/cpuinfo | grep processor"],
["uptime"]
],
upgrade_apt => [
[ {stdin_data => "$servers->{$server_name}->{password}n"} , "sudo -Sk -p '' "."apt-get update"],
[ {stdin_data => "$servers->{$server_name}->{password}n"} , "sudo -Sk -p '' "."apt-get upgrade -y"]
],
upgrade_yum => [
[ {stdin_data => "$servers->{$server_name}->{password}n"} , "sudo -Sk -p '' "."yum update"],
[ {stdin_data => "$servers->{$server_name}->{password}n"} , "sudo -Sk -p '' "."yum upgrade -y"]
],
upgrade_yum_tty => [
[ {tty => 1, stdin_data => "$servers->{$server_name}->{password}n"} , "sudo -Sk -p '' "."yum update"],
[ {tty => 1, stdin_data => "$servers->{$server_name}->{password}n"} , "sudo -Sk -p '' "."yum upgrade -y"]
],
reboot => [
[ {stdin_data => "$servers->{$server_name}->{password}n"} , "sudo -Sk -p '' "."reboot"],
],
reboot_tty => [
[ {tty => 1, stdin_data => "$servers->{$server_name}->{password}n"} , "sudo -Sk -p '' "."reboot"],
],
}
Net::OpenSSHの記法
配列Refの配列Ref
sudoするときのオマジナイ
tty強制環境ではtty => 1を追加
実行
ラベル名developmentが付けられた
サーバ群にdateコマンドを実行した例
出力は以下の様な感じに
[ 設定名 / ホスト(IPなど) ]: 実行ステップ
実行結果
・
・
・
COMPLETED!
- - - [SUMMARY] - - -
PROCEEDED SERVER: 実行対象サーバ数
IGNORED SERVERS : 非実行対象サーバ数
こんな構成で使っています
DB DB DB
App App App
LB
MGMT
MGMTからサーバへコマンドを発行
・Appサーバにアプリを展開
・Appサーバ全部のアプリを更新
・DBサーバのRedisキャッシュをクリア
・全サーバの状態を確認
などなど・・・
LAN
感想
• 真っ当にansibleとか使ったほうが良い
• 既に広まっている技術を覚えて使った方が普通に良い
• サーバのセットアップとか
• 状態とか冪等性を気にするならなおさら
• Shellで冪等性を保つのは大変だけども
• 一括実行したいことがシンプルなら自前スクリプトもアリかも
• 既存ツールの使い方を覚えるよりも、自作したシンプルなツールの方が他の
メンバーにとっても覚えやすいことも・・・あるかも
• Net::OpenSSHの使い方を覚えたらかなり楽しい
おしまい

Mais conteúdo relacionado

Mais procurados

自宅サーバ仮想化
自宅サーバ仮想化自宅サーバ仮想化
自宅サーバ仮想化anubis_369
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門Hirotaka Kawata
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門icchy
 
自作x86エミュレータの終焉
自作x86エミュレータの終焉自作x86エミュレータの終焉
自作x86エミュレータの終焉Daisuke Kamikawa
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプトbsdhack
 
Open Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pmOpen Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pmHirotaka Kawata
 
シェル入門
シェル入門シェル入門
シェル入門ina job
 
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)Kenichiro MATOHARA
 
GUI何処行ったんDocker
GUI何処行ったんDockerGUI何処行ったんDocker
GUI何処行ったんDockerKazuhito Miura
 
Kickstart, Puppet, Docker
Kickstart, Puppet, DockerKickstart, Puppet, Docker
Kickstart, Puppet, DockerHirokazu Tokuno
 
Rubyでバルクインサート
RubyでバルクインサートRubyでバルクインサート
RubyでバルクインサートFujimura Munehiko
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyMasashi Shibata
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会Hirotaka Kawata
 
Unixコマンド入門
Unixコマンド入門Unixコマンド入門
Unixコマンド入門Satosi Sakai
 
Unix architecture
Unix architectureUnix architecture
Unix architectureraw-hide
 
FPGAでmrubyを動かす
FPGAでmrubyを動かすFPGAでmrubyを動かす
FPGAでmrubyを動かすShuta Kimura
 
意識の低い自動化
意識の低い自動化意識の低い自動化
意識の低い自動化greenasparagus
 

Mais procurados (20)

自宅サーバ仮想化
自宅サーバ仮想化自宅サーバ仮想化
自宅サーバ仮想化
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門
 
自作x86エミュレータの終焉
自作x86エミュレータの終焉自作x86エミュレータの終焉
自作x86エミュレータの終焉
 
カーネルモジュールプログラミング超入門 #1(仮)
カーネルモジュールプログラミング超入門 #1(仮)カーネルモジュールプログラミング超入門 #1(仮)
カーネルモジュールプログラミング超入門 #1(仮)
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
 
Python02
Python02Python02
Python02
 
Open Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pmOpen Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pm
 
シェル入門
シェル入門シェル入門
シェル入門
 
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
 
GUI何処行ったんDocker
GUI何処行ったんDockerGUI何処行ったんDocker
GUI何処行ったんDocker
 
Kickstart, Puppet, Docker
Kickstart, Puppet, DockerKickstart, Puppet, Docker
Kickstart, Puppet, Docker
 
Rubyでバルクインサート
RubyでバルクインサートRubyでバルクインサート
Rubyでバルクインサート
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
 
Unixコマンド入門
Unixコマンド入門Unixコマンド入門
Unixコマンド入門
 
Unix architecture
Unix architectureUnix architecture
Unix architecture
 
FPGAでmrubyを動かす
FPGAでmrubyを動かすFPGAでmrubyを動かす
FPGAでmrubyを動かす
 
意識の低い自動化
意識の低い自動化意識の低い自動化
意識の低い自動化
 
Symfony2 workshop-1
Symfony2 workshop-1Symfony2 workshop-1
Symfony2 workshop-1
 

Semelhante a 簡易デプロイツール(スクリプト)を作ってみた話

密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境Fumihito Yokoyama
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情Junichi Ishida
 
PowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまでPowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまでKazuhiro Matsushima
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 Hideo Takahashi
 
誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築Hiroshi Yamato
 
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンReproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンNagi Teramo
 
Power shellmemo
Power shellmemoPower shellmemo
Power shellmemoytanno
 
PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話侑弥 濱田
 
FOLIOのコードを動かしてみた
FOLIOのコードを動かしてみたFOLIOのコードを動かしてみた
FOLIOのコードを動かしてみたFutoshi Tanuma
 
モノづくりを楽しもう! ~ このデバイスとクラウドでできること
モノづくりを楽しもう! ~ このデバイスとクラウドでできることモノづくりを楽しもう! ~ このデバイスとクラウドでできること
モノづくりを楽しもう! ~ このデバイスとクラウドでできることKazumi IWANAGA
 
つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜Eric Sartre
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Kei IWASAKI
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOPazuma satoshi
 
非同期系統の基礎
非同期系統の基礎非同期系統の基礎
非同期系統の基礎segayuu
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料Junichi Ishida
 

Semelhante a 簡易デプロイツール(スクリプト)を作ってみた話 (20)

入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
 
PowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまでPowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまで
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法
 
誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築
 
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンReproducebility 100倍 Dockerマン
Reproducebility 100倍 Dockerマン
 
Power shellmemo
Power shellmemoPower shellmemo
Power shellmemo
 
PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話
 
Osoljp201204
Osoljp201204Osoljp201204
Osoljp201204
 
FOLIOのコードを動かしてみた
FOLIOのコードを動かしてみたFOLIOのコードを動かしてみた
FOLIOのコードを動かしてみた
 
モノづくりを楽しもう! ~ このデバイスとクラウドでできること
モノづくりを楽しもう! ~ このデバイスとクラウドでできることモノづくりを楽しもう! ~ このデバイスとクラウドでできること
モノづくりを楽しもう! ~ このデバイスとクラウドでできること
 
つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
 
of_protocol_tremaday5
of_protocol_tremaday5of_protocol_tremaday5
of_protocol_tremaday5
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOP
 
非同期系統の基礎
非同期系統の基礎非同期系統の基礎
非同期系統の基礎
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
 
Ansible入門 20151226
Ansible入門 20151226Ansible入門 20151226
Ansible入門 20151226
 
Write-Help
Write-HelpWrite-Help
Write-Help
 

簡易デプロイツール(スクリプト)を作ってみた話