Prog-me.

Rails中心、機械学習も、インフラもセキュリティも

【インフラ】環境構築・共有について、わかっておいた方がいいツールたち【Vagrant/Chef/Docker/Ansible/AWS】

Vagrant

VagrantはVirtual Boxなどの仮想化ソフトウェアと一緒に使うツールVagrantはプロバイダ(仮想化ソフトウェア)を選択できるので、他にもVMwareAmazon EC2で使うこともできる。

VagrantとVirtual Boxを使って何がしたいのか

  • 実行環境を開発と本番で揃えたい。
  • 開発環境を構築する際に個人のローカル環境に依存しないようにしたい。
  • すぐに使える仮想環境を構築したい。
  • 環境構築を自動化したい。
  • チームで同一の環境を簡単に構築したい。

環境構築の自動化

Vagrant は Chef、puppet などの構成管理ツールと連携して環境構築を自動化できる。 vagrant up した時点で自動で環境は構築される。

Virtual Boxのスナップショット機能を使えば、以前の状態に元に戻すことができる。

Chefとは

ruby製のサーバの構成管理ツールで、サーバ構築の自動化をしてくれるツール

ソフトウェアのインストールや設定などを設定ファイルに記述しておくことで、サーバをその設定ファイルの状態にしてくれる。設定ファイルにはサーバのあるべき完成状態を記述し、その差分をChefがうまいこと埋めてくれる感じ。

Chef用語

  • Node:Chef Serverに接続するClientの中で、Chefで管理するマシンのこと。
  • Client:Chef Serverに接続するもの全て。管理ツール(knife等)もClient
  • knife: Chefに付属するためのリポジトリ操作ツールです。このコマンドを使ってCookbookを作ったり、NodeとRecipeを関連付けたりします。

Dockerとは

  • Linux上で独立した別のLinuxシステムを起動することができる、コンテナ型の仮想化ソフトウェアの一つ
  • コンテナ型の仮想化では仮想的な物理マシンの構築は行わず、元のOS環境上に隔離されたエリアを作り、仮想的に新たなOS実行環境を作り出す。
  • OSの設定やアプリケーションソフトの導入の済んだLinux環境を丸ごと実行イメージとして保存する機能があり、別のマシンのDockerに持ち込んでそのまま実行することができる。これをソフトウェアの配布に応用すれば、複雑な導入・設定作業を省略し、元の環境との違いなどを意識しなくても簡単にソフトウェアを導入できるようになる。

Kobito.wp7YEc.png

Docker特徴

Dockerのメリット

  • アプリケーションを少ないリソースで効率良く実行できる
    => コンテナー型の仮想化はハイパーバイザー型の仮想化に比べ、CPUなどコンピューターリソースのオーバーヘッド(仮想化のために必要になる余分なリソース)が少ないため、リソースの少ないハードウェアでも実行できる。
  • githubで管理できる
    =>Dockerはコンテナーの構成を全て「Dockerfile」というテキストファイルに記述できるため、「Infrastructure as Code(インフラ構成をGitHubなどのコードリポジトリで管理)」を実践するツールとしても利用できる。

Ansible

Chefのとおなじく構成管理ツール

Ansible用語

  • モジュール -クライアント内での動きは「モジュール」として定義される。ソフトウェアをインストールしたり、サービスの起動をしたりするモジュールはあらかじめ用意されている。

-自分でモジュールを作成することも可能。

-このモジュールは何で作成してもいいので、Pythonの知識は必要ない。決められた出力形式(key-value形式かJSON)を守ればOK

  • Play book -Chefでいうところのレシピ。モジュール処理をまとめたものが「Play book」と呼ばれる。YAML形式で記述。

Google App Engine

App Engineは一般的なWeb技術をフルサポートし、ストレージ、ユーザー認証やメール送信用のGoogle API、自動的なスケーリングや負荷分散などを提供する。利用者はappspot.comドメイン上で自由なドメイン名を使って、あるいはGoogle Appsを使って自分のドメインでアプリケーションを提供できる。アプリケーションは公開することも、社内メンバーだけにアクセスを限定することも可能だ。対応言語は現時点ではPythonのみだが、今後サポートを拡大するという。

AWS

Amazon Web Services(アマゾンウェブサービス)の略称で、 Amazon.com社が行っているサービスの名称。てっとりばやいのはこの動画(http://aws.amazon.com/jp/getting-started/)

急激に成長しているサービスで、アメリカでは政府機関が使っているほど高いセキュリティを保っている。提供されてるサービスがとても多い。

Amazon EC2

  • 仮想化されたWebサーバのコンピュータリソースを自由に使え、わずか数分で起動させることができる重量課金制のWEBサービス
  • WEBサーバやDBサーバ、キャッシュサーバーなどなど色々な用途に使えるサーバ。

Auto Scaling

あらかじめ設定をしておくと、突然のサーバ負荷の際に自動的にサーバを増やしたり減らしたりしてくれる。

Amazon S3

データストレージサービスです。 データの格納と取り出しに特化。 コンテンツのストレージや配信する際などに使用される。

Amazon RDS

データベースとして使用される。

AWSの課金について

  • サーバの利用料は使った分だけお金がかかる従量課金。

  • 他にもディスク利用料、データ転送量などがかかるが、 サーバ利用料が8割を占めることらしいので、 サーバ利用料の仕組みをわかれば怖いものなし。

  • サーバ課金には以下の3つがある 1.オンデマンドインスタンス:サーバが起動している時間によってお金が増えていく。 2.リザーブドインスタンス:一定額の金額を先に払ってしまうことで、1時間あたりの単価を大幅に下げることができる。 3.ライセンス課金

参考・引用させていただいたサイト

Vagrantって流行ってるらしいけど何が便利なの? アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識 構成管理ツール Ansibleを使ってみる Webサービス開発に関わるなら知っておきたい「AWS」とは?