Presented at SC2015-6 on 6/3/2015 for ..
Infrastructure as Code meets IPython Notebook to be Literate Computing
IEICE Tech. Rep., vol. 115, no. 72, SC2015-6, pp. 27-32, June 2015.
Abstract: Cloud has put the pressure to rapidly build systems and frequently re-configure services, then Infrastructure as Code has come beyond the simple automation. The approach treats the configuration of systems the same way that software source code is treated. Infrastructure is validated and processed “as Code” with management tools. However, as Code is not limited only about the intelligent automation, but also about the communication based on code for reviewing, reproducing, customizing, and reusing. It is as important to be able to share information and processes with others, as to actually automate complex operations for infrastructures. IPython Notebook is a useful tool to both describe automated operations with code (and configuration data) and share predicted and reproducible outcomes with others, technical and non-technical alike.
IPython Notebook is a “literate computing” tool, which enables us to share stories about infrastructure’s design and elaborated workflows. We will share our experience how the literate stories are also useful for various customer communications as tracing individual issue, promoting self-administration etc.
Keywords DevOps, Infrastructure as Code, Literate Computing, IPython Notebook, Jupyter
インフラ・コード化の実践におけるIPython Notebookの適用
信学技報, vol. 115, no. 72, SC2015-6, pp. 27-32, 2015年6月
あらまし: クラウドサービスの浸透により,サービスの構築・再構築の機会が増加するのに伴って,作業手順をすべてCodeとして記述するInfrastructures as Codeというアプローチが着目されている.ここでの“as Code”は作業手順の正当性がプログラムコードのように,また実行結果も機械的に検証可能であるという意味合いで捉えられがちであるが,むしろ個々の作業の再現性を保証し,その上で作業をカスタマイズ・再利用すると言ったプロセス自体を,Codeとして見える化し,伝達可能にすることにこそ意義がある.DevOpsに於いては,何某かを実際に構築したり機械化したりするだけではなく,設計情報,運用状態を伝達・共有できるようにすることが重要である.
“Literate Computing”ツールと呼ばれ,ワークフローと実行結果を一体としてドキュメント化できるIPython Notebookを,基盤の構築,運用に適用する方式を提案すると共に,具体的な適用によってワークフローをどのように改善することができたかを報告する.
キーワード DevOps, Infrastructure as Code, Literate Computing, IPython Notebook, Jupyter
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Notebookの適用
1. Y Masatani, National Institute of Informatics
インフラ・コード化の実践における
IPython Notebookの適用
政谷 好伸 谷沢 智史 横山 重俊 吉岡 信和 合田憲人
国立情報学研究所
Towards “Literate Computing for Infrastructure” – 6/3/2015
2. Y Masatani, National Institute of Informatics
IPython Notebook
http: //ipython.org
1991: Python
1995: Numeric → NumPy (~2006)
2001: SciPy
2001: IPython
2003: Matplotlib
…
2011: IPython Notebook
2015: Jupyter
3. Y Masatani, National Institute of Informatics
IPython Notebook
• Python の Rich Web client な対話インターフェース
• 実行Code,実行結果(計算の結果や,結果を埋め込んだ図表),自然言語による手
順や経緯の説明を ひとつにまとめて記述
• The purpose of Computing is insight, not numbers – Hamming [Numerical
Methods for Scientists and Engineers (1962) Preface]
• 数理系研究者のツールとして発展
http: //ipython.org
1991: Python
1995: Numeric → NumPy (~2006)
2001: SciPy
2001: IPython
2003: Matplotlib
…
2011: IPython Notebook
2015: Jupyter
アイデアの探索課程の記録,共同開発,再現可能な成果の公開,教育
4. Y Masatani, National Institute of Informatics
Jupyter – Language Agnostic Notebook
- Interactive Python shell - Network protocol and Rich Web clients
- Kernel for Python - Notebook file format and tools
- Tools for Interactive Parallel - Nbviewer
Computing
5. Y Masatani, National Institute of Informatics
Jupyter – Language Agnostic Notebook
http: //jupyter.org
- Interactive Python shell - Network protocol and Rich Web clients
- Kernel for Python - Notebook file format and tools
- Tools for Interactive Parallel - Nbviewer
Computing
Jupyter = Julia, Python & R †
Github でもサポート
- Language Agnostic
† https://github.com/jupyter/design/wiki/Jupyter-Logo
6. Y Masatani, National Institute of Informatics
Literate Computing
Notebook という形
• ... inspired by open language of science
• 計算機 = computation と 人間=communication が役割分担
ü 実際の実行結果が、説明に埋め込まれている..
手順や経緯 が具体的に,再現可能な形で表現・伝達 → reproducibility
ü Technical と Non-Technical で 理解を共有
7. Y Masatani, National Institute of Informatics
Literate Computing
Notebook という形
• ... inspired by open language of science
• 計算機 = computation と 人間=communication が役割分担
ü 実際の実行結果が、説明に埋め込まれている..
手順や経緯 が具体的に,再現可能な形で表現・伝達 → reproducibility
ü Technical と Non-Technical で 理解を共有
Literate Computing というアプローチ
ü The Notebook: Literate Computing – Fernando Perez
[ http://blog.fperez.org/2013/04/literate-computing-and-computational.html ]
インフラの構築・運用の場面に適用
8. Y Masatani, National Institute of Informatics
Literate Computing
Notebook という形
• ... inspired by open language of science
• 計算機 = computation と 人間=communication が役割分担
ü 実際の実行結果が、説明に埋め込まれている..
手順や経緯 が具体的に,再現可能な形で表現・伝達 → reproducibility
ü Technical と Non-Technical で 理解を共有
Literate Computing というアプローチ
ü The Notebook: Literate Computing – Fernando Perez
[ http://blog.fperez.org/2013/04/literate-computing-and-computational.html ]
インフラの構築・運用の場面に適用..
It shall be applicable to Infrastructure / DevOps
9. Y Masatani, National Institute of Informatics
Infrastructure as Code
Orchestration with “Coding Style”
• CFEngine (1993~): http: //en.wikipedia.org/wiki/CFEngine
• Puppet (2005~): http: //en.wikipedia.org/wiki/Puppet_(software)
• Chef (2009~): https: //www.chef.io/blog/2009/01/15/announcing-chef/
• Ansible (2012~): http: //en.wikipedia.org/wiki/Ansible_(software)
10. Y Masatani, National Institute of Informatics
Infrastructure as Code
Orchestration with “Coding Style”
• CFEngine (1993~): http: //en.wikipedia.org/wiki/CFEngine
• Puppet (2005~): http: //en.wikipedia.org/wiki/Puppet_(software)
• Chef (2009~): https: //www.chef.io/blog/2009/01/15/announcing-chef/
• Ansible (2012~): http: //en.wikipedia.org/wiki/Ansible_(software)
DSL
DSL + ruby
DSL + ad-hoc
11. Y Masatani, National Institute of Informatics
Infrastructure as Code
Orchestration with “Coding Style”
• CFEngine (1993~): http: //en.wikipedia.org/wiki/CFEngine
• Puppet (2005~): http: //en.wikipedia.org/wiki/Puppet_(software)
• Chef (2009~): https: //www.chef.io/blog/2009/01/15/announcing-chef/
• Ansible (2012~): http: //en.wikipedia.org/wiki/Ansible_(software)
Benefit of “Coding Style” :
– Validation, Auditing, cross OS …
– CI (Continuous Integration), Automation …
– Code vs. Config (Hiera,
DSL
DSL + ruby
DSL + ad-hoc
12. Y Masatani, National Institute of Informatics
Automation だけではなく..
as Code (コード化)= Coding Style を適用する
• 作業手順が Code になる
• 作業手順の正当性がプログラムコードのように検証可能
• 実行結果も機械的に検証可能
• 記述言語の能力
• 記述に基づく機械化・自動化ツールの利便性
13. Y Masatani, National Institute of Informatics
Automation だけではなく..
as Code (コード化)= Coding Style を適用する
• 作業手順が Code になる
• 作業手順の正当性がプログラムコードのように検証可能
• 実行結果も機械的に検証可能
• 記述言語の能力
• 記述に基づく機械化・自動化ツールの利便性
現場的には Communication が大切…
• スキルセットが異なる当事者間においても.. 個々の作業の再現性を担保したい..
• インフラの状態やそこに至るまでの経緯を理解し易くする..
• その上で作業をカスタマイズ・再利用すると言ったプロセス自体も(Code として)見える化
• 伝達可能にすること,蓄積・発展させること
Automation ?
14. Y Masatani, National Institute of Informatics
Automation だけではなく..
as Code (コード化)= Coding Style を適用する
• 作業手順が Code になる
• 作業手順の正当性がプログラムコードのように検証可能
• 実行結果も機械的に検証可能
• 記述言語の能力
• 記述に基づく機械化・自動化ツールの利便性
現場的には Communication が大切…
• スキルセットが異なる当事者間においても.. 個々の作業の再現性を担保したい..
• インフラの状態やそこに至るまでの経緯を理解し易くする..
• その上で作業をカスタマイズ・再利用すると言ったプロセス自体も(Code として)見える化
• 伝達可能にすること,蓄積・発展させること
Literate Computing for Infrastructure –
Open Communication about Design and Process through Notebook
Automation ?
15. Y Masatani, National Institute of Informatics
現実の問題として..
CI が適用できるようなケースも重要だけど..
すべてが Immutable, Idempotent という訳にはゆかな
い… 副作用積み重ねとして運用せざるを得ない… そう
いったものこそ手間がかかるし,気をつかう
16. Y Masatani, National Institute of Informatics
現実の問題として..
CI が適用できるようなケースも重要だけど..
すべてが Immutable, Idempotent という訳にはゆかな
い… 副作用積み重ねとして運用せざるを得ない… そう
いったものこそ手間がかかるし,気をつかう
相互にスキルセットが異なる状況..
• 運用担当... スキルセットの継承, ひとりですべてが解る訳ではない..
• 利用者… 目的に合わせてインフラをカスタマイズしたい..
/サポート担当… 手解き,問合せに効率的に対応したい
ユーザの自立を促したい.. セルフ・アドミン
17. Y Masatani, National Institute of Informatics
Continuous Integration
• Maintain a code repository – Revision Control
• Automated Build
• Make the build self-testing
– Everyone commits to the baseline (every day.. Nightly build… )
– Every commit to baseline should be build and tested
• Keep the build FAST
– Test in a clone of the production deployment
– Make it easy to get the latest deliverables
– Everyone can see the results of the latest build
• Automate deployment – Continuous deployment
http://en.wikipedia.org/wiki/Continuous_integration
18. Y Masatani, National Institute of Informatics
実現したいこと
• 作業の信頼性向上
• 手順の再利用
• ポータブルな手順
• 環境に依存しない…
• 環境の変更に追従できる…
19. Y Masatani, National Institute of Informatics
実現したいこと
• 作業の信頼性向上
• 手順の再利用
• ポータブルな手順
• 環境に依存しない…
• 環境の変更に追従できる…
Infrastructure でも Social Coding / Design Review のような..
情報の共有「綺麗なコード」を意識.. 美意識 à
architecture (operation込) における rationality /
cardinality of design を 対象化
20. Y Masatani, National Institute of Informatics
やってみたこと
Ansible + IPython Jupyter Notebook + Github
• 記述 à Ansible と Notebook で書き分け(再現性・斉一性の粒度など.. )
• 手順 à Github Pull Request を活用したワークフロー
• “Who” (誰が) - “When did” (いつ) - “in What operation” (何をどうし
て) with “intention; Why” (どういうつもりが), then “Consequences
happened” (どうなった)
• Narrative History of .. everything rationale
21. Y Masatani, National Institute of Informatics
運用作業者のための「追随可能な手順書」
http://localhost:8888/notebooks/実行例/運用者向_手順書%20-%20ACC開始.ipynb
http://localhost:8888/notebooks/実行例/運用者向_手順書%20-%20CentOS6.5マシン準備(必
要ソフトウェアのインストール).ipynb
22. Y Masatani, National Institute of Informatics
利用者のための「追随可能な指示書・作業確認書」
内容の確認
カスタマイズに必要な情報の提供
セルフ・アドミニストレーション
http://localhost:8888/notebooks/実行例/ユーザ向_指示書・作業確認書-仮想マシン起動例.ipynb
http://localhost:8888/notebooks/実行例/ユーザ向_先生用仮想マシン起動.ipynb
23. Y Masatani, National Institute of Informatics
委託作業者による作業の「追試可能な作業報告書」
システムの構築作業を委託
→ 作業報告書や システムの保守・運用手順が
紙,電子ファイルとして納入される…
報告書 → 実作業の証跡としての有効
手順書 → 再利用する機会
24. Y Masatani, National Institute of Informatics
再利用性を重視したHadoopクラスタの構築手順書
http://localhost:8888/tree/murmur/notebooks/default
25. Y Masatani, National Institute of Informatics
Anywhere Aggregation: なんでも、どこにでも配置できる
HDFS HDFS
YARN YARNPresto
HBase
Tez, Hive, Storm, Spark
Pre-Condition (Requirement for Serv)
• Ansibleが操作できるノード
• 管理系ネットワークが設定済
• Bootstrap OSがインストール済
Serv Serv Serv Serv Serv Serv Serv Serv Serv Serv Serv
http://localhost:8888/tree/murmur/notebooks/default
Hadoop族を対象に Ansible + Notebook で..
HDFS
Presto
30. Y Masatani, National Institute of Informatics
再利用性を重視したHadoopクラスタの構築手順書
構造化はどのように進展するか?
31. Y Masatani, National Institute of Informatics
構造に関するもの
Ansible と Notebook の使い分け
• 文脈に依存しない手順はAnsibleで構造化
インフラの環境構成とシステムのあるべき姿としてのソフトウェア
構成を記述
• 副作用を把握しなければならない手順,文脈を伴う手順については
Notebookで構造化する
32. Y Masatani, National Institute of Informatics
構造に関するもの
Ansible と Notebook の使い分け
• 文脈に依存しない手順はAnsibleで構造化
インフラの環境構成とシステムのあるべき姿としてのソフトウェア
構成を記述
• 副作用を把握しなければならない手順,文脈を伴う手順については
Notebookで構造化する
• すべての作業はNotebookから実行
Ansibleの動作を含めすべてのコマンドによる作業の経緯を記録
• Ansibleのpleybookとrole,Notebookをバージョン管理
33. Y Masatani, National Institute of Informatics
経緯に関するもの
インフラ運用において伝達・共有したいこと…
過去に起こった経緯(いきさつ)これから起こるであろう経緯(なりゆき)
トレーサビリティの把握
複数作業間の依存関係,文脈の把握
34. Y Masatani, National Institute of Informatics
経緯に関するもの
インフラ運用において伝達・共有したいこと…
過去に起こった経緯(いきさつ)これから起こるであろう経緯(なりゆき)
トレーサビリティの把握
ü Who (誰が) - When did (いつ) - in What operation (何をどうして) with intention; Why (どう
いうつもりが), then Consequences happened (どうなった)
ü 作業対象としてのインフラが,現在どうなっているか理解したい
複数作業間の依存関係,文脈の把握
ü When(どういう時に)Why(なんのために)What operation(何をどうして)Consequence(どう
なって欲しいのか)
ü やり直しの効く範囲はどこまでか,戻せるのか
ü (状況が変わったら,失敗したら)どこまで戻ればよいのか
ü 回復できないポイントとその回避可能性
ü 依存関係が恒常的なのか一時的なのか
ü 事前,事後の依存する作業
ü 分離できる条件と範囲, 作業の構造を見通したい
35. Y Masatani, National Institute of Informatics
どのような構造を把握すべきか
記述・ドキュメントの..「形」は何にしたがう..
ソフトウェアのアーキテクチャ
収容構成
運用の体制
当事者たる人間の関係性
蓄積と発展
36. Y Masatani, National Institute of Informatics
どのような構造を把握すべきか
記述・ドキュメントの..「形」は何にしたがう..
ソフトウェアのアーキテクチャ
収容構成
運用の体制
当事者たる人間の関係性
蓄積と発展
機能に従う
失敗に従う
Social な “Literacy”
37. Y Masatani, National Institute of Informatics
Notebookを作成する際の指針
• インフラの状況を把握・確認する作業に対しては,予めコマンド群とその利用手順を
まとめた定型Notebookを用意すると供に,正常時の実行結果を記録した状態で保存
しておいたものを用いて作業する.既知のトラブル対応の作業等も同等.
• 非定型の運用作業は,原則Notebookをフロントとして実施し,実行コマンドとその
出力結果を記録した状態で保存する.作業が何のために行われたかなど,機械的に記
録されない内容はNotebookの中に直接記載する.定型的な運用作業は業務ごとに
Notebookとして予め記述しておき手順書として利用する.
• 独立性のある一連の作業をひとつのNotebookとして記述する,Notebook間(作業
間)に依存関係が存在する場合はNotebook上に説明する
• 環境情報,構成管理情報,複数のAnsibleのプレイブックにおいて共通化可能なパラ
メタ情報は,それらを設定管理するNotebookを独立に設ける
• 設計上の依存関係がある構成と作業についてはパラメタ化したAnsibleプレイブック
として記述する,あるいは共通のプレイブックを参照する類似・派生Notebookとし
て構造化を図る
模索中
38. Y Masatani, National Institute of Informatics
まとめ
• 設計/運用情報を、再利用を考慮して構造化することができた,これにより構造化された
手順の依存関係を考慮して作業を実施できる
• 開発初期から運用中も含めて「あるべき姿」「現状」「過去の変更履歴」をトレースでき
る状態にある
• 手順書と実際に実行されるコマンドが一体とな à スキルの異なるメンバが作業しても,作
業結果に乖離が発生しづらい「追随可能な手順書」というコンセプトは有効
• Notebook化された手順を使って、開発者・運用者同士,あるいは利用者とコミュニケー
ションできる状態にある
• NotebookやAnsibleプレイブックをGit管理することで履歴管理ができた
• コラボレーションツールとして複数人が共同編集するのは難しい
「追随可能な手順書」∼ Literate Computing for Infrastructure というコンセプトは運用者,
利用者どちらからも受け入れられ得ることを確認できたと考える
今後 .. より分かりやすい記述,実行環境の配布方法,Gitとの連携,Jenkinsなどのテスト駆動
ツールと連携するワークフローの在り方…
39. Y Masatani, National Institute of Informatics
まとめ
• 設計/運用情報を、再利用を考慮して構造化することができた,これにより構造化された
手順の依存関係を考慮して作業を実施できる
• 開発初期から運用中も含めて「あるべき姿」「現状」「過去の変更履歴」をトレースでき
る状態にある
• 手順書と実際に実行されるコマンドが一体とな à スキルの異なるメンバが作業しても,作
業結果に乖離が発生しづらい「追随可能な手順書」というコンセプトは有効
• Notebook化された手順を使って、開発者・運用者同士,あるいは利用者とコミュニケー
ションできる状態にある
• NotebookやAnsibleプレイブックをGit管理することで履歴管理ができた
• コラボレーションツールとして複数人が共同編集するのは難しい
「追随可能な手順書」∼ Literate Computing for Infrastructure というコンセプトは運用者,
利用者どちらからも受け入れられ得ることを確認できたと考える
今後 .. より分かりやすい記述,実行環境の配布方法,Gitとの連携,Jenkinsなどのテスト駆動
ツールと連携するワークフローの在り方…