(c) 2020 @miamo_infra - 【Ansible⼊⾨】富⼭IT勉強会 -
JOPS CONFIDENTIAL 1 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- 【Ansible⼊⾨】富⼭IT勉強会 -
JOPS CONFIDENTIAL 2 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- アジェンダ -
・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・ベストプラクティス解説
JOPS CONFIDENTIAL 3 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- アジェンダ -
・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・ベストプラクティス解説
JOPS CONFIDENTIAL 4 Copyright 2016 JOPS
- ⾃⼰紹介-
Copyright 2018 JOPS
中⾝︓36歳、みずがめ座、AB型役割︓セールス、クラウド、セキュリティ、インフラ趣味︓楽しいこと好きなもの︓AWSAnsible経験︓ちょっとだけ
(c) 2020 @miamo_infra
JOPS CONFIDENTIAL 5 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- アジェンダ -
・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・miamoの使⽤例
JOPS CONFIDENTIAL 6 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansible概要 -
・Ansibleを使われたことがある︖
1.使ったことない。だから勉強会に参加した。2.対象触ったことがある。3.業務でがっつり使っている。
JOPS CONFIDENTIAL 7 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansible概要 -
・Ansibleを使われたことがある︖
1.使ったことない。だから勉強会に参加した。2.対象触ったことがある。3.業務でがっつり使っている。
JOPS CONFIDENTIAL 8 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansible概要 -
JOPS CONFIDENTIAL 9 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansible概要 -
・従来のやり⽅『システムの初期設定や運⽤中のメンテンナンスは⼿動で⾏う』
⼿順書
構成情報
サーバ
ネットワーク
クラウド⼿動での実作業
JOPS CONFIDENTIAL 10 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansible概要 -
Playbook
inventory
サーバ
ネットワーク
クラウド
・Ansibleでのやり⽅『インフラ構成管理を宣⾔的なコードで記述して処理を実⾏する』
Infrastructure as Code
コードを実⾏
JOPS CONFIDENTIAL 11 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansible概要 -
・Infrastructure as Codeの特徴
構成管理、⼿順書有識者、承認者レビュー検証環境でのテストスケジューリング継続的なメンテナンス
⇒⇒⇒⇒⇒
バージョン管理(Git)Pull Request(レビュー)TDI(テスト)CI(継続的なインテグレーション)CD(継続的なデプロイ)
⼿動での実作業
JOPS CONFIDENTIAL 12 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansible概要 -
・Infrastructure as Codeの種類
オーケストレーション(Orchestration)
コンフィグレーション(Configuration)
ブートストラッピング(Bootstrapping)
デプロイ、サーバ間連携Fabric, Capistrano, Serf, Consol
システムコンフィグレーションPuppet, Chef, Ansible, ltamae
クラウド、VM、コンテナ、OSインストールAWS、Docker, Terraform
JOPS CONFIDENTIAL 13 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansible概要 -
・Infrastructure as Codeの種類
オーケストレーション(Orchestration)
コンフィグレーション(Configuration)
ブートストラッピング(Bootstrapping)
デプロイ、サーバ間連携
OS/ミドルウェア設定
仮想マシン作成
OSインストール
Server♯1 Server#2 Server#3
JOPS CONFIDENTIAL 14 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansible概要 -
・Infrastructure as Codeの種類
オーケストレーション(Orchestration)
コンフィグレーション(Configuration)
ブートストラッピング(Bootstrapping)
デプロイ、サーバ間連携
OS/ミドルウェア設定
仮想マシン作成
OSインストール
Server♯1 Server#2 Server#3
JOPS CONFIDENTIAL 15 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansible概要 -
・コンフィグレーションの特徴
■コンフィグレーション〇 サーバへミドルウェアのインストールや各種設定〇 サーバ構成管理の⾃動化△ OSインストール、仮想マシンの作成△ アプリケーションのデプロイ
JOPS CONFIDENTIAL 16 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansible概要 -
・Ansibleの特徴
■エージェントレス- 対象へのAnsible⽤のエージェントなどインストール不要
■冪等性- 何度実⾏されても同じ状態に収束するようになっている。
■Simple- Yaml形式の設定ファイル(プログラミング不要で⾼可読性)- 学習コストが低い
JOPS CONFIDENTIAL 17 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- アジェンダ -
・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・ベストプラクティス
JOPS CONFIDENTIAL 18 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansibleインストール -
・利⽤者YoshidaさんmiamoオーニシさんdogagesダブリューさんらびっさんHummyさんfujitaさん
操作対象54.95.167.120
3.112.56.2413.231.241.1954.238.198.5513.231.120.1683.115.19.12113.231.166.4413.113.180.89
設定対象13.112.85.2554.64.28.1713.113.0.1554.250.198.1154.238.251.2243.115.19.24713.230.228.19952.196.41.126
・証明書https://ansible-it.s3-ap-northeast-1.amazonaws.com/ansible.pem
JOPS CONFIDENTIAL 19 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansibleインストール -
$ sudo yum install wget -y$ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm$ wget https://ansible-it.s3-ap-northeast-1.amazonaws.com/ansible.pem$ sudo rpm -ivh epel-release-latest-7.noarch.rpm$ sudo yum install ansible -y
・ssh接続$ wget https://ansible-it.s3-ap-northeast-1.amazonaws.com/ansible.pem
$ chmod 600 ansible.pem$ ssh centos@<IPアドレス> -i ansible.pem
・Ansibleインストール
JOPS CONFIDENTIAL 20 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansibleインストール -
・インストールされたことを確認$ ansible --versionansible 2.9.3
config file = /etc/ansible/ansible.cfg ←設定ファイルconfigured module search path = [uʻ/home/centos/.ansible/plugins/modules ,̓
uʻ/usr/share/ansible/plugins/modulesʻ] ←モジュールパスansible python module location = /usr/lib/python2.7/site-packages/ansible ←実⾏時に使⽤する
Pythonexecutable location = /usr/bin/ansible ←実⾏される場所python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat
4.8.5-36)]
JOPS CONFIDENTIAL 21 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- アジェンダ -
・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・ベストプラクティス
JOPS CONFIDENTIAL 22 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansibleコマンド -
・ローカルホストに対してsetupモジュールを実⾏
$ ansible -m setup localhost
- Setupモジュール(対象ホストの情報収集)⇒ playbookで⾃動的に呼び出される。⇒ 対象ホストの各種情報を変数に格納して再利⽤できる。⇒ ansible コマンドで事前に対象ホストの情報を確認することも可能
JOPS CONFIDENTIAL 23 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansibleコマンド -
・インベントリファイルを作ってリモートホストに対してsetupモジュールを実⾏$ echo “<設定対象IPアドレス>“ > hosts
$ ansible -m setup --private-key ansible.pem -u centos -i hosts <設定対象IPアドレス>
JOPS CONFIDENTIAL 24 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansibleコマンド -
・インベントリファイルについて52.192.60.107Example.com
[webservers]52.192.60.10852.192.60.109
[dbservers] 52.192.60.11052.192.60.111
[xxxservice:children] webserversdbservers
ホストSSHで接続可能なホストIPアドレスや名前解決可能なホスト名
グループ名複数のホストをグルーピングした名称 グループ単位でPlaybookを実⾏可能
“:children”を指定して、グループを束ねたグループを作成
JOPS CONFIDENTIAL 25 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Ansibleコマンド -
・Ansibleの最低構成→inventoryファイル(設定対象ホスト)- リモートホストのホストやグループを管理するファイル- ファイル名に規定なし
→playbookファイル(環境構成コード)- リモートホストの状態 (構成) を定義するyamlファイル- Inventoryで管理されたグループやホスト単位で作成
JOPS CONFIDENTIAL 26 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- アジェンダ -
・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・miamoの使⽤例
JOPS CONFIDENTIAL 27 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Playbook作成 -
・Ansibleの最低構成→inventoryファイル(設定対象ホスト)- リモートホストのホストやグループを管理するファイル- ファイル名に規定なし
→playbookファイル(環境構成コード)- リモートホストの状態 (構成) を定義するyamlファイル- Inventoryで管理されたグループやホスト単位で作成
JOPS CONFIDENTIAL 28 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Playbook作成 -
・Playbookについて- 対象ホストの構成を定義、モジュールを利⽤して上から順番に実⾏
---- hosts: 52.192.60.107
become: yestasks:
- name: install epel-releaseyum: name=epel-release state=present
- name: install nginxyum: name=nginx state=present
- name: nginx running and enabledservice: name=nginx state=started enabled=yes
対象ホスト(Inventoryのホスト or グループ)
Nginxのインストール
モジュール
sudoで実⾏
Nginxサービス起動、⾃動起動有効
モジュールの引数
リポジトリのインストール
JOPS CONFIDENTIAL 29 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Playbook作成 -$ ansible-playbook ansible.yml --private-key ansible.pem -u centos -i ansible_host
PLAY [52.192.60.107] *************************************************
TASK [Gathering Facts] ************************************************ok: [52.192.60.107]
TASK [install epel-release] **********************************************changed: [52.192.60.107]
TASK [install nginx] ***************************************************changed: [52.192.60.107]
TASK [nginx running and enabled] ***************************************changed: [52.192.60.107]
PLAY RECAP ********************************************************52.192.60.107 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
初回実⾏
JOPS CONFIDENTIAL 30 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Playbook作成 -$ ansible-playbook ansible.yml --private-key ansible.pem -u centos -i ansible_host
PLAY [52.192.60.107] *****************************************************
TASK [Gathering Facts] ****************************************************ok: [52.192.60.107]
TASK [install epel-release] *************************************************ok: [52.192.60.107]
TASK [install nginx] ******************************************************ok: [52.192.60.107]
TASK [nginx running and enabled] ******************************************ok: [52.192.60.107]
PLAY RECAP ***********************************************************52.192.60.107 : ok=4 changed=0 unreachable=0 failed=0 kipped=0 rescued=0 ignored=0
再実⾏
変更なし
JOPS CONFIDENTIAL 31 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Playbook作成 -$ ansible-playbook ansible.yml --private-key ansible.pem -u centos -i ansible_host
PLAY [52.192.60.107] *************************************************
TASK [Gathering Facts] ************************************************Ok: [52.192.60.107]
TASK [install epel-release] **********************************************Changed: [52.192.60.107]
TASK [install nginx] ***************************************************Changed: [52.192.60.107]
TASK [nginx running and enabled] ***************************************Changed: [52.192.60.107]
PLAY RECAP ********************************************************52.192.60.107 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ok ⇒ 定義された状態となっている。change ⇒ 定義された状態に変更が⾏われたunreachable ⇒ 対象ホストへの接続不可failed ⇒ タスク実⾏時の失敗skipped ⇒ 定義したタスクをスキップした。rescued ⇒ 定義したタスクが例外処理されたignored ⇒ タスクの失敗を無視(後続処理を続ける)
JOPS CONFIDENTIAL 32 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Playbook作成 -
・PlaybookのDry Run- 実際に設定する前に意図した変更となるか︖確認する
$ ansible-playbook ansible.yml --private-key ansible.pem -u centos -i ansible_host --check
JOPS CONFIDENTIAL 33 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Playbook作成 -
・Playbookのタスクで指定するモジュールについて- タスクはモジュールを指定して構成を定義する。- モジュールは基本的に冪等性を担保した実装が⾏われている。
【モジュールの分類】- Core https://github.com/ansible/ansible-modules-core
利⽤頻度の⾼いモジュール群- Extra https://github.com/ansible/ansible-modules-extras
利⽤頻度の中以下のモジュール群
※Ansible module index (core + extra)モジュール数︓900超
JOPS CONFIDENTIAL 34 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- Playbook作成 -
・利⽤可能なモジュールの確認⽅法
$ ansible-doc -l
$ ansible-doc yum
・利⽤可能なモジュールの確認⽅法
モジュール
JOPS CONFIDENTIAL 35 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- アジェンダ -
・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・miamoの使⽤例
JOPS CONFIDENTIAL 36 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra
- miamoの使⽤例-
・Macbookの初期セットアップ