投稿日:
2018年2月26日
最終更新日:
【脱魔境インフラ】AWSのEC2にAnsibleをインストールしてみよう
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
モンスターエナジー 355ml×24本 [エナジードリンク]
脳を活性化させるにはこれ!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
目次
インフラ環境は魔境になりやすい
サーバーシステムを開発していると、漏れなくAWS等でインフラ構築をする必要が出てきます。
しかし、このインフラ構築作業なのですが、何もツール等を使わずに作業者が独自でサーバー内部でコマンドを直接叩いてインフラ構築をしてしまうと、
- 実際にどのようなコマンドを叩いているのか?
- どのようなミドルウェアがインストールされているのか?
- 設定ファイル等はどのように作成したのか?
等が隠蔽されてしまうため、結果として
魔境インフラ
が完成する事が多々あると思います。笑
多くのインフラエンジニアは共感してくれるでしょう。笑
Ansibleで解決
Ansibleとは?
そんな魔境インフラにならないためのインフラ構築のお助けツールとして、Ansibleというツールがあります。
Ansibleとは、レッドハットが開発したインフラ構成管理ツールです。
インフラ構築をする際、あらかじめ用意した設定ファイル等に従い、各種ソフトウェアのインストールや初期設定等を自動で行ってくれます。
また、冗長構成をしていて複数のサーバーに同一の操作をする際にも、Ansibleを使えば設定ファイルに対象のホストマシンの情報を追加するだけで勝手に実行してくれます。
また、実行内容や設定をファイル管理する事で、インフラ情報の可視化や人為ミスの軽減を図る事が出来るため、非常に便利です。
メリット
- 1つのサーバーにAnsibleをインストールするだけで他ホストの操作が可能
- インフラ構築状態をファイルによって可視化する事が可能
- 複数ホストへの一括同一操作が可能
- 検証環境や本番環境ごとのEnv管理も簡単
- 作業者はAnsibleがインストールされたサーバー以外へは基本的に入る必要が無くなる
- 標準モジュールが豊富で、簡単にやりたい事を実現可能
- yaml形式による簡素な設定
デメリット
- ファイル数が肥大化してしまう
- yamlファイルの記述方法の学習コスト
導入するデメリットはほぼ無し
以上のように、導入するデメリットはほとんど無いです。
今回はAWSのEC2インスタンスへAnsibleをインストールし、簡単なリモートホストへの接続確認までの手順をご紹介致します。
手順
前提
- Ansibleをインストールするホストマシンと接続先のリモートマシンの2インスタンスを準備している事
- 公開鍵を用いたsshコマンドで接続確認済み
EC2インスタンスにログイン
まずはAnsibleをインストールしたいEC2インスタンスにssh通信で接続してみましょう。
以下のコマンドでログインしてください。
1 |
ssh -i {公開鍵へのパス} {ログインユーザー名}@{対象接続先ホスト}
|
正常に接続出来れば以下のように表示されると思います。
Ansibleのインストール
次にAnsibleの本体をインストールしてみましょう。
まずは以下のコマンドでrootユーザーになりましょう。
※rootユーザーは全てのサーバー操作が可能なので一歩間違えるとサーバーを壊してしまう恐れがありますので自己責任でお願いします
1 |
sudo su
|
パスワードを求められた場合はユーザーパスワードを入力してください。
次に以下のコマンドでAnsibleのパッケージを配布しているリポジトリを追加しましょう。
AnsibleのパッケージはRHELやyum公式リポジトリには含まれていないようです。
1 |
yum install epel-release
|
次に以下のコマンドでAnsibleパッケージをインストールしてみましょう。
1 |
yum install ansible
|
おや、何故かインストールが出来ませんでした。
原因としては、epel-releaseをインストールしたにも関わらず、epelリポジトリの設定が有効になっていないようです。なので、以下のコマンドで再度インストールを試してみましょう。
1 |
yum install ansible --enablerepo=epel
|
確認
正常にインストールが完了したら、以下のコマンドでansibleの動作確認をしてみましょう。
1 |
ansible --version
|
正常にインストールされていそうですね!
簡単なplaybookを使ってping接続
では、実際にホストマシンからリモートマシンへの接続が正常に出来るかの確認をしてみましょう。
まずは以下のようなディレクトリ構造を作成してください。
1
2
3
4
5
6
7
8
9
|
.
├── ping.yml
├── inventories
│ └── dev
│ └── hosts
└── roles
└── ping
└── tasks
└── main.yml
|
次にそれぞれのファイルの中身を記述していきましょう。
最初にhostsファイルを作成します。
このファイルは接続先のホスト情報を管理するファイルとなります。
サンプルとして以下のように記述をしてください。
1
2
3
4
5
6
7
8
|
[all-servers:children]
sample-servers
[sample-servers:children]
sample1
[sample1]
{接続先リモートホストIP}
|
hostsファイルはINI形式で記述をしていきます。
次はping.ymlファイルを作成します。
このファイルはplaybookと呼ばれ、実際にどのようなタスクを実行するか?という記述をyaml形式で追加していきます。
今回は簡単なpingによる接続確認なので以下のように非常にシンプルです。
1
2
3
4
5
|
---
- hosts: all-servers
remote_user: ec2-user
roles:
- ping
|
hosts | playbookを適用する対象を、hostsで追加したセクション名で指定します。 |
---|---|
remote_user | リモートマシンで使用する存在するユーザーを指定します。 今回はデフォルトのユーザーを指定します。 |
roles | 実際に処理を行うロールを複数指定します。 rolesディレクトリ配下が対象です。 |
最後にmain.ymlファイルを作成します。
このファイルでは具体的な処理の内容をyaml形式で記述していきます。
以下の記述をしてみてください。
1
2
3
4
5
6
7
|
---
- name: Test Ping
ping:
register: result
- debug: var=result
when: result | success
|
name | 任意のタスク名を指定します。 |
---|---|
ping | Ansibleのpingモジュールを利用します。 Ansibleには標準で様々なタスクを簡単に行うためのモジュールが用意されています。詳しくはコチラをご確認ください |
register | 処理結果の標準出力を変数に登録します。 今回はresultという変数に代入します。 |
debug | デバッグモジュールの利用を宣言します。 |
when | 条件指定による実行制御を行います。 今回はタスクの実行結果がsuccessだった場合のみdebugモジュールが実行されます。 |
playbookの実行
では、以下のコマンドでplaybookを実行してみましょう。
1 |
nsible-playbook --private-key={公開鍵へのパス} -i inventories/dev/hosts ping.yml
|
正常にpongが返ってきましたね。
終わりに
これでAnsibleを使う準備が出来ました。
様々なサーバー操作をファイルに記述する事で可視化を図ることが出来るため、インフラ状態を把握しやすくなり、新しい作業者が増えてもファイル群を見るだけでインフラ設計をある程度理解する事が可能になるので、ぜひAnsibleを導入してみてください。