Jupyter Notebook+Ansible(ansible-jupyter-kernel)で実行可能な手順書を作成

はじめに

先日以下のエントリでDjangoアプリのデプロイをAnsibleで自動化しました。

hiroki-sawano.hatenablog.com

今回はansible-jupyter-kernelを使用し、同等の作業をJupyter Notebook上から実行してみます。
ノートブックにAnsibleのプレイブックを記述することで、実行結果の保存、Markdownセルを用いた手順のドキュメント化など、Jupyter Notebookの利点を享受できます。

github.com

実行環境

$ python --version
Python 3.7.4

ansible-jupyter-kernelのインストール

適当な仮想環境を用意し、 ansible-kernel をインストールします。

$ python -m venv venv
$ . ./venv/bin/activate
$ pip install ansible-kernel
$ python -m ansible_kernel.install

Jupyter Notebookの起動

以下のコマンドを実行するとhttp://localhost:8888/が開き、カレントディレクトリのファイル一覧が表示されます。

$ jupyter notebook

f:id:hiroki-sawano:20200729205920p:plain

ノートブックの作成

New ▼ からAnsibleのノートブックを作成します。

f:id:hiroki-sawano:20200729210044p:plain

プレイブックの記述

こちらの説明に従い、 #inventory#play および #task のセルを作成していきます。

inventory

#inventory から始まるセルにインベントリの情報を記述します。ansible_ssh_private_key_fileansible-playbook--private-key に対応する設定です。

f:id:hiroki-sawano:20200824172322p:plain

play

#play から始まるセルにプレイ部分を記述します。

f:id:hiroki-sawano:20200824172418p:plain

task

あとはタスクをひたすら書いていきます。
先頭に #task を書くことでタスクのセルであることを明示的できますが、省略可能です。

f:id:hiroki-sawano:20200824172634p:plain

ノートブックの実行

これでセルを実行すればインベントリに指定したサーバにDjangoアプリをデプロイできるようになりました。
以下のように実行結果がセルごとに残るため、変更内容を確認することができ、また環境構築作業のエビデンスを残すことができるため大変便利です。

f:id:hiroki-sawano:20200824173153p:plain

ノートブックの実行後、デプロイされたアプリに問題なくアクセスできることを確認しました。

f:id:hiroki-sawano:20200824172944p:plain