Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ansible使いたい

141 views

Published on

Ansible使ってみようぜという紹介

Published in: Engineering
  • Be the first to comment

Ansible使いたい

  1. 1. Ansible使って楽がしたい
  2. 2. つらくないですか︖
  3. 3. 似た作業の繰り返し 10台以上ある、似た名前のサーバに対する 環境構築 デプロイメントの⼿動オペレーション 返りが遅いコマンドがあると並列に作業せざるを えない 似たコマンドを何度も打てばミスも起きる
  4. 4. Agenda 1. Ansibleって何 2. Ansibleの使い⽅ 3. Ansibleの構成 4. おまけ
  5. 5. Ansibleって何
  6. 6. Ansibleってなに 構成管理ツール puppet, chefなど infrastracture as code Infrastructure as Code 再考 - Gosuke Miyashita テキストでインフラを表現できる 冪等性とかの話はしない 冪等性がないアクションまで扱える範疇にある 去年Red Hatが買収 Red HatがAnsibleを買収した理由、同社クラウドマ ネジメント戦略担当が説明 - Publickey Ansible and Red Hat
  7. 7. Ansibleのいいところ エージェントレス ssh + pythonで動く ansible {ipaddress} -u {ssh_user} --private- key={path_to_key} -m {module} chefは、対象サーバにchefクライアントのインスト ールが必要 デメリットでもある 管理対象が⼤規模になるとchefの⽅がよいらしい
  8. 8. (参考)動作環境 $ python -V Python 2.7.5 $ ansible --version ansible 2.1.0.0 config file = /etc/ansible/ansible.cfg configured module search path = Default w/o overrides
  9. 9. Ansibleのいいところ タスクの定義がyaml 簡単に書ける とはいいつつpythonがむき出しになってる所もあ る chefは独⾃DSL
  10. 10. Ansibleの使い⽅
  11. 11. インストール yumだとepelリポジトリに⼊ってる pipでもいけるらしい
  12. 12. ⼀番単純な使い⽅ コマンドライン ansible all -m command -a "uptime" 第⼀引数は、対象ホストの指定 allは全ホスト -mでモジュールの指定 -aでモジュールに渡す引数 commandモジュールに"uptime"を渡している 「全ホストにuptimeコマンドを実⾏」という意味に なる モジュールって︖
  13. 13. Ansibleの構成
  14. 14. 主な登場⼈物 モジュール インベントリファイル プレイブック
  15. 15. モジュールとは 対象ホスト上で実⾏するもの sshを通してモジュールが送り込まれ、対象ホスト上 のpythonで実⾏される 組み込みで500以上の種類がある $ ansible-doc -l | wc -l 569 Module Index — Ansible Documentation
  16. 16. インベントリファイルとは 対象サーバの情報をまとめたもの ini拡張形式 デフォルトは、/etc/ansible/hosts -i で個別のインベントリファイルを指定できる ansible all -i ./stage -m command -a "uptime" stage, prodなど環境ごとに⽤意するのがよい
  17. 17. インベントリファイル記述例 [service] service1 service2 [site] site1 site2 []でグループの定義 sshクライアントが解決できるホスト名で書ける ssh_configに定義してある名前 /etc/hostsに定義してある名前 ansible site -i ./stage -m command -a "uptime"
  18. 18. Playbookとは コマンドラインでいちいち指定してたものをまとめてお くもの yamlで書く
  19. 19. Playbookの構成 targetセクション どのホストを対象にするか インベントリ内のグループを指定 varsセクション Playbook中で使いたい変数を定義 任意 tasksセクション 実際に⾏うこと モジュールの羅列
  20. 20. Playbookの実⾏ $ ansible-playbook -i stage some_actions.yml ansibleコマンドとは別にansible-playbookコマンドが ある
  21. 21. Playbook記述例: sshユーザの追加 targetセクションとvarsセクション --- - hosts: ssh # インベントリのsshグループを対象にする become: yes # rootにsuするかどうか remote_user: deploy vars: users: # usersという名前で変数を定義 - name: hoge # dict型の配列 pass: hoge pubkey: /tmp/hoge.pub - name: fuga pass: fuga pubkey: /tmp/fuga.pub
  22. 22. Playbook記述例: ユーザの追加 tasksセクション_1 with_itemsで指定した変数をイテレートしている イテレートした要素はitemという名前でアクセスで きる userモジュールを使ってリモートにlinuxユーザを追加 する passwordは⾃分でハッシュ化しないといけない pythonのライブラリの結果を使ってる tasks: - name: debug # nameはなくてもいい。説明を書くところ。 debug: msg="add user:{{item.name}} password:{{item.pass}}" with_items: '{{users}}' - name: add ssh user user: name='{{item.name}}' password='{{item.pass |password_hash('sha512')}}' with_items: '{{users}}'
  23. 23. Playbook記述例: ユーザの追加 tasksセクション_2 - name: add publickey authorized_key: user: '{{ item.name }}' key: "{{ lookup('file', item.pubkey) }}" with_items: '{{ users }}' - name: enable sudo lineinfile: dest: /etc/sudoers backup: yes line: ' {{ item.name }} ALL=(ALL) ALL' with_items: '{{ users }}' authorized_keyモジュール 公開鍵の配送をしている .sshディレクトリの作成や権限の設定は気にしないで よい lineinfileモジュール ファイルへの書き込み
  24. 24. おまけ
  25. 25. ディレクトリのレイアウト インベントリファイルやプレイブックの置き⽅ 公式のベストプラクティスがある Best Practices — Ansible Documentation ある程度の規模を想定してるっぽいので、軽く使い 始めるには重い
  26. 26. Tips dry-run --checkオプションをつける 実際には実⾏しないけど、どういう変化が起きるか チェックできる 対象サーバの/var/log/messagesには残る verbose -v, -vvv ステップ実⾏ --step タスク単位で⾏う gdbっぽい
  27. 27. やってはいけないこと awsインスタンスのsshd再起動 ミスると死ぬ configいじってシンタクスエラー、再起動失敗 sshdのテストモードを挟めば助かったかもしれない sshd -tで⽂法チェックできるっぽい
  28. 28. 話さなかったこと role タスクを独⽴させて共有しやすくする仕組み 規模が⼤きくなったり、Playbook間で重複が⽬⽴っ てきたら検討したい あんまりよく分かってない ansible-galaxy 3rd partyなroleの公開リポジトリ ansible-tower GUIでansibleを管理できるツール ノード数の制限内なら無料
  29. 29. 話さなかったこと ansible-vault 変数をファイルに切り出すことができるが、パスワ ードを平⽂のまま保存しておくのはイヤ そういったファイルを暗号化しておく機能 暗号化ファイルをPlaybookから読むときは、暗号パ スワードを指定したりする ansible-console repl モジュールの動作や正規表現の確認したいときに使 う︖ ansible-consoleを使おう - Qiita
  30. 30. 軽く触ってみての課題 ansibleの出⼒を⾒て、本当に成功しているか分からな いことがある 実⾏後にserverspecでアサートすればいいかも ⾏の編集が難しい sedで出来るけど怖い 元になるテンプレートをホスト側で保持して、新し いものを丸ごとコピーするのが正解かも
  31. 31. これからどう使っていくか スポット的な作業の場合 複数サーバ相⼿にするなら楽になれる Playbook書くなら引き継げる 新しくサーバをたてる場合 プロビジョニングのこと インベントリファイルをsvnで管理できれば、サーバ 設定管理のエクセルが不要になるかも デプロイに使う場合 プロダクション環境にいきなり使うと失敗しうるの で、同等の環境でリハーサルしたい
  32. 32. 以上です

×