てくなべ (tekunabe)

ansible / network automation / 学習メモ

【JANOG42】Ansible ネットワーク自動化チュートリアルを発表してきました

■ はじめに

2018/07/11 - 13 に三重県津市で開催された JANOG42 Meeting in Mie(ホスト:株式会社ZTV様)で「Ansible ネットワーク自動化チュートリアル」を発表してきました。

Ansible ネットワーク自動化 チュートリアル :: JANOG42

Ansibleの初心者向けのチュートリアルとなります。 主にサーバ向けの構成管理ツールとして利用されるAnsibleですが、近年はネットワークの構成管理および自動化ツールとしても利用されるようになっております。 今回はこれからAnsibleを始められる方や初心者向けに、概要/基礎から簡単なプレイブックの書き方などを紹介して参ります。

ありがたいことにご縁がありまして、レッドハットの北山さんからのお誘いで共同セッションという形になりました。

f:id:akira6592:20180718174324j:plain

■ 資料(デモ動画付き)

www.slideshare.net


■ 動画(2018/08/31 12:59 (JST)まで)

以下のページの下のほうから当日の動画が視聴できます。 はじめから 42:00 頃までが前半の北山さんパート、 42:00 頃以降が後半の私のパートです。

Ansible ネットワーク自動化 チュートリアル :: JANOG42


■ 内容

前半の北山さんパート(~P43)で、ネットワーク自動化を取り巻く環境やポイント、Ansibleの特徴、各コンポーネントの概要をご紹介しました。

後半の私のパート(P44~)で、ネットワーク機器対応の仕組みや、利用方法、デモ動画付きのサンプルをご紹介しました。


■ 感想など

準備

はじめて Ansible を知るネットワークエンジニアの方を対象として内容を決めていきました。 限られた発表時間の中で、例えば、YAMLをどこまで詳しく説明するか、どの程度の難易度にするかなど悩みました。特にどのようなサンプルを乗せるかを悩みました。

まず、showコマンドによる情報取得編と、setコマンドによる設定変更編に分けて考えました。そのうえで、それぞれ難易度低、中、高(相対的にですが)の3つずつ、レベルを少しずつ上げて紹介して理解していただきやすいように枠を組みました。

あとは、普段ネットワークに接している人がピンときやすいようなサンプルを考えました。 全体としては「はじめての自分にも使えそう」という期待感と「こんなこともできるのか」という期待感の、2つの期待感を持っていただけるように意識しました。

細かいところですが、デモ動画のキャプチャーは普段ScreenToGifというWindows対応のツールを使っています。トリミングなどの簡単な編集もできるのでよく使っています。 撮った動画は当日再生するためにmp4で保存おき、YouTubeにもアップして、あとでSiledeShareに差し込めるようにしておきました。SlideShareで資料を見たときに左上に YouTube Video inside という印があるのが動画を差し込んでいる目印です。

当日

スケジュールと会場の都合で、開始予定時刻になっても人がほとんどいらっしゃらなくて、正直焦ってりました・・・。結果的には、開始時刻を10分遅らせて開始しました。どうにか調整が効く範囲内だったので、予定終了時刻に発表を終えることができました。

発表後、参考になったなどのフィードバックをいただたのが嬉しかったです。 ただ一方で、JANOGは運用者がメインのコミュニティだと思いますので、運用面でのノウハウ等も含められると良かったのかなという面もありました。


■ さいごに

今回は、JANOG Meetingという大きなイベントにおいて、90分という長時間の枠をいただき、貴重な体験をさせていただきました。 ホストの株式会社ZTV様各スタッフのみなさま、ご参加いただいたみなさま、ありがとうございました。

Interact 2018 に参加してきました(k8s / MS SDN / Ansible / Azure)

■ はじめに

Interact 2018 というイベントに参加してきました。私は今回がはじめての参加でしたが、今年で5年目だそうです。

interact.connpass.com

twitter.com

マルチセッション形式だったのですが、私は以下の4セッションに参加しました。

それぞれ、簡単に振り返りたいと思います。


■ 今からはじめる Kubernetes 入門

Kubernetesについてはあまり知らないのですが、Docker の特徴や、 Kubernetes で何が嬉しいか、などがふわっと分かった気がします。 Node、Pod、Service、等の構成要素の名前は聞いたことがあったのですが、図解を見て整理できました。 コンテナを落としても自動復旧されるようなでデモも見れました。


PowerShell of Microsoft SDN v2 101

www.slideshare.net

PowerShellMicrosoft SDN v2 を操作するデモを多数見れました。 仮想ネットワーク、仮想マシンのつなぎ込み、VPN接続など、様々なことをPowerShellでやっていました。 初めて知ったのですが、101(ワンオーワン)とは、入門や基礎といった意味だそうです。


■ Ansible x Windows: AnsibleではじめるWindows自動化

あまり情報のない、WindowsをAnsibleで自動化する方法や、トラブルシューティング方法などが紹介されていました。 既存のマイクロソフト製品などを利用してうまくいっている場合は無理にAnsibleを利用しなくてもよさそうですが、Linuxも一緒に管理している場合、まとめてAnsibleを利用すると統一感がでるので、これも手かなと思いました。 接続方式であるWinRMのエラーメッセージが具体的でなく、ちょっとハマりどころなような印象もうけました。なので資料中のトラブルシューティング方法は要チェックかと思います。

いくつか、紹介されていた内容に対応する公式ソースのリンクを補足させていただきます。


Microsoft Azure Global VNet Peering

(資料発見したらリンク貼る予定)

10リージョンを VNet ピアリングするPowerShellスクリプトを流しているデモの間に、Azureのネットワークを説明するというエキサイティングなセッションでした。PowerShellは30行程度でした。 ここまで自動化できると設計思想も変化を求められるのだと感じました。 マイクソフトさんは、ものすごいしっかりとしたグローバルなネットワークを保有している事もわかりました。


■ さいごに

魅力的なセッションが多数あったため、なかなか迷いました。 登壇者のみなさま、運営スタッフのみなさま、会場提供の日本マイクロソフトさん、ありがとうございました。 来年も参加したいと思います。

自動化を考える前に読んでおきたいプレゼン資料たち

はじめに

以前こんな記事を書きました。(ほぼリンク集ですが・・) tekunabe.hatenablog.jp

今回はこれのプレゼン資料版のような記事です。ここ半年くらいの資料を対象にしています。 具体的なツールの使い方などのスキルとは別に、考え方についても備えていきたいと思っています。


運用自動化、不都合な真実

いろいろと考えるきっかけになった資料です。


生き残る運用管理者 ~運用自動化を成功させる人、失敗させる人~


その運用自動化では行き詰まる 〜「つながらない」「つたわらない」「つみあがらない」を防ぐために〜 (2018/07/17リンク追記)


リクルート流SRE インフラ運用がサービスを変える世界


新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた

www.slideshare.net

イベントレポートも参照。 www.atmarkit.co.jp

Ansible 目線で見た Interop Tokyo 2018


■ はじめに

2018/06/13 -15 に幕張メッセで開催された Interop Tokyo 2018 に参加してきました。

www.interop.jp

f:id:akira6592:20180618134348p:plain

今回は、Ansible というキーワードを中心にしてブースを回ってみました。 回ってみた各ブースなどで紹介していただいた内容を簡単ですがまとめます。


■ Show Net

一括設定

現物は見逃してしまいましたが、以下のツイートを後で見かけました。 一括設定に Ansible Tower が利用されていたそうです。


セイコーソリューションズさん

SmartCS と Ansible の連携(参考出展)

コンソールサーバー SmartCS とAnsible (+AWX) を連携することにより、IP到達性がない機器にも操作できるという構成でした。

紹介されていたユースケースは以下の2つです。

  • 機器のICMP死活監視が落ちたら、コンソールポート経由で情報を取得する
  • コンソールポート経由でIP設定を行う

いずれも、コンソールサーバーを活用することで、今まで思いつかなかったようなユースケースに感じました。

f:id:akira6592:20180618141956p:plain f:id:akira6592:20180618135403p:plain

f:id:akira6592:20180618135329p:plain


■ アラクサラネットワークスさん

サードパーティモジュール ax_*

日本のネットワーク機器ベンダーの Ansible 対応状況(Alaxala・APRESIA)でもご紹介しましたが、会員サイトから Alaxala モジュールがダウンロードできるようになっています。

応用的なケースとして、AX3660Sに搭載されているオンボックスなPythonを利用して、機器自身で機器側のイベントを検出して Ansible Tower を呼ぶ、という方法も紹介されていました。

f:id:akira6592:20180618140852p:plain f:id:akira6592:20180618140908p:plain f:id:akira6592:20180618140931p:plain f:id:akira6592:20180618140947p:plain


■ A10ネットワークスさん

a10_* モジュールの紹介と活用例

サードパーティモジュールとして以下のリポジトリでA10モジュールが提供されているそうです。 詳細は聞きそびれてしまいましたが、こちらかと思います。 https://github.com/a10networks/a10-ansible もともと機器側にあるAPIを呼び出す仕様だそうです。

f:id:akira6592:20180618141236p:plain

また、活用例の図も見せていただきました。 Ansible が中心となり、OpensStack 経由で vThunder を起動させて設定をする構成です。 プロビジョニングする構成が新鮮でした。

f:id:akira6592:20180618141857p:plain


■ Zabbix

システナさんのコーナーで、Ansibleの導入支援や、モジュール開発について紹介されていました。

f:id:akira6592:20180618142203p:plain f:id:akira6592:20180618142136p:plain


■ ジュニパーネットワークスさん

弊社エンジニアによるセッション「ネットワーク運用自動化こと始め」の中でもAnsibleが取り上げられていました。


■ 所感・まとめ

思いのほか Ansible という言葉を見かけました。視野が狭かった可能性は大いにありますが、類似の構成管理ツールの名前は見かけませんでした。今まで標準モジュールばかりウォッチしていましたが、ベンダー自身がサードパーティモジュールとして提供しているものものあり、今後も増えてくるかも知れません。 今後も Ansible とネットワーク機器との関わり方には注目していきたいと思います。

Ansible でインベントリファイルを用意せずに対象ホストを指定する方法

-i にカンマ区切りで直接ホストを指定できる

通常、 ansible-playbook コマンドや ansible コマンドのオプション -i オプションでは、イベントリファイル名を指定することが多いと思います。 この -i オプションですが、インベントリファイルを用意することなく、対象ホストをカンマ区切りで直接指定することもできます。


例えば、rt01sw01 を対象とする場合は、以下のように指定します。

ansible-playbook -i rt01,sw01 playbook.yml


対象が1ホストだけの場合は、末尾のカンマを残したかたちにします。

ansible-playbook -i rt01, playbook.yml


なお、末尾のカンマがないと、インベントリファイル名が指定されたとみなされます。

ansible-playbook -i rt01 playbook.yml

(この場合 rt01 というインベントリファイルを探しいく)

インベントリファイルを用意するほどでもないときは、この方法を利用してみてはいかがでしょうか。


参考

コマンドオプションヘルプ (or comma separated host list と記載あり)

[vagrant@centos7 ~]$ ansible-playbook
Usage: ansible-playbook [options] playbook.yml [playbook2 ...]

Runs Ansible playbooks, executing the defined tasks on the targeted hosts.

(略)
  -i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY
                        specify inventory host path or comma separated host
                        list. --inventory-file is deprecated



[https://docs.ansible.com/ansible/2.9/plugins/inventory/host_list.html:title]

docker run で Ansible の Playbook を実行する

ansible のリポジトリに ansible-runner なるものを見つけました。

github.com

デモ用に docker で ansible を動かす例が載っていました。

docker run -it --rm -e RUNNER_PLAYBOOK=test.yml ansible/ansible-runner:latest

手元に ansible がない環境で docker run 経由で ansible を動かす、という方法は面白いなと思ったので試すことにしました。

f:id:akira6592:20180607161707g:plain

実行される Playbook は、

ansible-runner/test.yml at master · ansible/ansible-runner · GitHub

のようです。

- hosts: all
  tasks:
    - debug: msg="Test!"

Vagrant で手軽に VM ごと StackStorm の環境を準備する

■ はじめに

StackStorm の環境を準備するには、インストールスクリプトを実行する方法や Ansible の Playbook を実行する方法などがありますが、先日の公式ブログでは vagrantVMごと StackStorm の環境を準備する方法が紹介されていました。

stackstorm.com

公式ドキュメントの「Vagrant & Virtual Appliance」にも、記載されていましたので、これらの情報をもとに試しに、環境を準備して、ごく簡単な動作確認をします。

環境:

※ Ansible で StackStorm にインストールする場合はこちら http://tekunabe.hatenablog.jp/entry/2018/03/12


■ StackStorm 入りのVMの準備と起動

以下の2行だけです。

vagrant init stackstorm/st2
vagrant up

vagrant init stackstorm/st2 で最低限の Vagrantfile が生成され、その情報をもとに vagrant upVMを起動するという流れです。

akirapc:st2 akira$ vagrant init stackstorm/st2
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
akirapc:st2 akira$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'stackstorm/st2' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'stackstorm/st2'
    default: URL: https://vagrantcloud.com/stackstorm/st2
==> default: Adding box 'stackstorm/st2' (v2.7.2-20180523) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/stackstorm/boxes/st2/versions/2.7.2-20180523/providers/virtualbox.box
==> default: Successfully added box 'stackstorm/st2' (v2.7.2-20180523) for 'virtualbox'!
==> default: Importing base box 'stackstorm/st2'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'stackstorm/st2' is up to date...
==> default: Setting the name of the VM: stackstorm
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 443 (guest) => 9000 (host) (adapter 1)
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
[default] GuestAdditions 5.2.12 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /Users/akira/Documents/git/python_test/vagrant/st2
==> default: Running provisioner: st2-version (shell)...
    default: Running: inline script
    default: st2 2.7.2, on Python 2.7

==> default: Machine 'default' has a post `vagrant up` message. This is a message
==> default: from the creator of the Vagrantfile, and not from Vagrant itself:
==> default:
==> default:   ███████╗████████╗██████╗      ██████╗ ██╗  ██╗
==> default:   ██╔════╝╚══██╔══╝╚════██╗    ██╔═══██╗██║ ██╔╝
==> default:   ███████╗   ██║    █████╔╝    ██║   ██║█████╔╝
==> default:   ╚════██║   ██║   ██╔═══╝     ██║   ██║██╔═██╗
==> default:   ███████║   ██║   ███████╗    ╚██████╔╝██║  ██╗
==> default:   ╚══════╝   ╚═╝   ╚══════╝     ╚═════╝ ╚═╝  ╚═╝
==> default:
==> default:   To access the Web UI, head to:
==> default:     https://10.10.10.10/
==> default:     Username: st2admin
==> default:     Password: Ch@ngeMe
==> default:
==> default:   Thanks for trying StackStorm!


CLIの確認

SSHログイン

そのまま vagrant ssh コマンドでログインできます。

akirapc:st2 akira$ vagrant ssh
Welcome to StackStorm v2.7.2 (Ubuntu 16.04 LTS GNU/Linux x86_64)

 * Documentation: https://docs.stackstorm.com/
 * Community: https://stackstorm.com/community-signup
 * Forum: https://forum.stackstorm.com/
 * Enterprise: https://stackstorm.com/#product

Last login: Wed Jun  6 11:59:12 2018 from 10.0.2.2
vagrant@stackstorm:~$ hostname
stackstorm
vagrant@stackstorm:~$ uname -a
Linux stackstorm 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
vagrant@stackstorm:~$

ログインできました。Ubutuを利用しているようです。

なお、VirtualBoxVM として SSH へポートフォワーディングは 2222/TCP に設定されますので、ssh コマンドやターミナルソフトでログインする場合は、 2222/TCP を指定します。 ユーザー名、パスワードともに vagrant です。秘密鍵を利用する場合は .vagrant/machines/default/virtualbox/private_key を指定します。

akirapc:st2 akira$ ssh vagrant@localhost -p 2222
vagrant@localhost's password:
Welcome to StackStorm v2.7.2 (Ubuntu 16.04 LTS GNU/Linux x86_64)

 * Documentation: https://docs.stackstorm.com/
 * Community: https://stackstorm.com/community-signup
 * Forum: https://forum.stackstorm.com/
 * Enterprise: https://stackstorm.com/#product

vagrant@stackstorm:~$ hostname
stackstorm

StackStorm ログイン(認証)

StackStormの各種操作には、StackStormへのログインが必要です。ここでは環境変数トークンを仕込む方法でログインと同等の状態にします。 ユーザーは st2admin、パスワードは Ch@ngeMe です。

vagrant@stackstorm:~$ export ST2_AUTH_TOKEN=`st2 auth -t -p Ch@ngeMe st2admin`

st2 run 動作確認

簡単な動作確認として st2 run コマンドで date コマンドを実行します。

vagrant@stackstorm:~$ st2 run core.local -- date -R
.
id: 5b17d02802ebd505e4388361
status: succeeded
parameters:
  cmd: date -R
result:
  failed: false
  return_code: 0
  stderr: ''
  stdout: Wed, 06 Jun 2018 12:14:33 +0000
  succeeded: true

正常に実行できました。


GUI(Web)の確認

ログイン

今度は、Web画面の確認をします。 VMの設定で、9000/TCP から 443/TCP へのポートフォワーディングが設定されていますので、ホストOSのブラウザから https://localhost:9000 にアクセスします。 CLI と居と同じく、ユーザーは st2admin、パスワードは Ch@ngeMe です。 f:id:akira6592:20180606212440p:plain

ログ確認

ログイン後トップ画面の左の方で、先程CLIから実行した st2 run core.local -- date -R のログが確認できます。 f:id:akira6592:20180606212652p:plain


■ ログイン情報まとめ

初期のログイン情報は以下のとおりです。

ログイン方法 ポート番号 ユーザー名 パスワード 備考
SSH 2222 vagrant vagrant 秘密鍵 .vagrant/machines/default/virtualbox/private_key
Web 9000 st2admin Ch@ngeMe https://localhost:9000
st2 login - st2admin Ch@ngeMe


■ まとめ

VagrantVirtualBox で艱難に OSごと StackStorm の環境を準備できることが確認できました。 特に OS/ディストリビューションにこだわりがなく、とにかく手軽にローカルに StackStorm の独立した環境を準備するには、この Vagnrant の方法が良いのではないかと思います。