Upload
subaru-nakamura
View
214
Download
0
Embed Size (px)
Citation preview
3/21 10:00 - 12:00
Ansible 勉強会
はじめに# この会の目的について コンセプトは 「興味を持った技術を、みんなで集まって触ろう!」
いろいろな人が実際に触って ・どのように利用ができるか? ・こういう使い方ができる! という意見を募りたい → 実際に業務の改善につなげたい 新しいサービスに利用したい 今後は、月1程度に定期的な開催を行いたい
アジェンダ### 導入編* Ansible って何?* なんでこれを使うの?* ツールの特徴 などを紹介します ### 実践編* playbook を作ってみる* 要件に即した playbook をみんなで作ってみよう
導入編 /) ///) / ,.= ゙ ''" / / i f ,. r='"-‐' つ___ _ こまけぇこたぁいいんだよ!! / / _ ,. - ‐' ~ /⌒ ⌒\ / ,i , 二ニ⊃( ●) . (●)\ / ノ il ゙フ :::::: ⌒ ( __ 人 __ )⌒ ::::: \ , イ「ト、 , !,!| |r┬-| | / i トヽヽ _/ ィ " \ ` ー '´ /
小難しい話は抜きにして、何が便利なのか説明するよ!
そもそも Ansible ってなに?* 最近流行りの『構成管理ツール』の一つだよ。
* サーバーの構築を、コマンド入力するのではなくて、プログラミングのようにコードにして管理するツールだよ。
* " プレイブック " と呼ばれるコード集をホスト側から実行するだけで、クライアントのサーバーを構成してくれるよ。
"Infrustructure as a Code" という考え方* プログラミング開発で使われているツールや手法を用いて、インフラ開発も効率的にやっていこうぜ!という考え方。
* 本日紹介する、 Ansible,Git,Vagrant はこの概念を実現するためのツールにすぎない!
各ツールの機能と役割・ Ansible( インフラ構成をコードに落とし込む )・ Git( コードをバージョン管理する、みんなでシェアする )・ Vagrant (テスト環境をすぐに立てられる)
自動化すげー! Ansible すげー!ってよりは、いろいろな手法を組み合わせて、「効率化」するという点が一番のメリットだと思います。
Ansible の特徴* べき等性 - playbook は何度実行しても必ず定義された状態になる。(どこかでコマンドが落ちても、再実行時に他のコマンドが2重で実行されない)
* agent レス - ホストに Ansible が入っており、構築先に SSH できる状態であれば agent は不要。実行先を同時に複数選択することも可能
* インストールが簡単 - RedHat の標準リポジトリに入っているので、標準で yum からインストール可能
* OS を問わない - windows,mac,linux など複数の OSに対応している
Git って何?* ファイルを誰が、いつ、どこを変更したか、で管理するツールのことだよ
* ファイルを過去の状態に戻せたり、同時編集したり、それをマージしたり…自由自在にできる。
* ↓ こういうのよく見ませんか?hoge.txthoge.txr.20151002hoge.txr.20151002_2hoge.txt - コピー $hoge.txt.20151002… どれが最新?誰が編集してるの?
分散型バージョン管理各クライアントでリポジトリを持って、ローカルにクローンして、バージョン管理する。SSH か HTTPS でアクセスすることができれば、どこにでもクローン可能
参考:第 2 回 ハックガールズが教える, Git の基礎知識http://gihyo.jp/dev/serial/01/hackgirlsgit/0002
どんないいことがあるの?
Ansible のメリット
* 構築時の手順ミスを無くせる→ そもそも「作業」が発生しない
* 端末にログインせずにコマンドを実行することができる
* 一度に大量のコマンドを同時に実行できる→ セキュリティパッチの適用や、 agent の必要なソフトのインストールなどに効果を発揮
どんないいことがあるの?
Git のメリット
* サーバー構成(プレイブック)を使い回すことができる
* 同時編集でも問題なくマージ可能
* ファイルのデグレードが起きない
実演
なにをやったの?
① Vagrant を用いてローカル開発環境を用意し、
② GitHub で公開しているプレイブックをダウンロードして
③ それを Ansible で適用しました。
実践編
それじゃあ、やっと本題に入ります
プレイブックを書いてみる
* yml 形式のファイルを作成します* プレイブックは複数のモジュールで構成されています1 モジュール = 1 コマンド に相当します
Module Index— Ansible Documentationhttp://docs.ansible.com/ansible/modules_by_category.ht
ml
プレイブックの例--- - name: Install libselinux-pythonyum: name=libselinux-python state=present- name: Check status of selinuxshell: getenforce- name: Permissive selinuxselinux: policy=targeted state=permissive- name: reboot!command: shutdown -r now
* yml形式なので一番上は - (ハイフン) 3 つ* - name: はプレイブック実行時に表示される文字列。(進捗がわかるように)* モジュールは公式ページを参照* command: モジュールは Linux のコマンドをそのまま使える。ただしべき等性は失われるので最終手段とするる。
SSH周りの設定* ansible は SSH さえつながれば実行することができる。 公開鍵認証方式の利用を推奨している。[Ansible Host 側の設定 ]> ssh-keygen
で、鍵ペアを作成。初期状態だと、 ~/.ssh / 配下に id_rsa (秘密鍵)とid_rsa.pub( 公開鍵 ) が作成される。> ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] これで、 agent 側に鍵を渡すことができました!
hosts の設定
ansible では hosts というファイルをおいてサーバーをグループで管理することができます。例hosts[wordpress-server]xx.xx.xx.xx ansible_ssh_private_key_file=~/.ssh/id_rsa ansible_ssh_user=root
解説:鍵の場所を指定したりどのユーザーで ssh をつなぐかなどのオプション設定もここに追加することができます
playbook のテスト## playbook の実行の前に、 ansible 上で agent と接続が取れているかの pingを打ってみます。> ansible -m ping -i hosts XX.XX.XX.XX下のように帰って来れば OK です。192.168.33.12| success >> {"changed": false, "ping" : "pong”}
ansible の実行
接続が OK だったら、いよいよ実行!> ansible-playbook init.yml -i hosts
実践
要件- Vagrant でローカル開発環境を2つ用意するOS:CentOS6.7 Host名: ansible-host と ansible-agentIP アドレス : 同じセグメント上の 2 つのアドレスを指定
- SSH を設定するプレイブックを作る* 要件 1 : SSH のポートを 22 から 2222 に変える* 要件 2 : SSH から rootユーザーのログインができない* 要件 3 : SSH 用ユーザーを新規作成する* 要件 4 : SElinux を OFF にする* 要件 5 : 各種ファイアーウォールの設定
- GitLab に、作成した playbook をアップロードする