SSMJP-20250421-02-NLOG2N2

2.1K Views

April 21, 25

スライド概要

Ansible 超入門(修正版)

profile-image

サーバーやネットワークを構築したり、ちょっとしたスクリプトをかいたり、通信解析を行ったりすることが得意なフレンズです。 シェル芸、Wireshark が大好き。流離のシェルスクリプター。ここに書かれてあることは大部分がフィクションです。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Ansible超入門 beginning Jinja2 を制するものが Ansible を制す molecule 完全に理解した system-role も少しあるよ @nlog2n2 Sekiguchi Toshihiro

2.

Ansible超入門 beginning Jinja2 を制するものが Ansible を制す スライドが100枚超えたため molecule 完全に理解した 次回やります system-role も少しあるよ スライドが100枚超えたため 次回やります @nlog2n2 Sekiguchi Toshihiro

3.

おしながき・なおす • Ansible • 本題 • 概要説明 • Ansible の実行環境構築 • IaCの闇 • まとめ • ansible のインストール作業 • 静的なIaC、動的なIaC • ansible glaxy について • 不都合な真実 • collection と role の作成 • Appendix • デバッグメッセージ表示の playbook の作成と実行 • 日本の Ansible 情報四天王 • molecule の環境構築 • Ansibleの lint は鬼門 • venv で python の仮想環境作成と molecule のインストール • molecule でテストシナリオを作成 • molecule でのテスト環境の作成(Podman) • molecule でのデバッグメッセージ表示の playbook の作成と実行本題 3

4.

本編 4

5.

Ansibleとは 5

6.

Ansibleとは AnsibleはオープンソースのIT自動化エンジンであり、プロ ビジョニング、構成管理、アプリケーションのデプロイメ ント、オーケストレーション、その他多くのITプロセスを 自動化します。 Ansibleは無料で使用でき、数千人の貢献者の経験と知識 から恩恵を受けています。(ChatGPTさん翻訳) 6

7.

所謂 Infrastructure as Code サーバやネットワーク機器の設定を自動化するツール 7

8.

Ansible の環境構築 8

9.

Ansible のインストール作業 • Ansible のインストール / sudo apt-get install ansible • Ansible バージョン確認 / ansible --version 9

10.

Ansible Glaxyが利用できることを確認 10

11.

Galaxy とは • 概要 誰かが作った ansible の role や collection を使ったり、自分が作った role や collection を共有したりできるやつ 11

12.

Collection と Role(雑に説明) • 公式の説明 コレクションは、プレイブック、ロー ル、モジュール、プラグインなどを含む Ansibleコンテンツの配布形式です。コ レクションは、Ansible GalaxyやPulp 3 Galaxyサーバーなどの配布サーバーを 通じてインストールして使用できます。 • 呼び出す時は、collection名.role名.role 名みたいな感じだと思います。 tasks molecule role module plugin playbook role collection • 昔のansibleではなかった概念らしい。 • いわゆるライブラリ的に使うやつ。 https://docs.ansible.com/ansible/latest/collections̲guide/index.html

13.

Ansible の collection と role の作成 • Ansible のコレクションの作成 /ansible-galaxy collection init ssmjp.demo • Ansible のロールの作成 / ansible-galaxy role init read̲ le fi 13

14.

ざつに debug 文を作って疎通テスト debug のロールを呼び出して test という変数に Wellcome ssmjp !! を代入 helloworld.yml で代入された文字列を デバッグメッセージとして表示 • site.yml どのロールを呼び出すかを決める playbook • inventories/server.ini サーバー一覧を記載した設定ファイル • roles/debug/main.yml デバッグのロールが呼び出された時に実行される playbook同じディレクトリ内にある別の playbookの呼び出しに利用する • roles/debug/helloworld.yml デバッグメッセージを表示する命令を書いた playbook 14

15.

ざつに debug 文を作って疎通テスト • Playbookの実行 / ansible-playbook site.yml --tags debug -i inventories/server.ini --private-key ~/.ssh/ansible • 実行するロールをタグを指定して選定 / --tags • サーバーの名前やグループ、IPアドレスが記述されたファイルを指定 / -i • SSHでログインする時に利用する秘密鍵を指定 / --private-key 15

16.

環境構築 完(ヨシっ 16

17.

テスト環境で大丈夫か。 いや、ダメだ。 テスト実行環境に冪等性がない。 17

18.

テスト実行環境に冪等性がない。 18

19.

テスト実行環境に冪等性がない。 (大事なことなので2回言いました) 19

20.

そこで molecule 20

21.

molecule 21

22.

molecule とは Molecule Project は Ansible のロール開発とテストを支援するプロジェクトで、複数のインスタンス、OS、ディスト リビューション、仮想化プロバイダー、テストフレームワーク、およびテストシナリオでのテストをサポートします。 Moleculeは、一貫性があり、適切に記述され、理解しやすく保守しやすいロールの開発を推奨します。 22

23.

molecule は、 Role のテスト環境を ansible で作って、 Roleのシンタックスチェックやテストを行なって、 テスト環境を壊すまでの一連の動きを行うツール 23

24.

moleculeを使うには venv の利用が望ましいらしい venv が何かはよくわからないが、 多分、ruby の rbenv みたいなもんだろう 24

25.

venv • 公式の説明 venv モジュールは、軽量な仮想環境の作成を行います。それぞれの仮想環境は、site ディ レクトリに独立した Python パッケージの集合を持っています。仮想環境は、ベース Python とも呼ばれる、すでにインストールされている Python の上に作成され、明示的にインスト ールしたパッケージのみが利用可能となるよう、ベース Python から隔離することもできま す。 仮想環境の中から使われると、 pip のような一般的なインストールツールは明示的に指定し なくても仮想環境に Python パッケージをインストールします。 https://docs.python.org/ja/3.13/library/venv.html 25

26.

molecule のインストール • 仮想環境のセットアップ / python -m venv .venv • 仮想環境の読み込み / source .venv/bin/activate • molecule のインストール / pip install molecule 26

27.

molecule の使い方 公式:https://ansible.readthedocs.io/projects/molecule/getting-started/ 27

28.

テストシナリオのテンプレートを作成 テストシナリオを作成 / molecule init scenario 28

29.

テストシナリオを実行 テストシナリオを実行 / molecule test 長すぎてみえない 29

30.

テストシナリオを実行 テストシナリオを実行 / molecule test INFOの順番にPlaybookを実施してテストケースを実施しているようだ 30

31.

テストシナリオを実行 31

32.

公式の説明 • create.yml インスタンスの作成 • destroy.yml インスタンスの削除 • molecule.yml ロールの検証を行う際の処理を定義するファイルで、molecule コマンドを実行するときのエントリーポイント • converge.yml 作成したインスタンス上で検証を行う対象のロールを呼び出し 32

33.

テスト実行環境を 作っていく 33

34.

Podman を使って ubuntu 環境を作る • 公式のサンプル https://ansible.readthedocs.io/projects/molecule/examples/podman/ あの。AnsibleってRedHatの製品ですよね。 なぜ ubuntu ? 🤔 → Ansible 自体は OSS のプロダクトと指摘を受けました。 ごめんなさい🙇 34

35.

Podman を使って ubuntu 環境を作る • 何もしないとテストに必要な ansible のモジュールがないから、 podman のモジュールをインストールしてくださいと ansible-lint から言われる。 35

36.

Podman を使って ubuntu 環境を作る • ansible で podman を利用するための collection をインストール/ ansible-galaxy collection install contatiner.podman • molecule test すると create.yml が実行されたときに、ubuntu のコンテナが作成される 36

37.

Podman を使って ubuntu 環境を作る podman で ubuntu の環境が起動しました 37

38.

Podman を使って ubuntu 環境を作る 実行結果 良さげ 38

39.

debug 文を実行してみる • converge.yml に以下のコードを追加 39

40.

debug 文を実行してみる よさげ 40

41.

環境構築 完(ヨシっ 41

42.

注意事項:molecute molecule のメジャーバージョンアップ頻度が激しく 実運用には耐えられなそう (耐えられる変更にしてほしい) 42

43.

本題 43

44.

IaCの闇 情報工学やっていれば、データと処理は分けろ的な話があると思います。 • データ構造とアルゴリズム • MVCモデル(死語) しかし、Ansible のサンプルコードは、ハードコーディングの事例が多い印象があります。 個人的にシステムの構成管理や設定に関しては、 • 各機器の設定は構造化したデータ(csv, json など)として扱いたい • 設定で必要な処理はデータを読み取った内容を適用したい となるのが自然だと考えていました。 ※ のちに Ansible はこの思想じゃなさそうということに気づく/おそらくテンプレート展開エンジンとして使うのが正しいはず 44

45.

というわけで、 構成管理で使えそうな csv と json の 読み込み方について話します 45

46.

csv, json の ファイルの読み込み 46

47.

は、次回やります

48.

まとめ 48

49.

すごく たいへん

50.

静的なIaC、動的なIaC(副作用あり? IaCをいくつか触って所感ですが、 • コンフィグを展開するだけの静的なIaC Terraform、Docker、Docker Compose • コンフィグの中身をゴリゴリ処理して作って行く動的なIaC Ansible、シェルスクリプト が、あるように感じています。 Kubernetes は、守備範囲が広く、どちらもやっているような感じがします。 50

51.

不都合な真実 • 最後は力技なところが多い • 困った時は最終的にAnsibleでもシェルを呼び出すことになるため、だったら最初からシェルスクリプトで良くないか?とな る。 • コミュニティの情報を見始めると最終的にはPythonのコードが書かれてあるGithubまで行って、例外処理を確認することに なるんだ。 • 【重要】なんならすごく低いレイヤーの d-bus の処理を読まなきゃなんのだ • どこかIaCなのか。サーバーなんて、ファイル作って、サービスを呼び込むだけの処理の方がおおいのに、、、動的な処理な ど要らぬ!!(心の叫び • 既存の構成管理で利用されている台帳などの再利用が簡単じゃないなら、割り切って、エクセルでなんかコンフィグを吐き 出して、その吐き出したコンフィグを実行するシェル作った方が(おっと誰かがが • 基本的に実装に必要な情報が少ない。実装しようとすると、 pip install (パッケージ名)や ansible-galaxy collection install (コレク ション名)をして、検証機材の上で、実行中に呼び出されるファイルの実装とソースコード上のコメントを眺めて、Playbookを実装する ことになります。Pythonに慣れていてもかなりの苦行です。ドキュメントのページは用意されていますが、完璧じゃないので、、、 俺は、 AnsibleのPlaybookを書いてたはずなんだ、、、 51

52.

NTPの設定(それでいいのか。) • chrony インストール • chrony の設定ファイルを配置(作り 置き Jinja2 形式のもの) • chrony の再起動 https://www.redhat.com/en/blog/ansible-chrony-daemon 52

53.

appendix 53

54.

TIPS:日本国内のAnsible情報四天王 • Ansibleの情報を日本語で調べようとすると、 以下の人たちにヒットすることが多い。 • 日常系インフラ自動化もふもふおじさん • よこちさん • zaki-hmkc さん • ネットワンシステムズの皆様 (本名ぽいの名は伏せます) 54

55.

TIPS: Ansible の lint 鬼門すぎる • Ansible のソースコードを静的に分析し、コーディングスタイルが正しいか、 Playbook の実行時にエラーが起きそうかなど、をチェックしてくれる。 • ansible-lint コマンドが問題かというより、 Ansible のコーディングスタイルがバ ージョンによってコロコロ変わることが原因でエラーの修正に追われる時間帯が 増える。 • 常に Ansible の Playbook を作れるインフラエンジニアを抱えてればいいとは思 いますが、そんな組織は稀有だと思い、これはちょっとなぁと。。。 • 最近は Ansible Deverloper Tool (ADT) なるものがあるらしいですが、もう僕に はわかりません。最近 is いつ???多分、Python3.10 以上ぽい。 55