素敵なサムシングを独断と偏見で一方的に紹介するブログ(´・ω・`)

IT

【脱魔境インフラ】AWSのEC2にAnsibleをインストールしてみよう

投稿日: 2018年2月26日
最終更新日:

スポンサーリンク

336×280




インフラ環境は魔境になりやすい

サーバーシステムを開発していると、漏れなくAWS等でインフラ構築をする必要が出てきます。

しかし、このインフラ構築作業なのですが、何もツール等を使わずに作業者が独自でサーバー内部でコマンドを直接叩いてインフラ構築をしてしまうと、

  • 実際にどのようなコマンドを叩いているのか?
  • どのようなミドルウェアがインストールされているのか?
  • 設定ファイル等はどのように作成したのか?

等が隠蔽されてしまうため、結果として
魔境インフラ
が完成する事が多々あると思います。笑
多くのインフラエンジニアは共感してくれるでしょう。笑

Ansibleで解決

Ansibleとは?

そんな魔境インフラにならないためのインフラ構築のお助けツールとして、Ansibleというツールがあります。

Ansibleとは、レッドハットが開発したインフラ構成管理ツールです。
インフラ構築をする際、あらかじめ用意した設定ファイル等に従い、各種ソフトウェアインストール初期設定等を自動で行ってくれます。
また、冗長構成をしていて複数のサーバー同一の操作をする際にも、Ansibleを使えば設定ファイルに対象のホストマシンの情報を追加するだけで勝手に実行してくれます。

また、実行内容や設定をファイル管理する事で、インフラ情報の可視化人為ミスの軽減を図る事が出来るため、非常に便利です。

メリット

  • 1つのサーバーにAnsibleをインストールするだけで他ホストの操作が可能
  • インフラ構築状態をファイルによって可視化する事が可能
  • 複数ホストへの一括同一操作が可能
  • 検証環境や本番環境ごとのEnv管理も簡単
  • 作業者はAnsibleがインストールされたサーバー以外へは基本的に入る必要が無くなる
  • 標準モジュールが豊富で、簡単にやりたい事を実現可能
  • yaml形式による簡素な設定

デメリット

  • ファイル数が肥大化してしまう
  • yamlファイルの記述方法の学習コスト

導入するデメリットはほぼ無し

以上のように、導入するデメリットはほとんど無いです。
今回はAWSEC2インスタンスへAnsibleをインストールし、簡単なリモートホストへの接続確認までの手順をご紹介致します。

手順

前提

  • Ansibleをインストールするホストマシンと接続先のリモートマシンの2インスタンスを準備している事
  • 公開鍵を用いたsshコマンドで接続確認済み

EC2インスタンスにログイン

まずはAnsibleをインストールしたいEC2インスタンスssh通信で接続してみましょう。
以下のコマンドでログインしてください。

正常に接続出来れば以下のように表示されると思います。

Ansibleのインストール

次にAnsibleの本体をインストールしてみましょう。

まずは以下のコマンドrootユーザーになりましょう。
※rootユーザーは全てのサーバー操作が可能なので一歩間違えるとサーバーを壊してしまう恐れがありますので自己責任でお願いします

パスワードを求められた場合はユーザーパスワードを入力してください。

次に以下のコマンドでAnsibleのパッケージを配布しているリポジトリ追加しましょう。
AnsibleのパッケージはRHELyum公式リポジトリには含まれていないようです。

次に以下のコマンドでAnsibleパッケージをインストールしてみましょう。

おや、何故かインストールが出来ませんでした
原因としては、epel-releaseをインストールしたにも関わらず、epelリポジトリの設定が有効になっていないようです。なので、以下のコマンド再度インストールを試してみましょう。

確認

正常にインストールが完了したら、以下のコマンドでansibleの動作確認をしてみましょう。

正常にインストールされていそうですね!

簡単なplaybookを使ってping接続

では、実際にホストマシンからリモートマシンへの接続が正常に出来るかの確認をしてみましょう。

まずは以下のようなディレクトリ構造を作成してください。

次にそれぞれのファイルの中身を記述していきましょう。

最初にhostsファイルを作成します。
このファイルは接続先のホスト情報を管理するファイルとなります。
サンプルとして以下のように記述をしてください。

hostsファイルはINI形式で記述をしていきます。

次はping.ymlファイルを作成します。
このファイルはplaybookと呼ばれ、実際にどのようなタスクを実行するか?という記述をyaml形式で追加していきます。
今回は簡単なpingによる接続確認なので以下のように非常にシンプルです。

hosts playbookを適用する対象を、hostsで追加したセクション名で指定します。
remote_user リモートマシンで使用する存在するユーザーを指定します。
今回はデフォルトのユーザーを指定します。
roles 実際に処理を行うロールを複数指定します。
rolesディレクトリ配下が対象です。

最後にmain.ymlファイルを作成します。
このファイルでは具体的な処理の内容yaml形式で記述していきます。
以下の記述をしてみてください。

name 任意のタスク名を指定します。
ping Ansibleのpingモジュールを利用します。
Ansibleには標準で様々なタスクを簡単に行うためのモジュールが用意されています。詳しくはコチラをご確認ください
register 処理結果の標準出力を変数に登録します。
今回はresultという変数に代入します。
debug デバッグモジュールの利用を宣言します。
when 条件指定による実行制御を行います。
今回はタスクの実行結果がsuccessだった場合のみdebugモジュールが実行されます。

playbookの実行

では、以下のコマンドでplaybookを実行してみましょう。

正常にpongが返ってきましたね。

オススメの参考書

終わりに

これでAnsibleを使う準備が出来ました。

様々なサーバー操作をファイルに記述する事で可視化を図ることが出来るため、インフラ状態を把握しやすくなり、新しい作業者が増えてもファイル群を見るだけでインフラ設計をある程度理解する事が可能になるので、ぜひAnsibleを導入してみてください。

336×280




336×280




CATEGORIES & TAGS

IT, , , ,

blogenist

Author: blogenist