本文へジャンプします。

Ansibleを使用してニフティクラウドのインスタンスを構築する

はじめまして、エンジニアの小池です。
今回はAnsibleを使用してニフティクラウドのインスタンスを構築する方法を試してみようと思います。Ansibleは、PuppetやChefのようなクラウドインフラの構成管理ツールとして最近人気が高まっています。エージェントレスで利用できるため特別なソフトのインストールが不要なこと、YAML形式でプレイブック(設定ファイル)を記述するため、少ない手間でサーバーを管理できる点が特徴です。


概要

AnsibleのニフティクラウドモジュールがGitHubで公開されているので、今回はそちらを利用します。
詳細はこちらになります。ニフティクラウドモジュール

構成

一般的なウェブアプリケーションの構成で構築します。
使用するサービスは

  • サーバー2台
  • FW
  • ロードバランサー

ansible
になります。

事前準備

credential情報

事前にニフティクラウドのコントロールパネル(以下コンパネ)上でaccess_key, secret_access_key, endpointを確認しておきましょう。

ssh-keyの登録

起動したサーバーにアクセスするための鍵をコンパネから登録しておきましょう。

FWの作成

起動したサーバーに割り当てるためのファイアーウォールをコンパネから作成しておきましょう。

LBの作成

ロードバランサーをコンパネから作成しておきましょう。

ディレクトリの作成

最初に全体のディレクトリ構成を示します。

.
├── ansible.cfg
├── group_vars
│   └── all
├── hosts
├── library
│    │....
│
├── nginx.yml
└── provision.yml
  1. プロジェクトディレクトリの作成
    まずプロジェクトディレクトリの作成を行います。
    mkdir project_name

  2. 必要なディレクトリの作成
    続いて同じ要領で、group_vars,library ディレクトリを作成してください。

ニフティクラウドモジュールのインストール

library以下にGitHubのニフティクラウドモジュールのファイルをそのまますべて移してください。
モジュールをインストールする方法の詳細は別途ドキュメントを確認してください。

移した後のファイル構成はこのようになります。

.
├── ansible.cfg
├── group_vars
│   └── all
├── hosts
├── library
│   ├── README.md
│   ├── documents
│   │   ├── niftycloud.md
│   │   ├── niftycloud_fw.md
│   │   ├── niftycloud_lb.md
│   │   └── niftycloud_volume.md
│   ├── niftycloud.py
│   ├── niftycloud_fw.py
│   ├── niftycloud_lb.py
│   ├── niftycloud_volume.py
│   └── tests
│       ├── files
│       │   ├── calculate_signature_sample.sh
│       │   ├── startup_script
│       │   └── startup_script_blank
│       ├── test_niftycloud.py
│       ├── test_niftycloud_fw.py
│       ├── test_niftycloud_lb.py
│       └── test_niftycloud_volume.py
├── nginx.yml
└── provision.yml

これで事前準備は終了です。
次にAnsibleのコードを作成していきます。

Ansibleの環境設定

ansible.cfgファイルの編集

ansible.cfg

[defaults]
private_key_file=~/.ssh/id_rsa
host_key_checking = False

ここでは、ansible実行の際に使用する鍵の登録や、ssh接続する際にでてくるアラートを防ぐ設定をしています。
これにより、起動したインスタンスにアクセスする際にAnsibleがストップしなくなります。
詳細はドキュメントを参照してください。

hostsファイルの編集

hostsファイルにhostを登録します。

hosts

[localhost]
127.0.0.1 ansible_python_interpreter=python

ローカルで実行するため、localhostを登録してあります。
またansible_python_interpreterを設定します。pipで入れたモジュールを呼び出す事ができないといったエラーが起きるため、ここで固定してあります。

variableファイルの作成

group_vars/allファイルを編集します。
ここにプレイブック中で使う変数を定義していきます。

group_vars/all

# credential
access_key: xxxxxxxxxxxxx
secret_access_key: xxxxxxxxxxx
endpoint: west-1.cp.cloud.nifty.com

# FW
fw_group_name: ansibletest # 事前準備で作成したFWの名前

# Instance
image_id: 68 # serverのイメージID
key_name: west1ansibletest 
instance_type: mini
availability_zone: west-11
accounting_type: 2 # 月額:1 従量課金: 2
ip_type: static
instance_id_prefix: ansible
instance_port: 80
loadbalancer_name: "ansibletest" # 事前準備で作成したロードバランサーの名前
loadbalancer_port: 80
  • access_key,secret_access_key,endpointの設定
    credential系の値の設定です。
    今回は手順を簡略化するためにこのファイルにcredential系の情報を書いていますが、gitなどでプッシュしないように気をつけてください。

プレイブックの作成

プレイブックは大きく二つに分かれます。
一つ目はサーバーなどインフラの構築をするためのプレイブック。
二つ目は起動したサーバーにnginx(ソフトウェアを)をインストールするプレイブックです。
まずはインフラの構築のプレイブックから説明していきます。

インフラの構築

最初に全体のコードを示します。

provision.yml

---

- name: Provision instances in NiftyCloud
  hosts: localhost
  connection: local
  gather_facts: False

  vars_files:
  - group_vars/all

  tasks:
  - name: pip install requests
    pip:
      name: "requests"

  - name: launch server
    niftycloud:
      access_key: "{{ access_key }}"
      secret_access_key: "{{ secret_access_key }}"
      endpoint: "{{ endpoint }}"
      instance_id: "{{ instance_id_prefix }}{{ item }}"
      state: "running"
      image_id: "{{ image_id }}"
      key_name: "{{ key_name }}"
      security_group: "{{ fw_group_name }}"
      instance_type: "{{ instance_type }}"
      availability_zone: "{{ availability_zone }}"
      accounting_type: "{{ accounting_type }}"
      ip_type: "{{ ip_type }}"
    with_sequence: count=2

  - name: Regist server to load balancer
    niftycloud_lb:
      access_key: "{{ access_key }}"
      secret_access_key: "{{ secret_access_key }}"
      endpoint: "{{ endpoint }}"
      instance_id: "{{ instance_id_prefix }}{{ item }}"
      instance_port: "{{ instance_port }}"
      loadbalancer_name: "{{ loadbalancer_name }}"
      loadbalancer_port: "{{ loadbalancer_port }}"
      state: "present"
    with_sequence: count=2

主要なポイントを一つ一つ説明していきます。

requestsのインストール

- name: pip install requests
  pip:
    name: "requests"

Ansibleのニフティクラウドモジュールがrequestsモジュールを使用しているため、ここでローカルにインストールしています。

サーバーの起動

- name: launch server
  niftycloud:
    access_key: "{{ access_key }}" 
    secret_access_key: "{{ secret_access_key }}"
    endpoint: "{{ endpoint }}"
    instance_id: "{{ instance_id_prefix }}{{ item }}" 
    state: "running"
    image_id: "{{ image_id }}"
    key_name: "{{ key_name }}"
    security_group: "{{ fw_group_name }}" # FWへの登録
    instance_type: "{{ instance_type }}"
    availability_zone: "{{ availability_zone }}"
    accounting_type: "{{ accounting_type }}"
    ip_type: "{{ ip_type }}"
  with_sequence: count=2

  • with_sequence: count=2
    これはこのタスクを2回ループさせるための記述です。
    今回はサーバーを2台を使用するのでこのような記述となっています。
    現在、何回目のループかは{{ item }}に数字が格納されています。
  • instance_id: "{{ instance_id_prefix }}{{ item }}"
    instance_idは一意にする必要があるため、プレフィックスに{{ item }}をつけてループ毎に被らないようにしています。
  • security_group: "{{ fw_group_name }}"
    この設定を書くことによって、起動したサーバーと事前準備で作成しておいたFWとの連携が行えます。

ロードバランサーへの登録

- name: Regist server to load balancer
  niftycloud_lb:
    access_key: "{{ access_key }}"
    secret_access_key: "{{ secret_access_key }}"
    endpoint: "{{ endpoint }}"
    instance_id: "{{ instance_id_prefix }}{{ item }}"
    instance_port: "{{ instance_port }}"
    loadbalancer_name: "{{ loadbalancer_name }}"
    loadbalancer_port: "{{ loadbalancer_port }}"
    state: "present"
  with_sequence: count=2

最後に事前準備の段階で作成しておいた、ロードバランサーへ起動したサーバーを登録します。

provision.ymlの実行

ではインフラの構築をするためのプレイブックができたので、実行してみたいと思います。
プロジェクトルートで、以下のようにコマンドを入力してください。

ansible-playbook –i hosts provision.yml

実行したらコンパネへ行きサーバーが作成されているか確認してみましょう。

nginxプレイブック

前章でインフラの構築が終わりました。
次に起動したサーバにnginxをインストールしていきます。

起動したサーバーのIPの確認

コンパネから起動したIPを確認して、メモしておいてください。

hostsの追加

次にhostsファイルの末尾に以下を追加します。

[nifcl_hosts]
xxx.xxx.xxx.xxx # 起動したサーバのip address
yyy.yyy.yyy.yyy # 起動したサーバのip address

nginx用のプレイブックファイルの作成

nginx用のプレイブックファイルは以下のようになります。

nginx.yml

---

- hosts: nifcl_hosts
  name: set up server
  user: root
  gather_facts: true

  tasks:
    - name: install ntp
      yum:
        name: ntp
        state: present
    - name: Check NTP service
      service: name=ntpd state=started
    - name: install epel-release repository
      yum:
        name: epel-release
        state: present
    - name: install nginx
      yum:
        name: nginx
        state: present
    - name: start nginx
      service:
        name: nginx
        state: started

実行

では作成したnginxのプレイブックを実行してみます。コマンドは以下のようになります。
ansible-playbook –I hosts nginx.yml

確認

実行後、しばらく待ってからロードバランサー経由でアクセスしてみましょう。
htmlのページが表示されれば成功です。
しばらく待つ理由としては、ロードバランサーがヘルスチェックを通すのに時間がかかる場合があるためです。

 まとめ

いかがでしたでしょうか?
今回はAnsibleを使用してニフティクラウドのインスタンスの構築を行いました。
今回はサーバを二台しか使用していないので、効果をあまり実感できないかもしれませんが台数が増えれば増えるほど効果が実感できると思います。
是非活用してみてください。

ニフティクラウド 導入相談窓口
ニフティクラウド 無料セミナー

閉じる

閉じる

クラウドブログ編集部

クラウドブログ編集部

ニフティクラウド ユーザーブログ編集部のアカウントです。 編集部からのお知らせや、レギュラーライター以外のゲストによる寄稿記事を掲載していきます。

浜中 慶

浜中 慶

1980年、神奈川県生まれ。2003年ニフティ入社。 ポータルサイト開発を中心に、音楽配信サービス、CGMサービスなど様々なプロジェクトに企画/デザイン/システム担当として参加。現在は@niftyのポータルサービス向けコンテンツ管理システムの企画/開発/運用を担当。

吉田 雄哉

吉田 雄哉

株式会社co-meetingの創業メンバー。「取締役&External- facing Technologist」と名乗り新しいIT技術を広く伝える活動とWebアプリケーション開発を行う毎日。パッケージベンダーでのSaaS立上げ・製造業の情報システム部門で企画やPM・受託開発と従事してきたため、ベンダーサイドとユーザサイド の両方の視点を持ち合わせる。

石田 健亮

石田 健亮

株式会社ドリーム・アーツで小売事業者向けSaaS「Shopらん」を企画、開発。メインの仕事はプログラマーだがサーバー管理や営業もこなすユーティリティプレイヤー。最近好きな事はパフォーマンスチューニング。特に並列化プログラミングがマイブーム。キライなことはデータセンターでの作業。騒音と乾燥が弱点。ニフティクラウドでデータセンターに行く必要が無くなったことが本当の利点だ と思っている。

五月女 雄一

五月女 雄一

ニフティでは「インフラを守る簡単な様で奥が深いお仕事」をしています。 夢はインフラの気持ちが読めるエンジニアになること。

わたなべ かずひろ

わたなべ かずひろ

専門学校卒業後、ソフトウェア開発会社で電力系統制御システムの開発に従事。その後、CD-ROM等マルチメディア系PCソフトの開発を経て、1998年フリーランスに。 2000年8月に株式会社イーツーの設立に参画。携帯を含む様々なWeb系のシステム開発に携わる。現在はiPhone/Androidアプリなどの開発も手がけている。

市角

市角

ニフティクラウドのコントロールパネル設計・開発をメインに、たまにインフラの運用やお手伝いもやっていたりします。コントロールパネルや新機能の活用方法、アイデアなどを中心に書いていく予定です。

仲山 昌宏

仲山 昌宏

歌って踊れるインフラエンジニア兼、PHPもRubyもJavaも書くPerl使い。 物理サーバの運用に飽きて、フルラックに格安サーバ詰めて自宅プライベートクラウドを構築中。 今年は個人的には分散処理を攻めていきます。

猪飼 賢広

猪飼 賢広

1984年、愛知県名古屋市生まれ。大学は福島県にある某大学。2008年ニフティに入社。 開発系部署に配属後、主に各種テーマサイト開発のシステム面調整、開発進行管理役などとして参加。 現在もPC・ガラケーサイトの開発まわりを担当。インフラまわりを触る案件にも携わっており、日々修行中。 好きな芸人はなかやまきんに君とレイザーラモンRG。

久江 裕之

久江 裕之

ニフティクラウドのインフラ運用、OS提供の仕事をしています。 新しいOSやイメージが出る時にこのブログでご紹介いたします。入社5年目。一流のインフラエンジニアを目指して日々勉強中。

竹内 豪

竹内 豪

ニフティクラウド エンジニア

山口

山口

ニフティクラウドの基盤設計、新サービス/アライアンス/インフラ企画、その他雑用全般を担当しています。 クラウドに欲しい機能や、こんなふうに使ってほしいという想いが共有できれば良いですね。

芳中 隆幸

芳中 隆幸

ニフティクラウドの開発、運用を担当しています。

酒井 浩平

酒井 浩平

ニフティクラウドの中にいます。 ネットワークまわりの運用・開発や自動化などに取り組んでいます。 すべてのエンジニアを幸せにすることを目指しています。

higebu

higebu

ニフティクラウド IaaSのエンジニアです。 ネットワーク、DRサービス with VMware vCloud® Air™ Technology辺りの担当をしています。

武田

武田

ニフティクラウドの開発・運用を担当しています。 各種機能の内容についてなどで執筆させていただく予定です。

福澤真

福澤真

ニフティクラウドのコンパネ開発、運用をしています。

森藤 大地

森藤 大地

データに関する仕事が好きです。

宮原徹

宮原徹

日本仮想化技術株式会社 代表取締役社長兼CEO。仮想化技術に関するコンサルタントとして長年活動しており、特にベンチマークテストによる性能評価を得意としている。

荒谷翔

荒谷翔

株式会社はてなでMackerelのセールスデベロッパーとして勤務しています

東條 望

東條 望

2014年にニフティへ中途入社。 入社後から現在まで、ニフティクラウドのサービス企画・開発を担当しています。 各サービスの紹介を執筆させていただく予定です。

世良迪夫

世良迪夫

ニフティクラウドのRDBなどを担当しています