SlideShare a Scribd company logo
1 of 34
Download to read offline
2015.09.10 (Thu)
Ansible 入門 #01 (初心者向け)
CyberZ 廣瀬 太郎
Ansible説明会
1. Ansibleとは
2. Ansibleの特徴
3. Ansibleの用語解説
※この資料は以下のようなAnsible初心者を対象としています
✤ Ansibleを触ってみたい、導入したいと考えている方
✤ サーバー構築とかやってる方
✤ サーバーデプロイを効率化したい方
✤ Chefは辛い方
✤ Ansibleって響きが気になる方
1. Ansibleとは
Ansibleとは
“Ansible is Simple IT Automation”
SIMPLE AGENTLESS POWERFUL
Automate in hours - not
weeks - with Ansible's
human-readable IT
automation language.
Ansible uses SSH instead
of agents. More efficient,
more secure and less to
manage.
App deployment,
configuration
management and
orchestration - all from
one system.
qt: http://www.ansible.com/home
なぜやるの?
1) 構成管理
✤ ドキュメントが古い
✤ 更新も面倒
✤ Snapshot, AMIが秘伝のタレ化
✤ 何が動いているのか分からない
✤ まっさらなOSから環境構築でき
ない
✤ このサーバは「どうあるべき」なの
か
なぜやるの?
2) 自動化
✤ 加速するビジネス
✤ 初動はできるだけ早く
✤ 付加価値増に集中したい
✤ 定常業務は低コストで
✤ アプリケーションデプロイ
✤ 脆弱性対応
世にあるツール
Fabric
Configuration Orchestration
世にあるツール
Fabric
Configuration Orchestration
世にあるツール
Fabric
Configuration Orchestration
2. Ansibleの特徴
Ansibleの特徴
“Ansible is Simple IT Automation”
SIMPLE AGENTLESS POWERFUL
Automate in hours - not
weeks - with Ansible's
human-readable IT
automation language.
Ansible uses SSH instead
of agents. More efficient,
more secure and less to
manage.
App deployment,
configuration
management and
orchestration - all from
one system.
qt: http://www.ansible.com/home
Ansibleの特徴
“Ansible is Simple IT Automation”
✤ 定義はYAML( 設定ファイル)
✤ プログラムですら無いため学習障壁が少ない
SIMPLE
Automate in hours - not
weeks - with Ansible's
human-readable IT
automation language.
---
- hosts: webservers
tasks:
- name: yum install nginx
yum: pkg=nginx state=installed
Ansibleの特徴
“Ansible is Simple IT Automation”
✤ agentインストール不要
✤ 運用管理サーバでansible*コマンドが使えればOK
✤ Pythonが入っていれば導入可能
✤ 専用のserverやagentの運用管理不要
✤ 常駐するプロセスはなし
AGENTLESS
Ansible uses SSH instead
of agents. More efficient,
more secure and less to
manage.
Ansibleの特徴
“Ansible is Simple IT Automation”
✤ 構成管理だけでなくOrchestrationとしても使えるので、
ちょっとした操作や調査の支援ツールにもなる
✤ 高機能だが、スモールスタートで始めることも可能
POWERFUL
App deployment,
configuration
management and
orchestration - all from
one system.
柔軟な実行方法
✤ 指定したタイミングで実行
✤ 複数並列実行
✤ 必要な処理だけをone-linerでadhocに実行
✤ Push型だけでなくPull型もサポート (ansible-pull)
Ansibleの特徴
“Ansible is Simple IT Automation”
冪等性
✤ 記載したDSLの定義の状態に収束してくれる
✤ ある操作を何回行っても結果は同じ
✤ 変更がなければ処理をスキップする
以下がインストールされていること
・nginx
・java
・zabbix_agentd
サービスが起動していること
・nginx
・zabbix_agentd
3. Ansibleの用語解説
主なコマンド
✤ ansible
✤ Adhocに実行する
✤ ansible-playbook
✤ 作成した定義 (playbook) を実行する
# コマンド実行例
$ ansible -m 'ping' webservers
ansible-test02 | success >> {
"changed": false,
"ping": "pong"
}
# dry-run
$ ansible-playbook hands-on00.yml --check --diff
…
PLAY RECAP ********************************************************************
ansible-test02 : ok=2 changed=0 unreachable=0 failed=0
# execute
$ ansible-playbook hands-on00.yml
…
PLAY RECAP ********************************************************************
ansible-test02 : ok=2 changed=0 unreachable=0 failed=0
Inventory Host
Ansibleで管理するホストをini形式で記載する
✤ ホストのグルーピングが可能
# 例: example.com サイトをAnsibleで管理する
mail.example.com
[webservers]
foo.example.com
bar.example.com
Playbook
実行する処理の内容をYAML形式で記載する
✤ 最初はplaybookとinventry hostさえあればOK
---
- hosts: webservers
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=templates/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running (and enable it at boot)
service: name=httpd state=started enabled=yes
handlers:
- name: restart apache
service: name=httpd state=restarted
Task (Tasks lists)
具体的な処理を、実行する順に配列で記載する
✤ 基本は name と module のセットを記載する
✤ 実行条件やトリガー (notify/handler) を加えることも可能
✤ 実行条件: [when, changed_when, ignore_errors, always_runなど]
✤ トリガー: handlers で記載した処理の名前をnotifyで指定
---
- hosts: webservers
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=templates/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running (and enable it at boot)
service: name=httpd state=started enabled=yes
handlers:
- name: restart apache
service: name=httpd state=restarted
Module
Tasksで指定した処理を実行する汎用ライブラリ
✤ Modules are “idempotent” (冪等性)
✤ Core Modulesだけでも必要な作業は大体カバーできる
---
- hosts: webservers
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=templates/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running (and enable it at boot)
service: name=httpd state=started enabled=yes
handlers:
- name: restart apache
service: name=httpd state=restarted
代表的なModule
✤ yum / apt : パッケージ管理 (インストール, 削除など)
✤ service : サービス操作 (起動, 停止, 再起動など)
✤ file : ファイル操作 (作成, 削除, 属性変更など)
✤ copy : ファイルをコピー
✤ template : ファイルを雛形としてファイル生成 (後述)
✤ shell : 任意のshellコマンドを実行(※冪等性は自分で担保)
✤ 具体的な操作の他、“register” を併用して条件分岐に利用する等の使い方もある
公式ドキュメントにModuleの一覧と説明があるので、詳しくは以下を参照ください。
http://docs.ansible.com/ansible/modules_by_category.html
共通化 (Include / Role)
✤ Include:
✤ tasksやhanderls等を別ファイルとして切り出し、一つのRole
としてまとめておくことで再利用しやすくする
---
- hosts: webservers
tasks:
- include: apache.yml
- include: deploy.yml site=service_A
- include: deploy.yml site=service_B
共通化 (Include / Role)
✤ Role:
✤ task, vars, files, templates, handlers一式を共通化
✤ playbookからは roles 一発で呼び出しできる
✤ 複数サーバに適用する、汎化させるなどの用途で活用
# playbook
---
- hosts: webservers
roles:
- common
- webserver
# ディレクトリ構成
hosts
webservers.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
webservers/
…
共通化 (Template / Variable)
✤ Template:
✤ 変数をbindして配布できる
✤ ホスト毎に異なるようなファイルを配布するときに活用
✤ 書式は “Jinja2”
# files/etc/motd.j2
##################################################
!!! Production server {{ ansible_hostname }} !!!
##################################################
__| __|_ )
_| ( / Amazon Linux AMI
___|___|___|
https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/
共通化 (Template / Variable)
✤ Variable:
✤ 条件分岐やTemplateで利用する変数を定義し呼出可能
✤ 書式はYAML
✤ playbook, inventry host, varsなど様々な箇所で指定可能
✤ OS層の下回りの情報はansibleが自動で取得し呼出可能 (Facts)
✤ 利用可能な変数は `ansible hostname -m setup` で確認可能
✤ Chefで言う ohai
# Variables
innodb_buffer_pool_size: 6144M
innodb_log_file_size: 2048M
max_connections: 1000
…
$ ansible ansible-test02 -m 'setup'
ansible-test02 | success >> {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"172.31.xx.xx"
],
"ansible_all_ipv6_addresses": [],
"ansible_architecture": "x86_64",
"ansible_bios_date": "NA",
"ansible_bios_version": "NA",
"ansible_cmdline": {
"KEYTABLE": "us",
"LANG": "ja-JP.UTF-8",
Hands On!
Installation
1. サーバログイン
1. サーバ (Ansible: 1, Target: 1) へのSSH接続
✤ 接続情報は個別にお渡しします
2. Ansible実行用の 作成と配布
1. Ansibleサーバ上で`ssh-keygen` で作成 (パスフレーズなし)
2. ec2-user@target:/home/ec2-user/.ssh/authorized_keys に 公開 (id_rsa.pub) をcopy
3. Ansibleサーバの /etc/hosts に Targetサーバを PrivateIP で記載 ( `sudo vim /etc/hosts` )
4. Ansible → Target へのssh接続確認
3. Ansibleインストール
1. `sudo pip install ansible`
2. `sudo mkdir /etc/ansible && sudo chown ec2-user:ec2-user /etc/ansible && cd /etc/
ansible`
3. `touch hosts`
4. `wget https://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfg `
Ansible手始め
1. Inventory Hostを記載
2. Ansibleコマンドを試し打ち
✤ `ansible TARGET -m 'ping'`
✤ `ansible TARGET -m 'setup'`
# /etc/ansible/hosts
[webservers]
ansible-target0x
4. ディレクトリ構成 (Best Practice)
BestPractice
Best Practices Directory
Layout - Ansible
Documentation
production # Inventory Hostはグループごとに作成
staging # 〃
group_vars/ # グループ用の変数の格納場所
group1 #
group2 #
host_vars/ # ホスト用の変数の格納場所
hostname1 #
hostname2 #
library/ # 自作Moduleの格納場所 (optional)
filter_plugins/ # 自作Filter Pluginの格納場所 (optional)
site.yml # master Playbook
webservers.yml # Playbook
dbservers.yml # Playbook
roles/ # ロール (Role) の格納場所
common/ # “common” ロール
tasks/ # Taskの格納場所
main.yml # <-- Taskがもし多くなる場合は小さく分ける
handlers/ # Handlerの格納場所
main.yml # <-- 〃
templates/ # Templateの格納場所
ntp.conf.j2 # <------- Templateファイル名は *.j2
files/ # Fileの格納場所
bar.txt #
foo.sh #
vars/ # Varsの格納場所
main.yml #
defaults/ #
main.yml # Varsのデフォ値 (group/host_varsで上書き可)
meta/ # ロールの依存関係があれば定義
Hands On1(20min)
1. 運用ツールをインストール
✤ telnet, wget, rsync, tree, tcpdump,
sysstat, dstat, vim-enhanced, git, htop
2. バナーを配置
✤ /etc/motd
3. Nginx install
✤ yum install
✤ 自動起動有効
4. Deploy
✤ page upload (適当なhtml)
Hands On2(10min)
OpenSSLの脆弱性が報告され
た!利用中の全サーバの
OpenSSLのバージョンを確認し
よう。
✤ ansibleコマンド一発で確認す
ること
Hands On3(30min)
1. Swapfileを作成
✤ 512MBのswapfileを作成
✤ swaponでスワップ追加
✤ boot時に自動マウント
✤ ※冪等性は担保すること
2. 運用ツールを追加
✤ htop, glances, tmux
✤ ag (the-silver-searcher)
3. Deploy (from github)
✤ yteraoka/ansible-tutorial
✤ /var/www/ 以下にdeploy
✤ Nginx設定ファイル編集→restart

More Related Content

What's hot

[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
Insight Technology, Inc.
 

What's hot (20)

PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
 
OpenStack入門 2016/06/27
OpenStack入門 2016/06/27OpenStack入門 2016/06/27
OpenStack入門 2016/06/27
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
Rootlessコンテナ
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
Kafka・Storm・ZooKeeperの認証と認可について #kafkajpKafka・Storm・ZooKeeperの認証と認可について #kafkajp
Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
 
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
 
Amazon EKS への道 ~ EKS 再入門 ~
Amazon EKS への道 ~ EKS 再入門 ~Amazon EKS への道 ~ EKS 再入門 ~
Amazon EKS への道 ~ EKS 再入門 ~
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
 
Ansibleはじめよぉ -Infrastructure as Codeを理解-
Ansibleはじめよぉ -Infrastructure as Codeを理解-Ansibleはじめよぉ -Infrastructure as Codeを理解-
Ansibleはじめよぉ -Infrastructure as Codeを理解-
 
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較
 
コンテナ導入概要資料2018
コンテナ導入概要資料2018コンテナ導入概要資料2018
コンテナ導入概要資料2018
 
コンテナイメージの脆弱性スキャンについて
コンテナイメージの脆弱性スキャンについてコンテナイメージの脆弱性スキャンについて
コンテナイメージの脆弱性スキャンについて
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門
 
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 

Viewers also liked

サーバーの動くメモをAnsibleでとろう
サーバーの動くメモをAnsibleでとろうサーバーの動くメモをAnsibleでとろう
サーバーの動くメモをAnsibleでとろう
Takayuki Hayashi
 

Viewers also liked (20)

Ansible Playbookの短時間デバッグ方法
Ansible Playbookの短時間デバッグ方法Ansible Playbookの短時間デバッグ方法
Ansible Playbookの短時間デバッグ方法
 
AnsibleによるHWプロビジョニング -OneViewの連携-
AnsibleによるHWプロビジョニング  -OneViewの連携-AnsibleによるHWプロビジョニング  -OneViewの連携-
AnsibleによるHWプロビジョニング -OneViewの連携-
 
Ansibleで味わうHelion OpenStack
Ansibleで味わうHelion OpenStackAnsibleで味わうHelion OpenStack
Ansibleで味わうHelion OpenStack
 
What is an Ansible?
What is an Ansible?What is an Ansible?
What is an Ansible?
 
Ansible はじめてみました
Ansible はじめてみましたAnsible はじめてみました
Ansible はじめてみました
 
2012/11/14 softlab_study 発表資料「SSDの基礎」
2012/11/14 softlab_study 発表資料「SSDの基礎」2012/11/14 softlab_study 発表資料「SSDの基礎」
2012/11/14 softlab_study 発表資料「SSDの基礎」
 
2人でOpenStackを開発環境に導入した話
2人でOpenStackを開発環境に導入した話2人でOpenStackを開発環境に導入した話
2人でOpenStackを開発環境に導入した話
 
NVMe でハァハァしようよ #sapporocpp
NVMe でハァハァしようよ #sapporocpp NVMe でハァハァしようよ #sapporocpp
NVMe でハァハァしようよ #sapporocpp
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門
 
Ansibleを使ってサーバ100台にBaculaクライアントを簡単インストール
Ansibleを使ってサーバ100台にBaculaクライアントを簡単インストールAnsibleを使ってサーバ100台にBaculaクライアントを簡単インストール
Ansibleを使ってサーバ100台にBaculaクライアントを簡単インストール
 
Ansibleの現在とこれから
Ansibleの現在とこれからAnsibleの現在とこれから
Ansibleの現在とこれから
 
Ansible+Docker
Ansible+DockerAnsible+Docker
Ansible+Docker
 
サーバーの動くメモをAnsibleでとろう
サーバーの動くメモをAnsibleでとろうサーバーの動くメモをAnsibleでとろう
サーバーの動くメモをAnsibleでとろう
 
Desktop App Converter で Microsoft ストアデビュー & 野良野良ライフ満喫!!
Desktop App Converter で Microsoft ストアデビュー & 野良野良ライフ満喫!!Desktop App Converter で Microsoft ストアデビュー & 野良野良ライフ満喫!!
Desktop App Converter で Microsoft ストアデビュー & 野良野良ライフ満喫!!
 
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
 
わかる!一眼
わかる!一眼わかる!一眼
わかる!一眼
 
C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。
C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。
C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。
 
Favorite English YouTube Channels
Favorite English YouTube ChannelsFavorite English YouTube Channels
Favorite English YouTube Channels
 
AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策
AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策
AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策
 
Ansibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするAnsibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングする
 

Similar to Ansible 入門 #01 (初心者向け)

Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
Masahiro Nagano
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
Naotaka Jay HOTTA
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
Daisuke Ikeda
 
Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズ
SORACOM, INC
 

Similar to Ansible 入門 #01 (初心者向け) (20)

ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
Okinawa Open Days 2015 Handson - Ansible
Okinawa Open Days 2015 Handson - AnsibleOkinawa Open Days 2015 Handson - Ansible
Okinawa Open Days 2015 Handson - Ansible
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
 
Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)
 
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationOpenstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verification
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターン
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化
 
Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズ
 
OpenStack Grizzly構築手順書
OpenStack Grizzly構築手順書OpenStack Grizzly構築手順書
OpenStack Grizzly構築手順書
 
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
 
Mysql casial01
Mysql casial01Mysql casial01
Mysql casial01
 
AWS ESC + Ansibleで お手軽 Blue-Green Deployment
AWS ESC + Ansibleで お手軽 Blue-Green DeploymentAWS ESC + Ansibleで お手軽 Blue-Green Deployment
AWS ESC + Ansibleで お手軽 Blue-Green Deployment
 
Ansible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれからAnsible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれから
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理
 

Recently uploaded

Recently uploaded (11)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

Ansible 入門 #01 (初心者向け)

  • 1. 2015.09.10 (Thu) Ansible 入門 #01 (初心者向け) CyberZ 廣瀬 太郎
  • 2. Ansible説明会 1. Ansibleとは 2. Ansibleの特徴 3. Ansibleの用語解説 ※この資料は以下のようなAnsible初心者を対象としています ✤ Ansibleを触ってみたい、導入したいと考えている方 ✤ サーバー構築とかやってる方 ✤ サーバーデプロイを効率化したい方 ✤ Chefは辛い方 ✤ Ansibleって響きが気になる方
  • 4. Ansibleとは “Ansible is Simple IT Automation” SIMPLE AGENTLESS POWERFUL Automate in hours - not weeks - with Ansible's human-readable IT automation language. Ansible uses SSH instead of agents. More efficient, more secure and less to manage. App deployment, configuration management and orchestration - all from one system. qt: http://www.ansible.com/home
  • 5. なぜやるの? 1) 構成管理 ✤ ドキュメントが古い ✤ 更新も面倒 ✤ Snapshot, AMIが秘伝のタレ化 ✤ 何が動いているのか分からない ✤ まっさらなOSから環境構築でき ない ✤ このサーバは「どうあるべき」なの か
  • 6. なぜやるの? 2) 自動化 ✤ 加速するビジネス ✤ 初動はできるだけ早く ✤ 付加価値増に集中したい ✤ 定常業務は低コストで ✤ アプリケーションデプロイ ✤ 脆弱性対応
  • 11. Ansibleの特徴 “Ansible is Simple IT Automation” SIMPLE AGENTLESS POWERFUL Automate in hours - not weeks - with Ansible's human-readable IT automation language. Ansible uses SSH instead of agents. More efficient, more secure and less to manage. App deployment, configuration management and orchestration - all from one system. qt: http://www.ansible.com/home
  • 12. Ansibleの特徴 “Ansible is Simple IT Automation” ✤ 定義はYAML( 設定ファイル) ✤ プログラムですら無いため学習障壁が少ない SIMPLE Automate in hours - not weeks - with Ansible's human-readable IT automation language. --- - hosts: webservers tasks: - name: yum install nginx yum: pkg=nginx state=installed
  • 13. Ansibleの特徴 “Ansible is Simple IT Automation” ✤ agentインストール不要 ✤ 運用管理サーバでansible*コマンドが使えればOK ✤ Pythonが入っていれば導入可能 ✤ 専用のserverやagentの運用管理不要 ✤ 常駐するプロセスはなし AGENTLESS Ansible uses SSH instead of agents. More efficient, more secure and less to manage.
  • 14. Ansibleの特徴 “Ansible is Simple IT Automation” ✤ 構成管理だけでなくOrchestrationとしても使えるので、 ちょっとした操作や調査の支援ツールにもなる ✤ 高機能だが、スモールスタートで始めることも可能 POWERFUL App deployment, configuration management and orchestration - all from one system. 柔軟な実行方法 ✤ 指定したタイミングで実行 ✤ 複数並列実行 ✤ 必要な処理だけをone-linerでadhocに実行 ✤ Push型だけでなくPull型もサポート (ansible-pull)
  • 15. Ansibleの特徴 “Ansible is Simple IT Automation” 冪等性 ✤ 記載したDSLの定義の状態に収束してくれる ✤ ある操作を何回行っても結果は同じ ✤ 変更がなければ処理をスキップする 以下がインストールされていること ・nginx ・java ・zabbix_agentd サービスが起動していること ・nginx ・zabbix_agentd
  • 17. 主なコマンド ✤ ansible ✤ Adhocに実行する ✤ ansible-playbook ✤ 作成した定義 (playbook) を実行する # コマンド実行例 $ ansible -m 'ping' webservers ansible-test02 | success >> { "changed": false, "ping": "pong" } # dry-run $ ansible-playbook hands-on00.yml --check --diff … PLAY RECAP ******************************************************************** ansible-test02 : ok=2 changed=0 unreachable=0 failed=0 # execute $ ansible-playbook hands-on00.yml … PLAY RECAP ******************************************************************** ansible-test02 : ok=2 changed=0 unreachable=0 failed=0
  • 18. Inventory Host Ansibleで管理するホストをini形式で記載する ✤ ホストのグルーピングが可能 # 例: example.com サイトをAnsibleで管理する mail.example.com [webservers] foo.example.com bar.example.com
  • 19. Playbook 実行する処理の内容をYAML形式で記載する ✤ 最初はplaybookとinventry hostさえあればOK --- - hosts: webservers tasks: - name: ensure apache is at the latest version yum: pkg=httpd state=latest - name: write the apache config file template: src=templates/httpd.j2 dest=/etc/httpd.conf notify: - restart apache - name: ensure apache is running (and enable it at boot) service: name=httpd state=started enabled=yes handlers: - name: restart apache service: name=httpd state=restarted
  • 20. Task (Tasks lists) 具体的な処理を、実行する順に配列で記載する ✤ 基本は name と module のセットを記載する ✤ 実行条件やトリガー (notify/handler) を加えることも可能 ✤ 実行条件: [when, changed_when, ignore_errors, always_runなど] ✤ トリガー: handlers で記載した処理の名前をnotifyで指定 --- - hosts: webservers tasks: - name: ensure apache is at the latest version yum: pkg=httpd state=latest - name: write the apache config file template: src=templates/httpd.j2 dest=/etc/httpd.conf notify: - restart apache - name: ensure apache is running (and enable it at boot) service: name=httpd state=started enabled=yes handlers: - name: restart apache service: name=httpd state=restarted
  • 21. Module Tasksで指定した処理を実行する汎用ライブラリ ✤ Modules are “idempotent” (冪等性) ✤ Core Modulesだけでも必要な作業は大体カバーできる --- - hosts: webservers tasks: - name: ensure apache is at the latest version yum: pkg=httpd state=latest - name: write the apache config file template: src=templates/httpd.j2 dest=/etc/httpd.conf notify: - restart apache - name: ensure apache is running (and enable it at boot) service: name=httpd state=started enabled=yes handlers: - name: restart apache service: name=httpd state=restarted
  • 22. 代表的なModule ✤ yum / apt : パッケージ管理 (インストール, 削除など) ✤ service : サービス操作 (起動, 停止, 再起動など) ✤ file : ファイル操作 (作成, 削除, 属性変更など) ✤ copy : ファイルをコピー ✤ template : ファイルを雛形としてファイル生成 (後述) ✤ shell : 任意のshellコマンドを実行(※冪等性は自分で担保) ✤ 具体的な操作の他、“register” を併用して条件分岐に利用する等の使い方もある 公式ドキュメントにModuleの一覧と説明があるので、詳しくは以下を参照ください。 http://docs.ansible.com/ansible/modules_by_category.html
  • 23. 共通化 (Include / Role) ✤ Include: ✤ tasksやhanderls等を別ファイルとして切り出し、一つのRole としてまとめておくことで再利用しやすくする --- - hosts: webservers tasks: - include: apache.yml - include: deploy.yml site=service_A - include: deploy.yml site=service_B
  • 24. 共通化 (Include / Role) ✤ Role: ✤ task, vars, files, templates, handlers一式を共通化 ✤ playbookからは roles 一発で呼び出しできる ✤ 複数サーバに適用する、汎化させるなどの用途で活用 # playbook --- - hosts: webservers roles: - common - webserver # ディレクトリ構成 hosts webservers.yml roles/ common/ files/ templates/ tasks/ handlers/ vars/ defaults/ meta/ webservers/ …
  • 25. 共通化 (Template / Variable) ✤ Template: ✤ 変数をbindして配布できる ✤ ホスト毎に異なるようなファイルを配布するときに活用 ✤ 書式は “Jinja2” # files/etc/motd.j2 ################################################## !!! Production server {{ ansible_hostname }} !!! ################################################## __| __|_ ) _| ( / Amazon Linux AMI ___|___|___| https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/
  • 26. 共通化 (Template / Variable) ✤ Variable: ✤ 条件分岐やTemplateで利用する変数を定義し呼出可能 ✤ 書式はYAML ✤ playbook, inventry host, varsなど様々な箇所で指定可能 ✤ OS層の下回りの情報はansibleが自動で取得し呼出可能 (Facts) ✤ 利用可能な変数は `ansible hostname -m setup` で確認可能 ✤ Chefで言う ohai # Variables innodb_buffer_pool_size: 6144M innodb_log_file_size: 2048M max_connections: 1000 … $ ansible ansible-test02 -m 'setup' ansible-test02 | success >> { "ansible_facts": { "ansible_all_ipv4_addresses": [ "172.31.xx.xx" ], "ansible_all_ipv6_addresses": [], "ansible_architecture": "x86_64", "ansible_bios_date": "NA", "ansible_bios_version": "NA", "ansible_cmdline": { "KEYTABLE": "us", "LANG": "ja-JP.UTF-8",
  • 28. Installation 1. サーバログイン 1. サーバ (Ansible: 1, Target: 1) へのSSH接続 ✤ 接続情報は個別にお渡しします 2. Ansible実行用の 作成と配布 1. Ansibleサーバ上で`ssh-keygen` で作成 (パスフレーズなし) 2. ec2-user@target:/home/ec2-user/.ssh/authorized_keys に 公開 (id_rsa.pub) をcopy 3. Ansibleサーバの /etc/hosts に Targetサーバを PrivateIP で記載 ( `sudo vim /etc/hosts` ) 4. Ansible → Target へのssh接続確認 3. Ansibleインストール 1. `sudo pip install ansible` 2. `sudo mkdir /etc/ansible && sudo chown ec2-user:ec2-user /etc/ansible && cd /etc/ ansible` 3. `touch hosts` 4. `wget https://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfg `
  • 29. Ansible手始め 1. Inventory Hostを記載 2. Ansibleコマンドを試し打ち ✤ `ansible TARGET -m 'ping'` ✤ `ansible TARGET -m 'setup'` # /etc/ansible/hosts [webservers] ansible-target0x
  • 31. BestPractice Best Practices Directory Layout - Ansible Documentation production # Inventory Hostはグループごとに作成 staging # 〃 group_vars/ # グループ用の変数の格納場所 group1 # group2 # host_vars/ # ホスト用の変数の格納場所 hostname1 # hostname2 # library/ # 自作Moduleの格納場所 (optional) filter_plugins/ # 自作Filter Pluginの格納場所 (optional) site.yml # master Playbook webservers.yml # Playbook dbservers.yml # Playbook roles/ # ロール (Role) の格納場所 common/ # “common” ロール tasks/ # Taskの格納場所 main.yml # <-- Taskがもし多くなる場合は小さく分ける handlers/ # Handlerの格納場所 main.yml # <-- 〃 templates/ # Templateの格納場所 ntp.conf.j2 # <------- Templateファイル名は *.j2 files/ # Fileの格納場所 bar.txt # foo.sh # vars/ # Varsの格納場所 main.yml # defaults/ # main.yml # Varsのデフォ値 (group/host_varsで上書き可) meta/ # ロールの依存関係があれば定義
  • 32. Hands On1(20min) 1. 運用ツールをインストール ✤ telnet, wget, rsync, tree, tcpdump, sysstat, dstat, vim-enhanced, git, htop 2. バナーを配置 ✤ /etc/motd 3. Nginx install ✤ yum install ✤ 自動起動有効 4. Deploy ✤ page upload (適当なhtml)
  • 34. Hands On3(30min) 1. Swapfileを作成 ✤ 512MBのswapfileを作成 ✤ swaponでスワップ追加 ✤ boot時に自動マウント ✤ ※冪等性は担保すること 2. 運用ツールを追加 ✤ htop, glances, tmux ✤ ag (the-silver-searcher) 3. Deploy (from github) ✤ yteraoka/ansible-tutorial ✤ /var/www/ 以下にdeploy ✤ Nginx設定ファイル編集→restart