
Anisibleによるシステム構築、このコースの内容について紹介します。
Ansibleは、サーバーなどのインフラの構築・管理を、コード化するためのツールです。
このコースで身につくこと
これらを実践形式で学んで行きます。
最新のAnsibleでは、クラウドの構成管理を行う、Cloud Modulesが追加されました。
本コースでは、AWS(Amazon Web Services)を対象としたCloud Modulesを使ったクラウド構成管理の方法を紹介しています。
このセクションでは、Ansibleのコードを開発するための開発環境を準備する方法について説明しています。
本コースで利用する開発環境は、主に以下の3つで構成されています。
Ansibleの実行サーバー(プロビジョニングサーバー)と、Ansibleを実行されるサーバー(サンドボックスサーバー)は、Vagrantfileを配布しますので、開発環境の構築も自動で行えます。
Windows、macOSに両対応したツールで開発環境を準備しましたので、どちらのOSを利用の方でも、ほぼ同じ環境で、Ansibleの学習を進めて頂けます。
※このセクションで利用しているファイルはここからダウンロードしてください。
Vagrantの基本的な使い方を説明しています。
開発環境として利用しているツールのURLになります。
ご利用のOSに合わせたものをダウンロードしてインストールしてください。
・VirtualBox
http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp
・Vagrant
https://www.vagrantup.com/
・Visual Studio Code
https://code.visualstudio.com/
開発環境として利用しているツールのURLになります。
ご利用のOSに合わせたものをダウンロードしてインストールしてください。
・VirtualBox
http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp
・Vagrant
https://www.vagrantup.com/
・Visual Studio Code
https://code.visualstudio.com/
Ansibleを実行するprovisioningサーバーと、Ansibleが実行されるsandboxサーバーの役割について説明をしています。
※vagrant upで以下のようなvboxsfのエラーが出る場合
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available.
VirtualBox(拡張パック含む)とVagrantのバージョンが最新でない場合は、バージョンアップをしてください。
解決しない場合は、以下、ご確認ください。
Ansibleを実行するprovisioningサーバーの起動方法を説明しています。
「このセクションでできること」のレクチャーよりダウンロードいただいたVagrantfileのあるディレクトで、vagrant upとしていただくだけで、Ansibleに必要なものを自動的にセットアップしてくれます。
Ansibleを実行するsandboxサーバーの起動方法を説明しています。
「このセクションでできること」のレクチャーよりダウンロードいただいたVagrantfileのあるディレクトで、vagrant upとしていただくだけで、provisioningサーバーとのssh接続に必要な設定を自動的にセットアップしてくれます。
vagrantの利用に関するトラブルシュートをまとめました。
このセクションで利用しているファイルはここからダウンロードしてください。
このセクションでは、Ansibleのはじめの一歩、最小構成のPlaybookを実行するところまでを学習します。
ansible-playbookコマンドでPlaybookを実行してみましょう。
templateモジュールを使って設定ファイルを配布する方法を学習しましょう。
Ansibleのhandlerを使って、設定ファイルが更新されたときだけ、サービス再起動する方法を学習しましょう。
group_varsを使って設定ファイルのテンプレートに変数を入力する方法を学習しましょう。
inventoryファイルとgroupの関係を理解して、大量ホストの管理に備えましょう。
このセクションで利用しているファイルはここからダウンロードしてください。
「簡単なPlaybookを実行する」セクションで作ったPlaybookを、Roleにします。
Ansible Roleは、使いやすく役割毎にTaskをまとめたものです。
「簡単なPlaybookを実行する」セクションで作ったPlaybookから、httpd(Webサーバー)をインストールするRoleを作成します。
TaskをRoleにすることで、Playbookもすっきり読みやすくなります。
このセクションでは、Ansibleの代表的なモジュールを、使ってLinuxサーバーの基本セットアップの流れを学んで行きます。
また、基本セットアップを学んで行く流れの中で、Ansibleの代表的なコード書式も学んでいただける内容となっています。
※このセクションで利用しているファイルはここからダウンロードしてください。
Playbookを記述するためのyamlフォーマットの書き方についておさらいします。
サーバーにhostnameを設定する方法を学習します。
マジック変数 inventory_hostnameを使って、inventoryファイルに書かれたホスト名をそのままホストに設定します。
Linuxサーバーにグループを追加する方法を説明します。
with_items書式を使ったtaskのループ実行を学びます。
配列化した変数を使った複数のグループを表現する方法を学びます。
all.ymlで共通利用可能な変数の利用方法を学びます。
Linuxサーバーにグループを追加する方法を説明します。
パスワードハッシュの生成・管理方法を説明します。
authorized_keyモジュールを使った公開鍵ファイルの配布方法を学びます。
グループやユーザーに権限付与するsudoersの運用方法を学びます。
サブフォルダ形式のRoleで複数のRoleを1つのフォルダにまとめる方法を学びます。
AnsibleのValidation機能を使って、誤った書式のsudersファイルを配布しようとした場合は、Ansibleのエラーで事前にシステム事故を防止する方法を学びます。
yumモジュールとyum_repositoryモジュールを使って、Linuxサーバーにパッケージをインストールする方法を学びます。
dependencies書式で、タスクやロールの依存関係を表現する方法を学びます。
serviceモジュールを使ってインストールしたパッケージのサービスとしての振る舞いの設定方法を学びます。
cronモジュールを使ってサーバーの定例処理を設定する方法を学びます。
commandモジュール、shellモジュールを使って、対象サーバーで、コマンドを実行する方法について、説明をします。
AWSサーバーを対象にPlaybookとRoleを最適化して行きます。
ローカルのSandboxサーバーを、Amazon Linux 2のboxイメージに変更します。
Sandboxサーバーで、問題がないことを確認して上で、AWSクラウド上のEC2サーバーにAnsible Playbookを実行する流れを学習します。
※このセクションで利用しているファイルはここからダウンロードしてください。
Sandboxサーバーのboxイメージを、Amazon Linux 2に変更します。
ここまで作ってきたPlaybook、Roleをローカル環境のSandboxサーバーを使って、適用可能か?テストを行います。
AWSマネージメントコンソールを使って、EC2サーバーを準備する手順を確認します。
ローカルのSandboxサーバーで検証したPlaybookとRoleをクラウド上のEC2サーバーに適用します。
ここまでは、1台のサーバーを対象にAnsibleを適用してきましたが、よりシステムらしく複数台のサーバーに適用する前提で、学習を進めて行きます。
学習の事例として、一般的なWebシステムであるLAMP(Apache、PHP、MySQL)を例に学習を進めて行きます。
※このセクションで利用しているファイルはここからダウンロードしてください。
※ansible galaxyでインストールするファイルは、ダウンロードファイルに含まれていません。ご自身で、installしてください。
【重要】
コース中で紹介している「geerlingguy.mysql」ロールですが、サイトの掲載内容どおり設定すると途中でセットアップが停止していまう場合があるようです。
https://galaxy.ansible.com/geerlingguy/mysql
pre_taskで設定している
mysql_log_error: /var/log/mysqld.err
↓
mysql_log_error: /var/lib/mysql/mysqld.err
としてあげることで、動作するようになります。
------
Ansibleのコミュニティから、実績のあるRoleを取り寄せる仕組み、「Ansible Galaxy」を使って、MySQLをインストールする方法を学習して行きます。
Ansible Galaxyのサイト
https://galaxy.ansible.com/home
(本コースリリース直前にデザインが大幅に変更されてしまいました。ビデオの内容と読み替えてご確認ください。)
「Ansible Galaxy」を使えば、自分で、Roleを書く必要が減ります。
また、実績のあるRoleを読むことで、より深くAnsibleを理解することができます。
Ansible Galaxyで取り寄せたMySQLのロールには、インストールだけではなく、論理データベースの管理や、ユーザー管理、パスワード管理などの機能が含まれていました。
GalaxyのWebサイトを見ながら、ロールを活用する方法を学びます。
Ansible Galaxyのサイト
https://galaxy.ansible.com/home
(本コースリリース直前にデザインが大幅に変更されてしまいました。ビデオの内容と読み替えてご確認ください。)
WebサーバーにPHPをインストールして行きます。
when書式によるtaskの分岐(skip)処理を学習します。
block書式によるtaskをひとまとめにする方法を学習します。
【変更履歴】
- PHPをインストールするタイミングでhttpdロールの00-mpm.confの配布を行わないようにしました。
( httpdのパッケージアップデートなどで、ApahceがPHPモジュールをロードできない現象があったためです。)
Gitモジュール使ったコンテンツデプロイの例を学習します。
ここまで作ってきたPlaybookは、サーバーをセットアップするためのものでしたが、ここでは、デプロイタスクというタスク処理を学習します。
タスクのようにセットアップとは、異なる頻度で実行される内容を管理するために、tags書式を学習します。
tagsが設定された部分は、--tagsオプションで限定的な実行が可能になります。
ここまで作成したPlaybookとRoleをAWSクラウドの複数台のサーバーに適用します。
Ansible Cloud Modulesを使ってAWSのクラウドリリースを起動・管理する方法を学習します。
Cloud Modulesを使えば、EC2サーバーの起動も、Ansibleで行うことが可能になります。
クラウドの構成管理も、inventoryファイルの編集のみで行えるようになります。
※このセクションで利用しているファイルはここからダウンロードしてください。
※ansible galaxyでインストールするファイルは、ダウンロードファイルに含まれていません。ご自身で、installしてください。
Ansible Cloud ModulesのWebページ
https://docs.ansible.com/ansible/2.5/modules/list_of_cloud_modules.html
本コースでは、AWSを例にしていますが、GCP、Azureなど、主要クラウドの操作も可能なモジュールです。
本セクションを進めていくにあたり、事前に準備いただきたいもの、準備する方法を説明しています。
AWSに必要なもの
外部ドメインが必要となるので、無料でドメインを取得できる。
Freenomサービスの紹介と、Route53の設定方法を、説明しています。
Ansible Cloud Modulesは、AWSのAPI実行環境を必要とします。
環境準備の方法について、説明しています。
awscliの初期化方法を説明しています。
EC2サーバーの起動手順を説明しています。
EC2サーバーのインスタンスタイプ、ディスク容量など、面倒な設定は、group_varsの設定ファイルから設定可能になります。
起動したEC2サーバーを、Route53に自動登録します。
register書式を使って、変数化したEC2の情報をRoute53に渡してあげれば、できあがったEC2サーバーのIPアドレスを、マネージメントコンソールで確認する必要はありません。
インフラ用に分離したPlaybookを使ってインフラ部分のセットアップを行います。
inventoryファイルで、サーバー個別に変数を設定する方法を学習します。マルチAZの配置も、inventoryファイルで管理します。
起動したEC2サーバーを、指定したELBのターゲットグループに登録します。
fact書式を使ってリリース情報を収集し、
set_fact書式を使って収集したリリース情報を設定します。
factで収集されたEC2サーバーの情報は、自動で、ELBに登録されるので、マネージメントコンソールとにらめっこする必要はありません。
準備したインフラに、サーバーセットアップ、コンテンツデプロイを行います。
システム構築作業も、いよいよ大詰めです。
--extra-varsを使って、コマンドラインから、Ansibleの変数を上書きする方法を学習します。
いざ、運用が開始して、サーバーが不足した。
そんなときのサーバー増設の対処方法を学習します。
--limitオプションを使って、Ansibleの適用箇所を限定する方法を学習します
--skip-tagsオプションを使って、指定のtag以外の内容を実行する方法を学習します。
学習で使ったAWS環境を片付けする方法を紹介しています。
AWSは、立ち上げたままだと費用がかかるので、必要に応じて、環境を削除しましょう。
ここまでのPlaybookが正しく準備できていれば、環境の再構築も簡単です。
本コースではサーバーのミドルウェアのインストール・設定作業といったサーバーインフラの構築作業を、構成管理ツール「Ansible」(アンシブル)を使ってコード化し、自動化する方法を基礎から学びます。
また、Ansible 2.4より導入された「Cloud Modules」を使って、AWSクラウドに、EC2サーバーを起動する方法や、Route53、ELB ( Application Load Balancer )との連携方法も学びます。
Ansibleを導入する利点
Ansibleを使いシステムを自動化することにより作業が格段に楽になりますし、健全なシステム運用が実現できます。
本講座のゴール
AnsibleのInventoryファイル(ホストのリスト)の書き換えのみで、以下のようなシステム構成管理を行えるようになります。
本講座の特徴
基礎からAWSを想定したクラウド環境に、LAMPを使ったWebの公開環境を準備するまでの流れに沿って学ぶことで、実践的なAnsibleの使い方を学べるように以下のように設計されています。
Anisbleの基本的な使い方:VirtualBoxを使ったローカル開発環境
Ansibleの代表的なモジュールの使い方:Enterprise Linux (CentOS、Amazon Linux 2)を対象に実例を用いて解説
実践的なAnsibleの使い方:LAMPシステムの構築から解説
AWS環境にシステム構築する方法
代表的なAnsibleの構文と利用方法