Memo Log

PANTO MAIMU 's Personal Blog

技術書典4に行ってきた :-)

そんなわけで、技術書典4に行ってきました :-)
今まで体調とか色々あって行けなかったけど、今回やっと行くことができました ><
天気が良くて人がたくさん来るだろうということで、早めに行ってきました。

で、整理券をもらうために並ぶことに...
f:id:PANTOMAIMU:20180422101707j:plain
有明漫画祭の三日目東館に比べたら....楽だよね...
でもしんどかった...
f:id:PANTOMAIMU:20180422102557j:plain
なんとか整理券をゲットして入場...
結構人が多くて大変でしたが、ほしい本や知り合いに会うことができたので、とりあえず撤収~
で、戦利品...
f:id:PANTOMAIMU:20180422115649j:plain
f:id:PANTOMAIMU:20180422152023j:plain

散財してしまいました...orz
使った金額.... 考えるのは....やめました....( ノД`)

とりあえず撤収した後に、久しぶりにシャッツキステに行って一休み...
f:id:PANTOMAIMU:20180422131635j:plain
f:id:PANTOMAIMU:20180422125132j:plain

本を買って、なんか満足してできる気にだけなっていますw

さて、明日から月曜が始まる ヾ(:3ノシヾ)ノシ

今日届いた本

ちょっとブログ更新が滞っています...orz
う~ん、なかなか思うように事が進まないヾ(:3ノシヾ)ノシ

そんな中、今日届いた本...

Software Design 2018年5月号

f:id:PANTOMAIMU:20180419194539j:plain
Software Design

今回は、HashiCorp入門につられて買いました :-)
データベースの特集もちょっと気になるけど、今は自動化に興味があるので...

Python Markdownを使ってみよう

Jupyter Notebookを使って運用する際、運用対象のホスト名称やIPアドレスを変数に定義して記述すると、実行手順を記述したNotebookの再利用がやりやすくなります。
この際、変数に定義した値がMarkdownにも使えると、ホスト名称などをMarkdown形式で記述した部分も、記述を変更することなく再利用することができるようになります。

そんな用途に使えるのが、Jupyter NotebookのextensionにあるPython Markdownです :-)

Python Markdownの説明は、この動画を観るとよくわかると思います。

IPython NB extension PythonMarkdown


今日は、このPython Markdownを有効にする方法などを書いてみようと思います。

Python Markdownの有効化

最初は、extensionにあるPython Markdownを有効にする方法です。

まず、Jupyter Notebookのホーム画面のNbextensionsを選択してください。
選択すると、下の画面のようにextensionを有効/無効にする画面になります。

f:id:PANTOMAIMU:20180402214930p:plain
Nbextensions
この画面にある、Python Markdownチェックボックスを選択すると、Python Markdownが使えるようになります。

Python Markdownの使用例

Notebookを作る際、運用対象のホスト名称やIPアドレスを変数に定義して、その変数の値をNotebookのコマンド実行セルに使用することで、Notebookの再利用性が上がったり、Notebookのメンテナンスがやりやすくなります。
たとえばこんな感じです。

f:id:PANTOMAIMU:20180402210135p:plain
変数を使ったNotebookの例
まず一番最初のセルに、変数にしたいホスト名称やIPアドレスの定義をします。
この例では、こんな感じに、検証対象のホスト名称と、疎通確認先のIPアドレスを定義しています。

host_name='dev01'
cent_dev_ip='10.0.1.1'

Markdownの記述の中で変数の中身を表示したい場合は、以下のように{{ }} で変数を囲みます。

検証ノード({{host_name}})の動作確認

このように記述すると、Python Markdownが変数の値を、Markdownとして出力してくれるようになります。

セルの中のコマンドで変数を使う場合は、以下のように変数名の先頭に$を付けると、セルの中で変数の値に展開されます。

!ansible  -b -m shell -a 'ping -c 3 $cent_dev_ip ' $host_name

こんな感じで、変数を使ったNotebookを実行してみた結果が、以下の画面になります。

f:id:PANTOMAIMU:20180402210131p:plain
変数を使ったNotebookの実行結果

Markdownのところを見ると、変数の値が展開されて「検証ノード(dev01)の動作確認」となっています。
Python Markdownが使えると、この例のように、変数名を指定することでMarkdownに変数値を出力できるようになるので、実際の変数値をコピペして記述するという、冗長でミスの増える作業から開放されます :-)

セルでのコマンド実行結果も、変数の値が展開されています。

dev01 | SUCCESS | rc=0 >>
PING 10.0.1.1 (10.0.1.1) 56(84) bytes of data.
64 bytes from 10.0.1.1: icmp_seq=1 ttl=64 time=0.313 ms
64 bytes from 10.0.1.1: icmp_seq=2 ttl=64 time=0.307 ms
64 bytes from 10.0.1.1: icmp_seq=3 ttl=64 time=0.270 ms

--- 10.0.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.270/0.296/0.313/0.027 ms

今回の例で作成したNotebookですが、このNotebookファイルをコピーして、最初に定義しているhost_nameの値を'dev02'と書き換えるだけで、dev02用Notebookとしてそのまま使えるようになります。

このように変数をうまく使うと、Notebook内での設定ミスを減らしたり、Notebookの再利用がやりやすくなります。

それでは :-)

今日届いた本

ここのところ、暖かい日が続いています :-)

そんなわけで、今日届いた本...

Effective DevOps

f:id:PANTOMAIMU:20180327200019j:plain
Effective DevOps

Effective DevOps ―4本柱による持続可能な組織文化の育て方

Effective DevOps ―4本柱による持続可能な組織文化の育て方

プログラム開発がメインだった頃に、遅かれ早かれDevOpsの方向に進むことになるだろうなぁ...と思い始めて早6年...
色々ある中、Ops寄りの仕事を取ってきたりして、少しづつ下地を固めてつつ現在に至っているので、こういう本は見逃せなかったりします :-)

これから数年は、このDevOpsという文化の中で仕事をしていくことになるのかなぁと思っています。

会話もメールも 英語は3語で伝わります

会話もメールも 英語は3語で伝わります

会話もメールも 英語は3語で伝わります

今日届いたわけではないのですが、週末に買った本...
英語が超絶苦手で、コンプレックスがあるのですが、たまにこういう本を買って自己満足しています....orz
SVOだけでやってしまえ...という荒っぽい内容ですが、あぁ...こういう考え方もあるなぁ...ってので面白かった
あと、日本語の言語の思考プロセスを変えないと、英語って難しいよなぁ...ってのも再確認したのでしたヾ(:3ノシヾ)ノシ

今日が桜の見ごろ

5日前の大雪から一転して、快晴の週末w
f:id:PANTOMAIMU:20180325120122j:plain
思ったよりも暖かくなっていて、いい感じに桜が咲いていました :-)
来週には花が散り始めていそうなので、今日あたりが見ごろかもしれないなぁ...

NotebookからAnsibleを実行してみる

今日は、前のブログで構築したJupyter Notebook環境で、Ansibleを実行してみようと思います。

今回、Ansibleで実行してみる内容は、

  • Ansible実行用アカウント登録
  • sshd設定の変更

です。

Ansibleで運用するノードを新たに追加する場合に必要なオペレーションだと思うので、構築した検証環境で実行してみます。
この2つのオペレーションをplaybookにして、このplaybookをNotebookから実行してみます。

Notebook上のplaybook配置場所の説明

まず、Notebook上でplaybookを配置する場所についての説明をします。
前のブログでJupyter Notebookを環境した際に、ansibleのインベントリファイルを作成しましたが、その時に作成した~/sys-ope/notebooks/ansible にplaybookを配置します。
Notebook上では、以下のように/ansible の下になります。

f:id:PANTOMAIMU:20180321134704p:plain
/ansible

Ansible実行用アカウント登録playbook

まずはAnsible実行用アカウントの登録と公開鍵の登録playbookを作ります。
ファイル名は add_ansible_user.yml として作成します。
作成は、/ansibleの下でNewボタンのプルダウンでテキストファイルを作成してからrenameしてから、Notebook上で編集して下さい。
面倒であれば、PC上で作成したうえでUploadしてもよいです。

add_ansible_user.yml

---
- hosts: all
  become: yes
  tasks:
    - name: add ansible user
      user: name=ansible
 
    - name: add public key
      authorized_key:
        user: ansible
        key: "{{ lookup('file', '/home/bit_kun/.ssh/ansible_id_rsa.pub') }}"
 
    - name: add sudo
      lineinfile:
        dest: /etc/sudoers
        backup: yes
        line: 'ansible ALL=(ALL) NOPASSWD: ALL'

実行しているTaskは

  1. ansibleユーザ追加
  2. 公開鍵配置
  3. sudo権限付与

になります。

公開鍵ファイルであるansible_id_rsa.pubは、Jupyter Notebookを環境した際に生成した鍵セットになります。

sshd設定の変更playbook

次はsshdの設定をplaybookを作ります。
ファイル名は sshd_setup.yml として作成します。

sshd_setup.yml

---
- hosts: all
  become: yes
  tasks:
    - name: disable SELinux
      selinux:
        state: disabled

    - name: disable password ssh login
      lineinfile:
        dest: /etc/ssh/sshd_config
        regexp: "^PasswordAuthentication"
        insertafter: "^#PasswordAuthentication"
        line: "PasswordAuthentication no"

    - name: disable ChallengeResponseAuthentication
      lineinfile:
        dest: /etc/ssh/sshd_config
        regexp: "^ChallengeResponseAuthentication"
        insertafter: "^#ChallengeResponseAuthentication"
        line: "ChallengeResponseAuthentication no"

    - name: disable root login
      lineinfile:
        dest: /etc/ssh/sshd_config
        regexp: "^PermitRootLogin"
        insertafter: "^#PermitRootLogin"
        line: "PermitRootLogin no"

    - name: restart sshd
      service:
        name: sshd
        state: restarted

実行しているTaskは

  1. SELinux無効化
  2. sshでのパスワードログインの無効化
  3. チャレンジレスポンス認証の無効化
  4. rootログインの無効化
  5. sshd再起動

になります。

Notebookからplaybookを実行してみる

それでは、作成したplaybookをNotebook上で実行してみます。
playbookを実行する前に、インベントリファイルが準備されていることを
確認してください。

インベントリファイルの作成

運用で使えるJupyter Notebookコンテナ構築手順まとめ - Memo Log

まず新規にNotebookを作成します。
Notebook生成手順は、前のブログのここを参照してください。

Notebookからansibleを実行してみる

運用で使えるJupyter Notebookコンテナ構築手順まとめ - Memo Log

Notebookができたら、Ansible実行用アカウント登録playbookを実行してみます。
Notenookのセルに、!付きでansible-playbookコマンドを入力します。

f:id:PANTOMAIMU:20180321144122p:plain
ansible-playbook実行

入力内容は以下の通りです。

!ansible-playbook ansible/add_ansible_user.yml -e 'ansible_user=root ansible_ssh_pass=xxxxxxx'

Ansible実行用アカウント登録ですが、最初はrootでのパスワードログインで実行します。
xxxxxxxには、rootのパスワードを入力します。

入力したコマンドは、Runボタンを押して実行します。
実行すると、セルの下に実行結果が出力されます。

f:id:PANTOMAIMU:20180321145201p:plain
Ansible実行用アカウント登録playbook実行結果

同じように、次はsshd設定の変更playbookを実行してみます。

!ansible-playbook ansible/sshd_setup.yml

実行結果は、以下のようになります。

f:id:PANTOMAIMU:20180321145157p:plain
sshd設定の変更playbook実行結果

この実行結果は、Jupyter Notebook形式のファイルとして保存されます。
GitHubは、このJupyter Notebook形式ファイルに対応しているので、実行手順や結果をGitHubに公開して共有することも出来ます :-)

今回のこのNotebookに、Markdown形式でコメントを追加したものを公開しています。
github.com

Markdown形式のコメントを記述すると、Jupyter Notebookでは左側に目次をツリー形式で表示することができます。

f:id:PANTOMAIMU:20180321150404p:plain
目次の表示
ツリー側で目次を選択すると、その目次のセルにフォーカスが移動するので、ドキュメントを参照するように、手順に沿ってオペレーションができるようになります。

以上が、NotebookからAnsibleを実行してみた内容になります :-)

今日届いた本

三月終盤でもうすぐ4月だというのに雪です...orz
寒い...
f:id:PANTOMAIMU:20180321152325j:plain

そんな中、Amazonに頼んでいた本が届きました。
こんな天気の日に配達させてしまってごめんなさい >クロネコヤマトさん

ソフトウェアデザイン 2018年4月号

f:id:PANTOMAIMU:20180321112327j:plain

今月号は、第1特集の機械学習の始め方と、第2特集のPythonマイツール作成で仕事効率化目当てで買いました。
scikit-learnにちょっとだけ興味があったので、導入になればいいなぁ...って思っていたら、5月号からscikit-learnの連載が始まるらしい...