04 Jan 2015, 15:00

Immutable Emacs! AWS 上の Ubuntu サーバに ansible で Emacs 環境を自動構築する

はじめに

去年, Immutable Infrastructure という言葉を知った.

この概念を Emacs の管理に利用できないかなとという話.

これをやろうと考えたのは, 去年の 6 月だった. この記事の延長が本記事.

なかなか時間がとれなくて, 結局半年後の冬休みにようやくできた.

問題の分析

問題

<div class="outline-text-3" id="text-unnumbered-3">
  <p>
    Emacs を家でも会社でも利用している.以下が簡単な環境.
  </p>

  <ul class="org-ul">
    <li>
      自宅 <ul class="org-ul">
        <li>
          ArchLinux
        </li>
        <li>
          Widows 8 (GUI 版)
        </li>
      </ul>
    </li>

    <li>
      会社 <ul class="org-ul">
        <li>
          Widows 7 (GUI 版)
        </li>
        <li>
          Windows 7 (Cygwin 版)
        </li>
      </ul>
    </li>
  </ul>

  <p>
    設定を github にあげて, 設定を共有している. 会社で設定ファイルを更新するのは社内規程的に NG なので, いつもは以下のような運用.
  </p>

  <ul class="org-ul">
    <li>
      自宅で設定ファイルを git push
    </li>
    <li>
      会社で設定ファイルを git pull
    </li>
  </ul>

  <p>
    しかし, 自宅で設定したものが会社で動かなかったりすることがよくある.
  </p>

  <p>
    会社で Emacs の設定ファイルを更新した後は, 朝の 30 分は毎回 Emacs と戯れているのはここだけのないしょだ.
  </p>

  <p>
    しかし, 設定の同期作業も, 面倒なのでなんとか時間を短縮できないもの か&#x2026; というのが今回の解決したい問題.
  </p>

  <p>
    また, 1 年に 1 回 くらいの頻度で Emacs 環境を一から再構築することがある. このとき, Emacs の パッケージ管理は el-get を利用して管理しているので, 自動ですべてのパッケージを ネットから落としてきて動作するはず.
  </p>

  <p>
    しかし, 必ず el-get のダウンロードで失敗するパッケージがたくさんでる.
  </p>

  <p>
    会社だと, proxy という厄介なものがある. また, 設定の問題とは思うが, MELPA へアクセスできなく github からしか elisp を取得できない.
  </p>

  <p>
    まとめると,
  </p>

  <ul class="org-ul">
    <li>
      会社で Emacs の設定ファイルを更新したときに 起動時のエラーを発生させなくするためには?
    </li>
    <li>
      Emacs 環境を一から再構築するときに エラーを発生させなくするためには?
    </li>
  </ul>
</div>

課題

<div class="outline-text-3" id="text-unnumbered-4">
  <p>
    よくあるあたふたケースは,
  </p>

  <ul class="org-ul">
    <li>
      自宅の Linux 環境で push したものを 会社の windows 環境で pull して動かなくなる.
    </li>
    <li>
      会社で pull をするのが怖いのでしばらく放置した後, 久しぶりに pull すると 大量のエラーが発生する.
    </li>
  </ul>

  <p>
    エラーがあっても放置してしまうのは, 頻繁に エラーの確認をしないから. それは面倒だからしない. エラーの確認作業を自動化できたらうれしい.
  </p>

  <p>
    ということで, 課題は以下.
  </p>

  <ul class="org-ul">
    <li>
      Linux 環境で push したら Windows 環境で pull してエラーチェックを する作業を自動化する.
    </li>
    <li>
      定期的に一から Emacs の設定を再構築する作業を自動化する.
    </li>
  </ul>
</div>

解決策

<div class="outline-text-3" id="text-unnumbered-5">
  <p>
    この 自動でエラーをチェックするところを Immutable Infrastracture の概念と 組み合わせたらおもしろそうだと思った. 無駄な勉強にもなるし.
  </p>
</div>

<div id="outline-container-unnumbered-6" class="outline-4">
  <h4 id="unnumbered-6">
    Immutable Infrastructure とは
  </h4>

  <div class="outline-text-4" id="text-unnumbered-6">
    <p>
      簡単に調べてみた.
    </p>

    <p>
      一度サーバーを構築したらその後はサーバーのソフトウェアに変更を加えないこと.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://ja.wikipedia.org/wiki/Immutable_Infrastructure">Immutable Infrastructure &#8211; Wikipedia</a>
      </li>
    </ul>

    <p>
      以下の説明がとてもわかりやすい.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://www.publickey1.jp/blog/14/immutable_infrastructure_1.html">Immutable Infrastructure はアプリケーションのアーキテクチャを変えていく Publickey</a>
      </li>
    </ul>

    <blockquote>
      <p>
        Windows って調子が悪くなると再インストールしてすっきりさせるじゃないで すか. OS にいろんなソフトウェアをインストールしたりカスタマイズしたり すると調子が悪くなりますが, 再インストールすれば戻ります.
      </p>

      <p>
        だったら, そもそも毎回作り直せばシステムはすっきりするよね, というのが 簡単な Immutable Infrastructure の説明です.
      </p>
    </blockquote>
  </div>
</div>

<div id="outline-container-unnumbered-7" class="outline-4">
  <h4 id="unnumbered-7">
    Action Plan
  </h4>

  <div class="outline-text-4" id="text-unnumbered-7">
    <p>
      以下のようなアクションプランを考えた.
    </p>

    <ul class="org-ul">
      <li>
        AWS 上のサーバで Emacs 環境を構築する.
      </li>
      <li>
        AWS 上のサーバで エラチェックーを走らせる.
      </li>
      <li>
        チェックがおわったらサーバを破棄して終了.
      </li>
    </ul>

    <p>
      さらにこの手順の自動化ができたらいいけど, これは大変そうなので今度.
    </p>

    <ul class="org-ul">
      <li>
        git push したら AWS 上で動く サーバで エラチェックーを走らせる.
      </li>
      <li>
        毎週深夜に, Emacs 環境を自動で構築する.
      </li>
    </ul>
  </div>
</div>

解決へのとりくみ

Windows 環境はなにかと難しいとおもったので, まずは, Linux 環境を構築することにした.

というわけで, この記事のゴールは,

AWS 上に Emacs と自分の Emacs の設定を自動でインストールすること

名づけて,

Immutable Emacs! 大作戦.

響きがとても気に入った!

AWS を借りる

<div class="outline-text-3" id="text-unnumbered-9">
  <p>
    別記事に独立.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://futurismo.biz/archives/2847">AWS の Amazon EC2 で Windows サーバを立ち上げて リモートデスクトップ接続してみた | Futurismo</a>
    </li>
  </ul>

  <p>
    ここでは, Ubuntu Server 14.04 LTS (HVM), SSD Volume Type をつかう.
  </p>
</div>

ansible で Amazon AWS に SSH 接続

<div class="outline-text-3" id="text-unnumbered-10">
  <p>
    なれている, ansible を利用する.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://futurismo.biz/archives/2490">自分のデスクトップ環境の歴史を記録する!ansible で設定ファイルをクラウド管理する方法 | Futurismo</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;bash&#8221; title=&#8221;&#8221;]<br /> mkdir -p ~/.emacs.d/playbook<br /> cd ~/.emacs.d/playbook<br /> echo &#8216;54.65.121.127&#8217; >> hosts<br /> [/sourcecode]
  </p>

  <p>
    以下の作業はすべて,~/.emacs.d/playbook で実施.
  </p>

  <p>
    ansible.cfg ファイルを作成.
  </p>

  <p>
    [sourcecode language=&#8221;bash&#8221; title=&#8221;&#8221;]<br /> [defaults]<br /> hostfile = ./hosts<br /> remote_user = ubuntu<br /> private_key_file = ~/.ssh/archlinux.pem<br /> host_key_checking = False<br /> [/sourcecode]
  </p>

  <p>
    ping する.
  </p>

  <p>
    [sourcecode language=&#8221;bash&#8221; title=&#8221;&#8221;]<br /> ansible all -m ping -i hosts<br /> [/sourcecode]
  </p>

  <p>
    [sourcecode language=&#8221;bash&#8221; title=&#8221;&#8221;]<br /> 54.64.58.11 | success >> {<br /> "changed": false,<br /> "ping": "pong"<br /> }<br /> [/sourcecode]
  </p>
</div>

ansible playbook

org-mode で書いたものは, 以下のスクリプトで yaml に変換する.

[sourcecode language=”bash” title=””]
#!/bin/sh
# -*- mode: shell-script -*-
#
# tangle files with org-mode
# see: http://orgmode.org/manual/Batch-execution.html
#
DIR=`pwd`
FILE=""

for i in $@; do
# tangle org to yaml
emacs -Q –batch –eval "(progn
(add-to-list ‘load-path \"/usr/share/emacs/site-lisp/org\")
(require ‘org) (require ‘ob) (require ‘ob-tangle)
(setq org-src-preserve-indentation t)
(find-file (expand-file-name \"$i\" \"$DIR\"))
(org-babel-tangle)
(kill-buffer))" 2>&1 | grep tangled

# execute ansible command to yml file
string_filename=${i##*/}
string_filename_without_extension=${string_filename%.*}
string_path=${i%/*}

if test $string_filename = $i ; then
ansible-playbook ${string_filename_without_extension}.yaml -i hosts
else
ansible-playbook ${string_path}/${string_filename_without_extension}.yaml -i hosts
fi
done
[/sourcecode]

ここからは実際の ansible playbook を書く.

ansible settig

<div class="outline-text-3" id="text-unnumbered-12">
  [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> &#8212;<br /> &#8211; hosts: defaults<br /> sudo: yes<br /> vars:<br /> home_dir: /home/ubuntu<br /> emacs_dir: emacs<br /> dotfiles_dir: dotfiles<br /> tasks:<br /> [/sourcecode]
</div>

initial tools

<div class="outline-text-3" id="text-unnumbered-13">
  <ul class="org-ul">
    <li>
      libncurses5-dev は tputs error 対策
    </li>
    <li>
      gnutls-bin for el-get
    </li>
    <li>
      texinfo for makeinfo
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> &#8211; name: apt-get update<br /> command: apt-get update<br /> &#8211; name: apt-get install git<br /> apt: pkg=git<br /> &#8211; name: apt-get install build tools<br /> apt: pkg=build-essential,autoconf,automake,libncurses5-dev,gnutls-bin,texinfo<br /> [/sourcecode]
  </p>
</div>

<div id="outline-container-unnumbered-14" class="outline-4">
  <h4 id="unnumbered-14">
    bookmarks
  </h4>

  <div class="outline-text-4" id="text-unnumbered-14">
    <ul class="org-ul">
      <li>
        <a href="http://gihyo.jp/admin/serial/01/ubuntu-recipe/0235">第 235 回 Ubuntu 12.04 で Emacs 24.1 を使う:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社</a>
      </li>
      <li>
        <a href="http://emacs.tsutomuonoda.com/emacs24-1-ubuntu-install/">Emacs24.1 を Ubuntu にインストールする | Emacs の elisp インストール・設定・使い方</a>
      </li>
    </ul>
  </div>
</div>

install emacs

<div class="outline-text-3" id="text-unnumbered-15">
  <ul class="org-ul">
    <li>
      <p>
        <a href="http://qiita.com/seizans/items/f5f052aec1592c47767f">Ansible で git clone させる &#8211; Qiita</a>
      </p>

      <p>
        make -j オブションをつけたら, メモリ枯渇で make が停止した.
      </p>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> &#8211; name: get emacs from git repository<br /> git: repo=git://git.savannah.gnu.org/emacs.git dest={{home_dir}}/{{emacs_dir}} accept_hostkey=yes<br /> &#8211; name: make emacs configure file<br /> command: ./autogen.sh chdir={{home_dir}}/{{emacs_dir}}<br /> &#8211; name: make emacs Makefile<br /> command: ./configure &#8211;prefix=/usr/local &#8211;without-makeinfo &#8211;with-x-toolkit=no &#8211;without-all chdir={{home_dir}}/{{emacs_dir}}<br /> &#8211; name: make emacs<br /> command: make chdir={{home_dir}}/{{emacs_dir}}<br /> &#8211; name: install emacs<br /> command: make install chdir={{home_dir}}/{{emacs_dir}}<br /> [/sourcecode]
  </p>
</div>

install dotfiles

<div class="outline-text-3" id="text-unnumbered-16">
  [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> &#8211; name: clone dotfiles<br /> git: repo=https://github.com/tsu-nera/dotfiles.git dest={{home_dir}}/{{dotfiles_dir}}<br /> &#8211; name: make lnlinks<br /> command: ./make_lnlink chdir={{home_dir}}/{{dotfiles_dir}}<br /> sudo: yes<br /> sudo_user: ubuntu<br /> [/sourcecode]
</div>

install additinal tools for emacs

<div class="outline-text-3" id="text-unnumbered-17">
  [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> &#8211; name: install additinal tools for pdf-tools<br /> apt: pkg=libpng-dev,libz-dev,libpoppler-glib-dev,libpoppler-private-dev<br /> &#8211; name: install additinal tools for magit<br /> apt: pkg=texinfo<br /> &#8211; name: install additinal tools for org2blog<br /> apt: pkg=bzr<br /> &#8211; name: install additinal tools for exectable-find<br /> apt: pkg=mercurial<br /> &#8211; name: install additinal tools for cmigemo<br /> apt: pkg=cmigemo<br /> &#8211; name: install additinal tools for ag<br /> apt: pkg=silversearcher-ag<br /> [/sourcecode]
</div>

boot emacs

<div class="outline-text-3" id="text-unnumbered-18">
  <p>
    Emacs の boot に, el-get を利用してパッケージを次々にダウンロードする.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/tsu-nera/dotfiles/blob/master/.emacs.d/inits/00_el-get.org">https://github.com/tsu-nera/dotfiles/blob/master/.emacs.d/inits/00_el-get.org</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> &#8211; name: boot emacs first<br /> command: emacs &#8211;daemon<br /> sudo: yes<br /> sudo_user: ubuntu<br /> # &#8211; name: reboot emacs<br /> # command: emacsclient -e &#8216;(progn (defun yes-or-no-p (p) t) (kill-emacs))&#8217; && emacs &#8211;daemon<br /> # command: emacs &#8211;daemon<br /> # sudo: yes<br /> [/sourcecode]
  </p>
</div>

おわりに

これで AWS 上で動く Ubuntu サーバに Emacs をインストールすることができた.

まだまだ, 改良の余地は大ありだ.まだ, スタート地点.

dotfiles を育てるように, ansible のコードも育てていきたい.

10 May 2014, 03:51

Software Defined Infrastructureに関するブックマーク

Software Defined Storageという用語を知りました。 この用語に関して調べたブックマークメモです。

たったひとつのキーワードからどんどん世界が広がっていき、 調べるのがとても楽しく、またSoftware Defiedの動向に驚いている。

Software Defined xxx とは

ソフトウェアを中心としたインフラ構築のビジョン。

Software-defined data center (SDDC) is a vision for IT infrastructure
that extends virtualization concepts such as abstraction, pooling,
and automation to all of the data center’s
resources and services to achieve IT as a service (ITaaS)

「Software Defined」とは「(手作業ではなく)ソフトウェアで定義・制御する環境」を実現する、または目指すという意味

各ベンダの動向

Intel – Software Defined Infrastructure(SDI)

<div class="outline-text-3" id="text-2-1">
  <p>
    データセンターのサーバー、ネットワーク、ストレージを統合する戦略。
  </p>

  <blockquote>
    <p>
      SDIの大きな特徴は、コンピュート(CPU、メモリ)、ネットワーク、ストレージなど、データセンターを構成するハードウェアをすべて抽象化して、ソフトウェアで自由に設定を変更することができる点
    </p>

    <p>
      ハードウェアとソフトウェアがタイトに結びつくのではなく、ハードウェアを抽象化し、必要に応じてソフトウェアから設定を変更するだけで、サーバーのリソース構成をダイナミックに変更できるシステムが必要になってきた
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://itpro.nikkeibp.co.jp/article/NEWS/20130723/493463/">米インテルがSoftware Defined Infrastructureを発表、ストレージとネットワークで攻勢:ITpro</a>
    </li>
    <li>
      <a href="http://cloud.watch.impress.co.jp/docs/column/virtual/20130730_609512.html">【仮想化道場】“やわらかいデータセンター”を作る、IntelのSoftware Defined Infrastructure &#8211; クラウド Watch</a>
    </li>
  </ul>
</div></p>

Cisco – Software Defined Network(SDN)

<div class="outline-text-3" id="text-2-2">
  <p>
    Software-Defined Networking.ネットワークにおけるSoftware defined.
  </p>

  <blockquote>
    <p>
      SDN allows network administrators to manage network services<br /> through abstraction of lower level functionality.
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://en.wikipedia.org/wiki/Software-defined_networking">Software-defined networking &#8211; Wikipedia, the free encyclopedia</a>
    </li>
  </ul>

  <blockquote>
    <p>
      広義:「従来システムのネットワーク要素を抽象化し分割する、コンピュータ ネットワークを構築するアプローチ」(wiki より)<br /> 狭義:「(広義のアプローチを具体化するために)ネットワーク機器のコントロール プレーン、データ プレーンを分離し、集中化されたソフトウェアからコントロールして、もっと効率的なこと、便利なことをする!!」
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://gblogs.cisco.com/jp/2014/02/open-source-controller-framework-opendaylight-1/">Cisco Japan Blog » オープンソース コントローラ フレームワーク ― OpenDaylight (1)</a>
    </li>
  </ul>

  <p>
    なんと、Courseraに講義を発見!時間があれば受けたいところだが。。。
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://www.coursera.org/course/sdn">Software Defined Networking | Coursera</a>
    </li>
  </ul>
</div></p>

EMC – Software Defined Storage(SDS)

<div class="outline-text-3" id="text-2-3">
  <p>
    EMCのとなえる戦略。ストレージにおけるSoftware Defined.
  </p>

  <blockquote>
    <p>
      Software-defined storage (SDS) is a term<br /> for computer data storage technologies which separate storage hardware<br /> from the software that manages the storage infrastructure
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://en.wikipedia.org/wiki/Software-defined_storage">Software-defined storage &#8211; Wikipedia, the free encyclopedia</a>
    </li>
  </ul>

  <p>
    SDNはOpenFlowという共通技術によって浸透したが、 ストレージ分野では共通技術となるようなものがないとか。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.publickey1.jp/blog/14/software-defined_storage.html">Software-Defined Storage、これからのストレージ技術が実現する世界とはどのようなものか? - Publickey</a>
    </li>
  </ul>
</div></p>

実現するためのArchtecture

Software Defined Infrastructe

<div class="outline-text-3" id="text-3-1">
  <p>
    このページで紹介されているアーキテクチャがわかりやすい。
  </p>

  <p>
    <a href="http://www.ctc-g.co.jp/report/column/it_sdi/index.html">よくわかるIT新発見 第1回 「Software Defined xx」の潮流を読み解く!|伊藤忠テクノソリューションズ</a>
  </p>

  <p>
    以下、引用。
  </p>

  <ul class="org-ul">
    <li>
      Orchestration ・・・ 下位の機能レイヤのAPIを通じて全体のプロビジョニングを実施。
    </li>
    <li>
      Controller ・・・ 上位レイヤからのAPIを介した指示にしたがって、Deviceの設定変更を実施。
    </li>
    <li>
      Device ・・・ 上位レイヤのAPIを介した指示にしたがって、必要なITリソースを提供。
    </li>
  </ul>
</div></p>

Rack Scale Architecture(RSA)

<div class="outline-text-3" id="text-3-2">
  <p>
    Intelが提唱するアーキテクチャ。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://news.mynavi.jp/news/2013/04/12/141/">ラックはサーバ集積からモジュール構造へ、Intel | マイナビニュース</a>
    </li>
  </ul>

  <p>
    これはよくわかならいな。
  </p></p>
</div></p>

実現するための技術・OSS

OpenStack

<div class="outline-text-3" id="text-4-1">
  <ul class="org-ul">
    <li>
      <a href="http://ja.wikipedia.org/wiki/OpenStack">OpenStack &#8211; Wikipedia</a>
    </li>
  </ul>

  <blockquote>
    <p>
      クラウド基盤を構築するオープンソースソフトウエア。<br /> KVMやXen、VMware ESXi、Hyper-Vといった仮想化ソフト(ハイパーバイザー)と組み合わせ、<br /> IaaS(Infrastructure as a Service)やストレージサービスを提供するための仮想マシンやストレージ、ネットワークの管理機能などを提供する
    </p>

    <p>
      OpenStackを使って構築したクラウド環境は、<br /> 統一したAPIや認証を使って管理できる。<br /> また、IaaSのパブリッククラウドサービスで最大手であるAmazon EC2と互換性を持つ。
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://itpro.nikkeibp.co.jp/article/Keyword/20121029/433321/">Networkキーワード &#8211; OpenStack とは:ITpro</a>
    </li>
    <li>
      <a href="http://cloud.watch.impress.co.jp/docs/column/cloud/20140404_642748.html">【クラウド特捜部】プレーヤーがそろい表舞台に立つOpenStack &#8211; クラウド Watch</a>
    </li>
  </ul>
</div></p>

CloudStack

<div class="outline-text-3" id="text-4-2">
  <ul class="org-ul">
    <li>
      <a href="http://www.atmarkit.co.jp/ait/articles/1403/03/news019.html">プロダクトの差はわずか? 活動評価視点で検証:OpenStackとCloudStack、違いは何? (1/2) &#8211; @IT</a>
    </li>
  </ul>
</div></p>

OpenFlow

<div class="outline-text-3" id="text-4-3">
  <p>
    OpenFlowとは、 ソフトウェアによってネットワークの構成を行うための新しい標準。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://e-words.jp/w/OpenFlow.html">OpenFlowとは 〔 オープンフロー 〕 &#8211; 意味/解説/説明/定義 : IT用語辞典</a>
    </li>
    <li>
      <a href="http://www.publickey1.jp/blog/13/openflowsdnopenflowsdn_japan_2013.html">OpenFlow/SDNはなぜ誕生したのか、OpenFlow以前にあった問題とは。生みの親カサド氏が壇上で語る。SDN Japan 2013 - Publickey</a>
    </li>
  </ul>
</div></p>

Hydrogen

<div class="outline-text-3" id="text-4-4">
  <p>
    OpenDaylight Projectとは、 SDN(Software Defined Network)のプラットフォームを開発するプロェクト。 Linux Foundation Projectのひとつ。
  </p>

  <blockquote>
    <p>
      SDN の市場育成とともにこの分野の革新とユーザ環境への導入促進を目的に活動を開始したのが「OpenDaylight」です。業界をリードする素晴らしいメンバー(Platinum/Goldスポンサー:Brocade、Cisco、Citrix、Ericsson、IBM、Juniper、Microsoft、Redhat、NEC、VMWare)が参加し、複数のインダストリ プレイヤーによるコントリビューション(HackFest 参加、ソースコード寄贈、共同開発)によりコントローラ フレームワークを形成
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://gblogs.cisco.com/jp/2014/02/open-source-controller-framework-opendaylight-1/">Cisco Japan Blog » オープンソース コントローラ フレームワーク ― OpenDaylight (1)</a>
    </li>
  </ul>

  <p>
    OpenDaylightが開発したオープンソース コントローラ フレームワークがHydrogen。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://sourceforge.jp/magazine/14/02/06/144500">オープンソースSDNプロジェクトのOpenDaylightが初リリース、「Hydrogen」が登場</a>
    </li>
    <li>
      <a href="http://www.atmarkit.co.jp/ait/articles/1402/05/news050.html">SDNのオープンソースプロジェクト:OpenDaylight Project、最初のリリースHydrogenを発表 &#8211; @IT</a>
    </li>
    <li>
      <a href="http://gihyo.jp/dev/serial/01/linuxcon2014/0003">#3 最終回はNeela Jacques氏にOpenDaylightについて伺いました:LinuxCon Japan 2014 Preview|gihyo.jp … 技術評論社</a>
    </li>
  </ul>
</div></p>

26 Mar 2014, 16:42

インフラ業界の気になるキーワードについて調べてみた

インフラ業界の技術動向について調べてみたブックマークとキーワード集。

なんだか、調べれば調べるほどインフラまわりが熱いということがわかった。

Run Book Automation(RBA)

構築手順を示したドキュメントを英語ではRun Bookと読んでいる。

ドキュメントは、Excelベースのパラメータシートで管理されることが多い。

そして、そのパラメータシートにしたがった手順を自動したものを Run Book Automationという。

別記事として独立。

Code as Infrastructure

<div class="outline-text-2" id="text-2">
  <p>
    Code as Infrastructure、訳すと、インフラストラクチャーとしてのコード。
  </p>

  <p>
    インフラ構築、管理の手順をコードとして扱う概念。<br /> Excel管理の手順書からスクリプトを実行するのではなくて、初めからコードとして手順を記述する。
  </p>

  <blockquote>
    <p>
      インフラストラクチャのコンフィグレーションがスクリプトやファイルによって記述され、バージョン管理されており、その変更が自動的にデータセンターに反映されるやり方を指す。
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://www.publickey1.jp/blog/11/rubyjavascriptthoughtworks.html">プログラマブルなインフラ、Ruby、JavaScriptなどが重要なテクノロジと評価される。ThoughtWorksのレポート - Publickey</a>
    </li>
  </ul>

  <p>
    Infrastructure as Code と呼ばれている場合もある。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://d.hatena.ne.jp/naoya/20131215/1387090668">Infrastructure as Code &#8211; naoyaのはてなダイアリー</a>
    </li>
  </ul>

  <blockquote>
    <p>
      単にサーバー構成変更を自動化しましょうという話ではなく、<br /> インフラをすべてソフトウェアとして、<br /> コードで扱うことでアプリケーション開発で行われてきたいろいろな<br /> &#8220;ワークフロー&#8221; をインフラ作業の世界にも導入しましょうねと、そういうことであります
    </p>
  </blockquote>

  <p>
    ニュアンスとして、RBAよりも、よりソフトウェア開発的な文化を感じる。
  </p>

  <ul class="org-ul">
    <li>
      手順書をコードとして扱う。
    </li>
    <li>
      コードレビューする。
    </li>
    <li>
      コードをバージョン管理する。
    </li>
  </ul>

  <p>
    そういえば、こんな本も最近本やで見かけた。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.amazon.co.jp/%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3-~%E5%AE%89%E5%AE%9A%E7%A8%BC%E5%8B%95%E3%81%AB%E5%B0%8E%E3%81%8F127%E3%81%AE%E8%A8%AD%E8%A8%88%E6%96%B9%E5%BC%8F-WEB-PRESS-plus/dp/4774162868">Amazon.co.jp: インフラデザインパターン ~安定稼動に導く127の設計方式 (WEB+DB PRESS plus): 株式会社NTTデータ, 杉原 健郎, 吉田 一幸, 岩崎 賢治, 三浦 広志, 吉田 佐智男: 本</a>
    </li>
  </ul>
</div>

<div class="outline-3" id="outline-container-sec-2-1">
  <h3 id="sec-2-1">
    Puppet/Chef
  </h3>

  <div class="outline-text-3" id="text-2-1">
    <p>
      このCode as Infrastructureという概念を実現するツールが、PuppetやChef。
    </p>

    <p>
      Puppet/Chefは、先に書いたRBA本に紹介されている。Chef専用の解説本もKindleで購入できるので、さっそく買った。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://www.amazon.co.jp/%E5%85%A5%E9%96%80Chef-Solo-Infrastructure-as-Code-ebook/dp/B00BSPH158">Amazon.co.jp: 入門Chef Solo &#8211; Infrastructure as Code eBook: 伊藤直也: Kindleストア</a>
      </li>
    </ul>
  </div>
</div>

Test-Driven Infrastructure

<div class="outline-text-2" id="text-3">
  <p>
    ソフトウェア開発のようにインフラを構築するという潮流の中、<br /> Test Driven Developmentのようにインフラを構築しようというのがこの概念。
  </p>

  <p>
    本も最近第2藩としてリニューアルされたようだ。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://shop.oreilly.com/product/0636920030973.do">Test-Driven Infrastructure with Chef, 2nd Edition &#8211; O&#8217;Reilly Media</a>
    </li>
  </ul>
</div>

<div class="outline-3" id="outline-container-sec-3-1">
  <h3 id="sec-3-1">
    ServerSpec
  </h3>

  <div class="outline-text-3" id="text-3-1">
    <p>
      サーバに対する設定をRSpecのようにテストしながら実施するためのツール。
    </p>

    <p>
      まさに、TDDをインフラに当てはめたツール。
    </p>
  </div>
</div>

<div class="outline-3" id="outline-container-sec-3-2">
  <h3 id="sec-3-2">
    RRRSpec
  </h3>

  <div class="outline-text-3" id="text-3-2">
    <p>
      数日前に現れたRRRSpecもなかなかよさそうな予感を感じるのでとりあえずブックマーク。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://techlife.cookpad.com/2014/03/24/rrrspec/">分散テスト実行システムRRRSpecをリリースしました | クックパッド開発者ブログ</a>
      </li>
    </ul>
  </div>
</div>

Blue-Green Deployment

<div class="outline-text-2" id="text-4">
  <p>
    稼働しているシステム(Blue)と待機しているシステム(Green)の2つを用意する。
  </p>

  <p>
    両者はルータで接続されていて、いつでも切り替えられる。
  </p>

  <p>
    デプロイは、ルータを切り替えることでダウンタイムを最小にしつつ、<br /> システムを切り替えることで実現する。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://martinfowler.com/bliki/BlueGreenDeployment.html">BlueGreenDeployment</a>
    </li>
  </ul>

  <p>
    &#8211;<a href="http://www.publickey1.jp/blog/14/blue-green_deployment.html">「Blue-Green Deployment」とは何か、マーチン・ファウラー氏の解説 - Publickey</a>
  </p>
</div>

Immutable Infrastructure

<div class="outline-text-2" id="text-5">
  <p>
    2014年現在、もっとも熱いキーワード。このキーワードを今年一年はWatchしようと思ってる。
  </p>

  <p>
    最近、立て続けにカンファレンスが開かれたようだ。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://dev.classmethod.jp/cloud/immutable-infrastructure-conference-no-1/">Immutable Infrastructure Conference #1 に参加してきた #immutableinfra | Developers.IO</a>
    </li>
  </ul>

  <p>
    Immutableとは、不変性。
  </p>

  <p>
    インフラを一度構築したらその設定が変更されていないことを保証する考え方。
  </p>

  <p>
    サーバに変更が必要になったら、運用中のサーバには触らない。<br /> コードに変更を加えて、新規にサーバを構築しなおす。<br /> そして、いらなくなったらサーバを破棄する。
  </p>

  <p>
    Immuabilityは、仮想化技術が大前提。<br /> サーバをつくったり、捨てたりといったことは仮想化技術があるからこそできる。
  </p>
</div>

<div class="outline-3" id="outline-container-sec-5-1">
  <h3 id="sec-5-1">
    Vagrant
  </h3>

  <div class="outline-text-3" id="text-5-1">
    <p>
      手軽に仮想化環境を手に入れるツールが、vagrant。<br /> vargrantとは、仮想環境をコマンドラインから操作することができるオープンソースRubyスクリプト。
    </p>

    <p>
      仮想環境はいくらでもこわし放題、手軽になんどでも構築できる。
    </p>

    <p>
      去年はvagrantの登場と盛り上がりによって、インフラ界隈の話題により火がついたように見えた。
    </p>

    <p>
      Vagrantについては去年自分でもちょっと遊んでた。なつかしいね、今となっては挫折したけど。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://futurismo.biz/archives/1651">vagrantがスゲエ!コマンドラインからVirtualBoxを自由自在に操る方法 | Futurismo</a>
      </li>
      <li>
        <a href="http://futurismo.biz/archives/1660">仮想環境を破壊しまくっても大丈夫だ、問題ない。vagrantプラグイン『sahara』 | Futurismo</a>
      </li>
      <li>
        <a href="http://futurismo.biz/archives/1667">ミライの組込み開発!vagrant × sahara × minitestで実現する仮想エンドツーエンドテスト | Futurismo</a>
      </li>
    </ul>
  </div>
</div>

<div class="outline-3" id="outline-container-sec-5-2">
  <h3 id="sec-5-2">
    links
  </h3>

  <div class="outline-text-3" id="text-5-2">
    <p>
      ブックマークも大量リンク。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://www.slideshare.net/YukihikoSawanobori/jawsdays-infra">Infrastructure as Codeと 組織のドキュメンテーション + Immutable Infrastructure事例</a>
      </li>
      <li>
        <a href="https://speakerdeck.com/naoya/immutable-infrastructuregakai-fa-purosesuniyu-eruying-xiang-jia-number-immutableinfra">Immutable Infrastructureが開発プロセスに与える影響(仮) #immutableinfra // Speaker Deck</a>
      </li>
      <li>
        <a href="http://www.nttdata.com/jp/ja/insights/trend_keyword/2013122601.html">Immutable Infrastructure~デプロイメントをめぐるシステムインフラの管理~ | NTTデータ</a>
      </li>
      <li>
        <a href="http://apatheia.info/blog/2013/08/10/immutable-infrastructure/">Immutable Infrastracture について &#8211; apatheia.info</a>
      </li>
      <li>
        <a href="http://blog.stanaka.org/entry/2013/12/01/092642">2014年のウェブシステムアーキテクチャ &#8211; stanaka&#8217;s blog</a>
      </li>
      <li>
        <a href="http://qiita.com/kasaharu/items/654d20dbea935438de78">Immutable_Infrastructure &#8211; Immutable Infrastructure 【インフラ環境もソースコード管理しよう】 &#8211; Qiita</a>
      </li>
    </ul>
  </div>
</div>

その他の用語

<div class="outline-text-2" id="text-6">
</div>

<div class="outline-3" id="outline-container-sec-6-1">
  <h3 id="sec-6-1">
    idempotence(べき等性)と immutability(不変性)
  </h3>

  <div class="outline-text-3" id="text-6-1">
    <p>
      べき等性とは、同じサーバに何度も chef/puppet 実行を繰り返しても、<br /> 同じ結果が得られることが保証されるという性質。Puppet や Chefの理念。
    </p>

    <p>
      不変性とは、システムが自動的に生成され、<br /> その時点からいちども変更されていないことが保証されている性質。<br /> 関数型プログラミングのパラダイムが影響を与えている。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://blog.mirakui.com/entry/2013/11/26/231658">今さら聞けない Immutable Infrastructure &#8211; 昼メシ物語</a>
      </li>
    </ul>
  </div>
</div>

<div class="outline-3" id="outline-container-sec-6-2">
  <h3 id="sec-6-2">
    ConfigurationとOrchestration
  </h3>

  <div class="outline-text-3" id="text-6-2">
    <p>
      Configurationは、 いわゆる構成管理ツール。<br /> サーバにたいしてツールを入れたり設定したりすること。
    </p>

    <p>
      それにたいし、Orchestrationとは、<br /> 複数のモジュール(サーバ、ストレージ、スイッチ)が組み合わさったシステムに<br /> ついての設定をしたりすること。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://wslash.com/archives/=5216">今年流行りそうな「インフラエンジニア」向けトレンドのまとめ その1 (Blue-Green DeploymentとImmutable Infrastructure編)</a>
      </li>
    </ul>

    <p>
      サーバの構築をprovisioningという大きな用語でとらえ、<br /> さらにそれを以下の3つに分類する言い方もある。
    </p>

    <ul class="org-ul">
      <li>
        Provisioning <ul class="org-ul">
          <li>
            Bootstrapping … OSインストール
          </li>
          <li>
            Configuration … サーバ単体構築
          </li>
          <li>
            Orchestration … システム構築
          </li>
        </ul>
      </li>

      <li>
        <a href="http://mizzy.org/blog/2013/10/29/1/">インフラ系技術の流れ &#8211; Gosuke Miyashita</a>
      </li>
      <li>
        <a href="http://mizzy.org/blog/2014/02/14/1/">Developers Summit 2014 で「サーバプロビジョニングのこれまでとこれから」という発表を行いました &#8211; Gosuke Miyashita</a>
      </li>
    </ul>
  </div>
</div>

<div class="outline-3" id="outline-container-sec-6-3">
  <h3 id="sec-6-3">
    Amazon と Google/ AWS と MVM
  </h3>

  <div class="outline-text-3" id="text-6-3">
    <p>
      2013年にAmazonが AWSという仮想化サービスを開始した。<br /> それに対抗するようにGoogleが Managed Virtual Machinesというサービスをスタートさせた。
    </p>

    <p>
      Amazon vs Googleという対立構造になるのだろうか??
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://aws.amazon.com/jp/">クラウドコンピューティング なら アマゾン ウェブ サービス | 仮想サーバー、ストレージ、データベースのための Amazon のクラウドプラットフォーム(AWS 日本語)</a>
      </li>
      <li>
        <a href="http://www.publickey1.jp/blog/14/googleawsbigquery75.html">[速報]Google、AWS対抗をあらわにした値下げと新価格体系を発表。継続利用で自動値引き - Publickey</a>
      </li>
      <li>
        <a href="http://www.publickey1.jp/blog/14/googlemanaged_virtual_machinesgoogle_app_engine.html">[速報]Google、「Managed Virtual Machines」発表。Google App Engine内で仮想マシンを管理 - Publickey</a>
      </li>
    </ul>
  </div>
</div>

まとめ

<div class="outline-text-2" id="text-7">
  <p>
    今までの用語をまとめた自分の中でのイメージは以下のような感じ。
  </p>

  <p>
    ・・・
  </p>

  <p>
    インフラ構築のためのテストコードを書いて、<br /> vagrantのような仮想環境を用いてそのテストを検証する。
  </p>

  <p>
    TDDの小さなサイクルを繰り返しつつ、着実に手順を構築していく。
  </p>

  <p>
    仮想環境によってなんどもなんども手順がテストされて安全性が高まる。
  </p>

  <p>
    そして、本番のインフラ構築では十分仮想環境で検証したテストコードによって<br /> 自動でインフラが構築される。
  </p>

  <p>
    構築されたインフラは構築時から変更されていないことが保証されている。
  </p>

  <p>
    なにか不具合があれば、その環境を破棄してまた一から作り直す。
  </p>
</div>

26 Mar 2014, 11:52

Run Book Autmationとはなにかについて調べてみた

Run Book Autmationというキーワードについてまとめてみました。

Run Book Automation

この記事を書くきっかけになったのが、以下の本を買ったからです。

Run Book Automation(RBA)とは

構築手順を示したドキュメントを英語ではRun Bookと読んでいる。

Excelで設定項目に応じてパラメータシートを作成することが多い。以下、RBA本からの抜粋。

  • 構築の順序
  • 実際に投入するコマンドとそのパラメータ
  • 実際に操作するGUIオペレーション
  • コマンドの正常性確認方法
  • エラーの確認方法
  • エラーへの対処方法
  • 関係者に対する確認事項
  • 確認方法

そして、そのパラメータシートの自動化を Run Book Automationという。

各サイトからの引用とブックマーク

<div class="outline-text-3" id="text-2-1">
  <blockquote>
    <p>
      Run Book Automation (RBA) is the ability to define, build, orchestrate,<br /> manage and report on workflows that support system<br /> and network operational processes.
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://en.wikipedia.org/wiki/Runbook">Runbook &#8211; Wikipedia, the free encyclopedia</a>
    </li>
  </ul>

  <blockquote>
    <p>
      ITの運用におけるマルチベンダーをまたいだ複雑な処理を、<br /> 1つのプロセスとして定義し、それを自動化していくこと。
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://news.mynavi.jp/column/hyper-vcloud/002/">運用の効率化を考えていたらプライベートクラウドになった! (2) 注目を浴びるRunbook &#8211; 自動化のカギを握るテクノロジーと仮想化のツツキ方 | マイナビニュース</a>
    </li>
  </ul>

  <blockquote>
    <p>
      サーバー仮想化ソフトなどのインフラ管理製品には運用自動化機能が実装されつつあるが、<br /> ストレージやネットワークなど、他のシステム構成要素を含めた管理や、<br /> 運用プロセスの統合的な自動化ができないのが現状だ。<br /> そこで注目を集めているのが、<br /> IT運用管理に関するプロセスを自動化する「ランブック自動化(RBA)」である
    </p>

    <p>
      RBAを一言で言うと、従来のワークフローツールに、<br /> 既存の様々なIT運用管理ツール/機能との連携機能を組み入れた、<br /> IT運用管理自動化の仕組みを実現するテクノロジ
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://it.impressbm.co.jp/e/2011/01/24/3281">IT運用管理プロセスを自動化し、ビジネス変化の速さに備えるRBA | IT Leaders</a>
    </li>
  </ul>

  <blockquote>
    <p>
      2011年現在、企業情報システムの運用管理の世界では、大きな変化が起こっている。<br /> 日々の運用作業から複数のシステムや部門をまたぐ運用プロセス、<br /> そしてリソースなどの制御を自動実行すること、<br /> すなわち「運用の自動化」が、急速に浸透している。
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://itpro.nikkeibp.co.jp/article/Active/20111107/372843/">ITオペレーション(運用)の自動化(1)&#x2014;クラウド運用は自動化が大前提に &#8211; ガートナー直伝!IT導入ワン&#x2026;:ITpro Active</a>
    </li>
  </ul>

  <blockquote>
    <p>
      仮想サーバ環境なら簡単にできてしまうからだ、<br /> その結果、何が起こるか。仮想サーバの乱立だ。
    </p>

    <p>
      仮想化対応のポイントは「監視」と「制御」
    </p>
  </blockquote>

  <ul class="org-ul">
    <li>
      <a href="http://www.itmedia.co.jp/im/articles/1009/15/news118.html">特集:仮想化構築・運用のポイントを探る(5):“自動化”は仮想化運用管理の救世主 (1/2) &#8211; ITmedia エンタープライズ</a>
    </li>
  </ul>
</div></p>

感想

この言葉は最近では話題になっていないようで、一世代前のバズワードのように見える。

運用、監視、仮想化がキーワードのようだ。

RBA本の読書メモ

せっかくなので、書評も書いておく。