ashibuya0128

きょうもぼへぼへちゃんがゆく

きょうもあっちこっちぶつかっています。 めげない、すねない、おちこまない。

6 11月

救われる言葉


自分が、何かずっと間違っていたのかなぁという思いにとらわれてしまう時がある。

手のひらを見たときに、何も生み出せない事実と向き合ってしまった時。

いろんなことに対する姿勢や考え方が甘かったんだなって思ってしまった時。


今日こそ、なにかできるように。

と思っても何もできなかった時。

ぎりぎりのところで、音楽と言葉が助けてくれる。


石田衣良さんのエッセイ、「空は、今日も、青いか?」

の中の「組に別れず」に

人は誰でも、ある部分で勝ち、別な部分で負ける。
どれほど強運で才能に恵まれた人でも、必ず失うものがある。

また逆にすべてを失った人にだって、輝くような時間はきっとやってくる。




未来は誰にも予想できない。

僕たちは、今をいきいきと生きる以外にはなにもできないのだ。



今、ここにこうしている現在、

一年前の過去の時点での現在、

その前の私は想像できなかったはず。


こっちに行こう、と思った選択がどんなに間違っていても、そのずっと先はわからない。
今できる一歩しか踏み出せない。





31 10月

本と図書館

最近、本を図書館で借りるようになった。

あまり本を読まなくなって、数年が経過する。
まったく読んでいない訳ではないけど、3ヶ月に2冊読むかとうか。

技術書にはざっくり目を通す。
けど、ざっくり。
味わっているわけでもなんでもない。

本のおすすめコンシェルジュが図書館にいればよいのに、と思う。
もしかしたら、あるのかも知れない。

落ち込んでいる気分の時に、
気分転換の時に、
もっと深く考えたい時に。

最近はカーリルがその役割をもっているのかもしれない。

なんとなく眺めていると、この本、読みたかったんだ!
という気持ちを取り戻してきて、予約してとりおきしてもらうようにした。

決して、一気に何冊も予約してはいけない。
すでに、読み切る力も弱ってきている。

けど、読み始める力はあるので、また取り戻せるような気がしている。





23 10月

LEGO(R)ではじめるスクラム入門にいってきた #scrum

気づきからの学びって大事だな。と感じた研修でした。

スクラム、アジャイル開発については、本は何冊か読んでいたし、
現場でずっと導入したいなーと思っていたが(導入できなかった)のもあって、
実体験をどうしてもしてみたいなと思っていた時にこの研修をみつけたので、参加しました。


写真


スクラムがいきる現場とは

これは、勘違いしていてはいけない部分だなと。
どんな現場でも通用するわけではなく、逆にsimple、complicatedな場面では役にたたないどころかムダを踏む事になる。


Scrum is a framework for developing and sustaining complex products.

SCRUM GUIDES

この複雑であるということが大事。

何をつくればいいか
どうやってるくればいいか

この2つの不確実性によって、複雑さは決まるので、これをまず覚えておき
今の現場で使って効果がでるかを考えなくてはいけないなと思いました。


フィードバックループの大事さ

やりがちなのは、自分たちが集まって繰り返し、繰り返し議論をして
ようやくたどり着いた答えが、実は顧客の求めるものでなかったりする。

顧客と向き合うのは要件定義フェーズだけだったりすると、
その後の「変化」を反映することはできない。

考え、作り、レビューし、振り返り、そしてまたそれを繰り返す。
それによってほんとに欲しいプロダクトに近づくこともできるし、
自分たちのプロセスについて振り返ることにより、繰り返しは、単なる単調な繰り返しではなくなる。

フィードバックループを通じて、プロダクトとプロセスが洗練されてくる。


と、こういうのは巷のスクラム本のほうが、よほどいいことが書いてあるので
そっちを読んでもらったほうがいいと思います。
ただ、今回この研修でよかったのは、実践して、上記のようなことが心から納得できたことです。

研修では、スクラムの一連の流れを、自分が顧客側にたった場合、
開発者側にたった場合で、役割をかえてスプリントと振り返りを3回実践しました。

お客さんは、何が欲しいかわかっていない、(不確実性)
開発者はLEGOでものをつくるというのに慣れていない、(不確実性)
どうやって、要求通りのプロダクト(LEGOで作った建物)をつくり、うけいれてもらうか。

理屈より実践。

スプリントをまわしている最中に、目から鱗がおちる瞬間が何度かありました。

実際にスクラムでやろうという、みなさまに一度うけてもらえると
その後の実践がとてもスムーズかと思います。


■@ITに今回の勉強会の内容のくわしい記事がのっています。
「LEGOブロックで街づくり」 実体験型スクラム入門をのぞいてみた


さいごに一番大事なこと

複雑で難しい問題はみんなでたのしく協力するしかない!





10 7月

ウェブエンジニア夫婦の「あるある日記」を東洋経済新聞オンラインで連載はじめたよー。


というわけで、連載をはじめました。
毎週日曜日配信で、ぼへぼへちゃんが登場します。

ゆるい目で読んでくださいw






執筆?はこんな感じでやっておりますです。

IMG_2738



よろしくおねがいします〜。


9 7月

Chefでenvironmentを使う #chef

環境毎に違うパラメータってありますよね。
それをchefではenvironmentで設定することができます。

まずはバージョンを確認

Chef はバージョン 11.6.0 (現在は 11.8.2) で Chef Solo での Environments をサポート
knife-soloも0.4.0 から Environments をサポート

私の環境ではこんな感じになっています。


chef (11.10.4)
knife-solo (0.4.1, 0.3.0)
knife-solo_data_bag (1.0.1)
ohai (7.0.4, 7.0.2, 6.22.0)



クックブックを作ったあとにenvironmentディレクトリがなかったのでディレクトリを作成して
その中に、jsonファイルを作成しました。

vim environments/development.json

{
"name": "development",
"description":"variables depends on environment",
"chef_type": "environment",
"json_class": "Chef::Environment",
"default_attributes": {
"server": {
"api_ipaddress": "XXX.XXXX.XXX.XXX"
,"mysql_master_ipaddress": "XXX.XXX.XXX.XXX"
,"mysql_slave_ipaddress": "XXX.XXX.XXX.XXX"
}
},
"override_attributes": {}
}


ちなみにレシピでの参照方法は以下のとおり。

log node[:server][:api_ipaddress]


environmentとnodeを使って、Haproxyのインストールをしてみた。

でちなみにnodeでは以下のような設定をしてみていて

{
"kind" : "webserver",
"environment":"development",
"run_list":["recipe[haproxy]"]
}


そして、テンプレートを以下のように登録


listen api
bind 127.0.0.1:8080
mode http
option httpchk GET /status.html HTTP/1.0
option log-health-checks
balance roundrobin
server api01 <%=node[:server][:api_ipaddress]%>:80 check port 80 inter 2000 fall 2


そうすれば、実行時にIPアドレスが、environmentディレクトリのdevelopment.jsonに設定した値で設定されます。

このようにしておけば、適用するノードがどの環境のものかがわかって、
そのノードが開発環境なのか、本番環境なのかが管理しやすいですよね。

環境依存系は、すべてenvironmentに集約するのが、後々考えると楽ですね!








8 7月

vim初心者からの離脱のことはじめ

とりあえず、以下の2個をやろうと。

・vimrcの整理
・プラグインの登録

というところで、きょうやったこと。

■vimrcをgitHubに登録

参考にはならない気がするけど、gitHubに登録しておく。
とはいえ、人のを丸パクリなので大丈夫なんか。。

これで、gitHubから落としてきてどこでも使えるようにしておく。


管理する用のディレクトリを作成
mkdir ~/dotfiles

すでに.vimrcがあれば、管理用ディレクトリに移動させる
mv ~/.vimrc ~/dotfiles/_vimrc

シンボリックリンクをはる
ln -s ~/dotfiles/_vimrc ~/.vimrc

NeoBundleを使う
git clone https://github.com/Shougo/neobundle.vim ~/dotfiles/bundle/neobundle.vim
git clone https://github.com/Shougo/vimproc ~/dotfiles/bundle/vimproc

シンボリックリンクをはる
ln -s ~/dotfiles/bundle ~/.vim

gitHubの管理下におく

cd ~/dotfiles
git init
touch README
git add README
git add _vimrc
git add _gvimrc
git commit -m 'first_commit'

git remote add origin https://github.com/bohebohe/dotfiles.git
git push -u origin master

Unite.vim
NERDTree
のプラグインは使いたかったので、これはインストール。

とりあえず、いろんなものを一緒にするとわからなくなるので、ここまで。

あと、便利だなと思ったのは

Vimには挿入モード時に
Ctrl+P
Ctrl+N

で、入力補完ができるということです。

まだまだ、これからも続けますが、ひとまず日記的に残しておきます。

■参考にさせていただいたサイト(感謝)

脱初心者を目指すVimmerにオススメしたいVimプラグインや.vimrcの設定 - Qiita
Vim - NeoBundleの導入 - Qiita
そろそろしっかりvimを使う。dotfilesのgithub管理とvundleの導入。 - 南極の図書館
Shougo/unite.vim



10 6月

Ansible勉強会 第一回に参加 #ansibleja

あってよかった女子枠。

ちょこっと使ってみて、お手軽!という印象だったのが、勉強会でてより強まった感じ。
絶賛、Chefでレシピ実装中なのでどうしようw

とりあえず、資料はあがっている時点まででリンクをつけてます。

■Ansible の基本 + MySQL レプリケーションを設定する事例


BestPractice

Ansibleで書くと、MySQLのレプリケーションもわかりやすい形で実装できるんだなというところを実感しました。

■dynamic inventoryが便利な話: no more host list!


ホストリストの集中管理。
耳の痛い話でもあり、ほんとにこれは徹底したいとおもっているところ。
うちも集中管理できる仕組み実装したい。 Yabizほしい。。。
現状、絶賛xlsです。(恥)

そして、LTでした。

■callback pluginを使ったタスク実行時間の可視化について(案) by @rudy

callback pluginの例
callbackすごい便利。覚えておこう!

■AnsibleのJUNOS設定モジュールを書いてみた by @saito_hideki


■インフラ屋とAnsible(仮) by @LaughK

踏み台サーバ経由でのサーバ構築があるある!だったので、早速参考にしようと思いました。



■目指せ、サーバー構築1200台(仮) by @myb1126




■構成管理ツールAnsibleの構成管理について by @iktakahiro



■Vagrant × Ansible by @tomohiro_urakawa


Ansible Provisioner


■chefからansibleに乗り換えた話 by @futoase

前職でchefをすべてAnsibleにおきかえて、転職した先がchefだった。
という最高のオチでおわっていただきました。




redhatさん、会場提供ありがとうございました!
7 6月

踏み台サーバを経由して楽してsshしたい ProxyCommandとnetcatを使う

■やりたいこと

手元のMacBookから踏み台サーバを経由して、その先のサーバにつなぎたい
って場合に、面倒なので一発でアクセスしたいもんです。

そのやり方について書いておきます。

MacBook >踏み台 >本番サーバ


■前提

・踏み台サーバにのみnetcatがインストールされていること
・MacBook > 踏み台は秘密鍵、公開鍵認証でとおること
・踏み台 >本番サーバは秘密鍵、公開鍵認証でとおること
・MacBook >本番サーバはとおりません
・本番サーバにMacBookの秘密鍵の公開鍵が登録されていること
☆本番サーバにログインするユーザーを変更しているので、そのユーザーの公開鍵に踏み台にログインするユーザーの公開鍵を、本番サーバにログインするユーザーのauthorized_keysに追加しています。

■MacBookの.ssh/configに記述する内容

Host step
HostName 踏み台サーバIPアドレス
User 踏み台にログインするユーザー(公開鍵認証できること)

Host production
HostName 本番サーバIPアドレス
Port 22
User 本番サーバにログインするユーザー(公開鍵認証できること)
ProxyCommand ssh step nc %h %p



で、以下のコマンドで接続します。
ssh production


■参考サイト

多段 ssh / rsync するために ProxyCommand を使ってみる

OpenSSH クライアントの proxy -- 踏み台サーバを経由しての ssh


23 5月

サードパーティのレシピが動かない #chef

もしかしたら、思考自体がまちがっているのかもしれないけど。

サードパーティのリポジトリ(yum)をcookbookに組み込んで、
自分が作成したrecipeはすべて、site-cookbooksに組み込んだ。

そのリポジトリをgitにpushしておきました。

で、別のサーバからgit cloneして、knife solo cook を実行したのだけど
「cookbookがないから実行できないよ」というエラーがひたすらでたので、みてみるとcookbookが
リポジトリにpushされていない?

だからか!

と思って、{無理矢理!}gitにpushして、再度cloneしてきた。

これで大丈夫!
と思って実行したら、以下のようなエラーにみまわれる。

 Running handlers:
[2014-05-22T17:47:30+09:00] ERROR: Running exception handlers
Running handlers complete

[2014-05-22T17:47:30+09:00] ERROR: Exception handlers complete
[2014-05-22T17:47:30+09:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
Chef Client failed. 0 resources updated in 0.55614126 seconds
[2014-05-22T17:47:30+09:00] ERROR: Cookbook Basic not found. If you're loading Basic from another cookbook, make sure you configure the dependency in your metadata
[2014-05-22T17:47:30+09:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)


依存関係ですと?
metadataに何を記述するの?
開発環境では問題なくレシピの適用ができたのに。。

やはり{無理矢理!}gitにpushというのはよろしくないのかも。

というわけで、cookbooksにあるyumをいったん削除しました。
で、そこの環境で、yumのリポジトリを以下のコマンドで取得して

 knife cookbook site vendor yum


 knife solo prepare XXX
knife solo cook XXXX


としたら、うまく適用できました。

うーむ。こんな対処方法でよかったんだろうかという疑問がありつつ、課題として書いておきます。


19 5月

serverspecがsudoのところで動かなくて悩んだ件(解決) #serverspec

ようやくChefでレシピ書いて、実行!サーバ構築自動化やっふー
でも、やっぱり確認はチェックリストとかだとまだまだ片手落ちなので

serverspec

の時間がやってまいりました。

インストールなどは、サイトを確認して、(CentOS6.4でやりました。)
ユーザーも、ノンパスでsshできて、かつノンパスsudoもできる状態です。

チュートリアルどおりに、編集なしで実行したところ
 rake spec 

 1) Package "httpd" should be installed
Failure/Error: it { should be_installed }
SpecInfra::Command::Base::NotImplementedError: SpecInfra::Command::Base::NotImplementedError

SpecInfra::Command::Base::NotImplementedError
# ./spec/192.168.2.59/httpd_spec.rb:4:in `block (2 levels) in '

2) Service "httpd" should be enabled
Failure/Error: it { should be_enabled }
SpecInfra::Command::Base::NotImplementedError: SpecInfra::Command::Base::NotImplementedError

SpecInfra::Command::Base::NotImplementedError
# ./spec/192.168.2.59/httpd_spec.rb:8:in `block (2 levels) in '



NotImplementedErrorとは?でまた頭をかかえて、advanced_tipsあたりを読みます。
もしかしてsudo?というところでspec_helper.rb に以下を追記しました。

c.disable_sudo = true


パッケージのインストールのテストはOKでしたが、
今度は、サービスがenabledか、と起動しているかのテストが通りません。

 1) Service "httpd" should be enabled
Failure/Error: it { should be_enabled }
chkconfig --list httpd| grep 3:on
expected Service "sshd" to be enabled
# ./spec/192.168.2.59/httpd_spec.rb:8:in `block (2 levels) in '

2) Service "httpd" should be running
Failure/Error: it { should be_running }
service sshd status
expected Service "httpd" to be running
# ./spec/192.168.2.59/httpd_spec.rb:9:in `block (2 levels) in '


わりと途方にくれて、twitterでぼやいたところ救われました。




まさにビンゴで、spec_helper.rb に以下を追記しました。

c.request_pty = true





実行時にコマンドがみつからない、エラーもでたので、以下も追記。
c.path = '/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin'


で、「rake spec 」で無事にテストが通りました。

ありがとうございます!これで、テストをばりばり書きます。
19 5月

RedisコンテナをDockerで作成 #docker

さて、MacでDocker環境をつくったので、今日はコンテナを作成していきます。
Redisコンテナを作成するチュートリアルをやってみます。

boot2dockerを使って、Dockerデーモンを起動するんでしたね。

おさらい。

Dockerは2つのキーとなるコンポーネントを持っています。

(1)Docker daemon
(2)クライアントとして動作するdocker binary

クライアントは、Docker daemonに対して、 Docker コンテナを管理するための指示を与えます。
Dockerは、Linuxのカーネルの仕様を使います。
それはOSX上では直接使うことができないために、かわりにOSX上の計量な仮想マシンの中でDocker daemon を起動します。
そうすることで、仮想マシン上で、ネィティブクライアントであるdocker binaryを使って、Docker daemonに指示をだすことができます。

boot2dockerは、仮想マシンを作るためにVirtualBoxを使います。
そのために、VirtualBoxをまずインストールすることが必要です。



boot2dockerを使って、Dockerデーモンを起動してみましょう。
55

17


RedisイメージのためのDockerfileを作成して、Docker をbuildします。

vim Dockerfile

FROM ubuntu:12.10
RUN apt-get update
RUN apt-get -y install redis-server
EXPOSE 6379
ENTRYPOINT ["/usr/bin/redis-server"]


sudo docker build -t bohe/redis .


bohe/redisはリポジトリ名になるんですな。

Buildとは?
Build a new container image from the source code at PATH
Use this command to build Docker images from a Dockerfile and a "context".

Usage: docker build [OPTIONS] PATH | URL | -

-t, --tag="": Repository name (and optionally a tag) to be applied
to the resulting image in case of success.
-q, --quiet=false: Suppress the verbose output generated by the containers.
--no-cache: Do not use the cache when building the image.
--rm=true: Remove intermediate containers after a successful build
Use this command to build Docker images from a Dockerfile and a "context".


ビルドが成功すると、image_idが割り当てられます。

25


detachedモードでrunしてみましょう。

 sudo docker run --link redis:db -i -t ubuntu:12.10 /bin/bash


runコマンドは指定したimage(bohe/redis)に、新しいコンテナを作成してコマンドを送信します。
bashコマンドが実行されて、コンテナの中に入ることができます。

linkフラグを使って、作成したイメージ(bohe/redis)に対して、(db)エイリアスを作成しています
これはコンテナに対して、secure tunnel を作成していてこのコンテナ内部にだけRedisインスタンスを公開することになります。

新しいコンテナ上でRedisをインストールします。

$ apt-get update
$ apt-get -y install redis-server
$ service redis-server stop


runしたときに[--link redis:db ]オプションを利用しているので、Dockerはいくつかの環境変数をコンテナ上に用意してくれています。
中身をみてみましょう。

$ env | grep DB_

# Should return something similar to this with your values
DB_NAME=/violet_wolf/db
DB_PORT_6379_TCP_PORT=6379
DB_PORT=tcp://172.17.0.33:6379
DB_PORT_6379_TCP=tcp://172.17.0.33:6379
DB_PORT_6379_TCP_ADDR=172.17.0.33
DB_PORT_6379_TCP_PROTO=tcp


DB_PORT_6379_TCP_ADDRを使って、Redisコンテナに接続してredisをつかってみましょう

43


なるほど、使えましたね。

コンテナの作成の様子の解説は、以下のpptがとても参考になりました!
53




今日はチュートリアルの理解で終了。
19 5月

3分間でネットワークを学ぶ

3 Minutes Networking

18


DNSのレコードについて調べていた時に見つけたのだけど、
あまりにわかりやすい+3分間で読めるので、これはネットワークの勉強にいいかと!

自分めも

15 5月

Linux女子部08「Docker勉強会」の予習とか #docker

Docker勉強会に潜り込むには熾烈な競争が。。。
あってよかった女子枠。

Docker


まずは、動かしてみたりしてみようという場合はこちらから



Dockerfileの編集チュートリアルです。
Dockerfile Tutorial

MacOSXでインストールして動かす方法
Installing Docker on Mac OS X


Dockerは2つのキーとなるコンポーネントを持っています。

(1)Docker daemon
(2)クライアントとして動作するdocker binary

クライアントは、Docker daemonに対して、 Docker コンテナを管理するための指示を与えます。
Dockerは、Linuxのカーネルの仕様を使います。
それはOSX上では直接使うことができないために、かわりにOSX上の計量な仮想マシンの中でDocker daemon を起動します。
そうすることで、仮想マシン上で、ネィティブクライアントであるdocker binaryを使って、Docker daemonに指示をだすことができます。

boot2dockerは、仮想マシンを作るためにVirtualBoxを使います。
そのために、VirtualBoxをまずインストールすることが必要です。



とりあえず、上記のやり方に従って、動かしてみるべし。
うえーい、動いたー。

25


Hello World
までやってみる

39



それで、そのDockerを支えている技術を理解するために読む資料はこちら。



systemdを理解すべしとのこと





ひととおり目をとおしたので、さて、勉強会が楽しみ。


14 5月

Fluentd Meetup – 新しい応用事例とv1に関する発表にいってきました。 #fluentd

会場はフリークアウトさん。
広い。オサレでした。

というより、舞台も音響もよさそうなので、ここで演奏会できないかしらんとか思いました。

さて

Fluentd v.1に関するアップデートと今後のロードマップ(仮) by 中川 真宏氏 (@repeatedly)



fluentdのWebサイトがリニューアル予定!近日?
というところも待ち遠しいのですが

設定ファイルのカイゼンで、keyをハッシュや配列で書けるように!Rubyのコードを書けるように!
となったようです。待ち遠しい。

毎秒10万件でもまだ軽い!Norikra+BigQuery+Dockerで10分でつくるリアルタイムログ解析基盤 by 佐藤一憲氏 (@kazunori_279)

これは、スライドがない?ようなのですが、
感想としては、Google Big XXXはやっぱりすごいなぁと+Norikuraおもしろそう!
という感想になってしまったw


HTML5 Single Page Application のイベントログ収集をFluentdで効率化している話 by 本多一行氏 (@hakobera)



Single Page Applicationについての理解ができたのと、
イベントに対応したアクセスログ収集ツールってたくさんあるんだとか、知りました。
(mixpanel、flurry、Google Analytics、optimizely)

このあたりの集約をfluentdで一元化するという試みは絶賛検証中ということでしたが
そこに向かうまでの経緯をきけて、とてもなるほどと思えました。
このいきつくまでの設計の試行錯誤とか、思想っておもしろいですね。


マゾいログ回収の話と未来 by 加藤慶一氏




今回も懇親会まではでなかった小心者なんですが、
また、こうやって見聞きしていたことだけでも、十分役に立った!という場面に遭遇したので
勉強会で、しっかり話をきいておき、あとで気になったところを調べるでもいいですね。

とりあえず、興味がすこしでもあるものは足を運ぼうと思います。


14 5月

Ansibleについて調べる #ansible


構成管理ツールとしては、最初puppetを使ってみて、今はChef-soloに落ち着いてるわけなんですが、
またAnsibleというのを耳にした+今度開催される勉強会にすべりこんだので、
前段階の知識でもいいからつけておこうかと思いました。

このSlideShareがとてもわかりやすく、かつ参考リンクも網羅されていました。


Ansible は Pythonでというものの、どんな言語でもモジュールが書けるようになっているので、
運用にあたって Python の知識は必要無いようです。
Chef の場合だと、レシピを書くためには Ruby の知識が必要となってきて、今やRuby入門サイトが必須なんだけど、Ansible はどんな言語でもモジュールが書ける!

ということが人気?がでてきそうな秘訣でしょうか。

あとは学習コストが低いとかもあるのかな?

勉強会でどんな話がきけるのか楽しみです。

Archives
Blog Author
東洋経済オンライン連載中!
おぬぬめ本
twitter
  • ライブドアブログ