Ansible⼊⾨】富⼭IT勉強会- ·...

36
(c) 2020 @miamo_infra - 【Ansible⼊⾨】富⼭IT勉強会 -

Transcript of Ansible⼊⾨】富⼭IT勉強会- ·...

Page 1: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 1 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- 【Ansible⼊⾨】富⼭IT勉強会 -

Page 2: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 2 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- アジェンダ -

・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・ベストプラクティス解説

Page 3: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 3 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- アジェンダ -

・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・ベストプラクティス解説

Page 4: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 4 Copyright 2016 JOPS

- ⾃⼰紹介-

Copyright 2018 JOPS

中⾝︓36歳、みずがめ座、AB型役割︓セールス、クラウド、セキュリティ、インフラ趣味︓楽しいこと好きなもの︓AWSAnsible経験︓ちょっとだけ

(c) 2020 @miamo_infra

Page 5: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 5 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- アジェンダ -

・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・miamoの使⽤例

Page 6: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 6 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- Ansible概要 -

・Ansibleを使われたことがある︖

1.使ったことない。だから勉強会に参加した。2.対象触ったことがある。3.業務でがっつり使っている。

Page 7: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 7 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- Ansible概要 -

・Ansibleを使われたことがある︖

1.使ったことない。だから勉強会に参加した。2.対象触ったことがある。3.業務でがっつり使っている。

Page 8: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 8 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- Ansible概要 -

Page 9: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 9 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- Ansible概要 -

・従来のやり⽅『システムの初期設定や運⽤中のメンテンナンスは⼿動で⾏う』

⼿順書

構成情報

サーバ

ネットワーク

クラウド⼿動での実作業

Page 10: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 10 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- Ansible概要 -

Playbook

inventory

サーバ

ネットワーク

クラウド

・Ansibleでのやり⽅『インフラ構成管理を宣⾔的なコードで記述して処理を実⾏する』

Infrastructure as Code

コードを実⾏

Page 11: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 11 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- Ansible概要 -

・Infrastructure as Codeの特徴

構成管理、⼿順書有識者、承認者レビュー検証環境でのテストスケジューリング継続的なメンテナンス

⇒⇒⇒⇒⇒

バージョン管理(Git)Pull Request(レビュー)TDI(テスト)CI(継続的なインテグレーション)CD(継続的なデプロイ)

⼿動での実作業

Page 12: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

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

Page 13: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

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

Page 14: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

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

Page 15: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 15 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- Ansible概要 -

・コンフィグレーションの特徴

■コンフィグレーション〇 サーバへミドルウェアのインストールや各種設定〇 サーバ構成管理の⾃動化△ OSインストール、仮想マシンの作成△ アプリケーションのデプロイ

Page 16: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 16 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- Ansible概要 -

・Ansibleの特徴

■エージェントレス- 対象へのAnsible⽤のエージェントなどインストール不要

■冪等性- 何度実⾏されても同じ状態に収束するようになっている。

■Simple- Yaml形式の設定ファイル(プログラミング不要で⾼可読性)- 学習コストが低い

Page 17: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 17 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- アジェンダ -

・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・ベストプラクティス

Page 18: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →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

Page 19: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

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インストール

Page 20: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

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)]

Page 21: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 21 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- アジェンダ -

・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・ベストプラクティス

Page 22: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 22 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- Ansibleコマンド -

・ローカルホストに対してsetupモジュールを実⾏

$ ansible -m setup localhost

- Setupモジュール(対象ホストの情報収集)⇒ playbookで⾃動的に呼び出される。⇒ 対象ホストの各種情報を変数に格納して再利⽤できる。⇒ ansible コマンドで事前に対象ホストの情報を確認することも可能

Page 23: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

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アドレス>

Page 24: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

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”を指定して、グループを束ねたグループを作成

Page 25: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 25 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- Ansibleコマンド -

・Ansibleの最低構成→inventoryファイル(設定対象ホスト)- リモートホストのホストやグループを管理するファイル- ファイル名に規定なし

→playbookファイル(環境構成コード)- リモートホストの状態 (構成) を定義するyamlファイル- Inventoryで管理されたグループやホスト単位で作成

Page 26: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 26 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- アジェンダ -

・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・miamoの使⽤例

Page 27: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 27 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- Playbook作成 -

・Ansibleの最低構成→inventoryファイル(設定対象ホスト)- リモートホストのホストやグループを管理するファイル- ファイル名に規定なし

→playbookファイル(環境構成コード)- リモートホストの状態 (構成) を定義するyamlファイル- Inventoryで管理されたグループやホスト単位で作成

Page 28: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

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サービス起動、⾃動起動有効

モジュールの引数

リポジトリのインストール

Page 29: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

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

初回実⾏

Page 30: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

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

再実⾏

変更なし

Page 31: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

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 ⇒ タスクの失敗を無視(後続処理を続ける)

Page 32: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

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

Page 33: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

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超

Page 34: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 34 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- Playbook作成 -

・利⽤可能なモジュールの確認⽅法

$ ansible-doc -l

$ ansible-doc yum

・利⽤可能なモジュールの確認⽅法

モジュール

Page 35: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 35 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- アジェンダ -

・⾃⼰紹介・Ansible概要・Ansibleインストール・Ansibleコマンド実⾏・Playbook作成・miamoの使⽤例

Page 36: Ansible⼊⾨】富⼭IT勉強会- · -リモートホストのホストやグループを管理するファイル-ファイル名に規定なし →playbookファイル(環境構成コード)-リモートホストの状態(構成)

JOPS CONFIDENTIAL 36 Copyright 2016 JOPSCopyright 2018 JOPS(c) 2020 @miamo_infra

- miamoの使⽤例-

・Macbookの初期セットアップ