雨ブロ【yusukixsのブログ】

アドテク関連の業界で働くエンジニアです。最近はKubernetesでコンテナクラスタを構築してサービス開発することに力を入れてます。

構成管理ツールAnsibleを使い始めた

2015.06.23にヒカ☆ラボにて実施された、構成管理ツール「Ansible」の勉強会に参加してきました。

登壇したのはDMM.comラボの開発者の方です。

勉強会メモ

Ansibleで何ができるのか

2013年ごろからGoogle検索のトレンドになりつつある。

Ansibleは構成管理ツールだが、デプロイもできる。 JenkinsでAnsibleを使って自動デプロイをするといったようなことも可。

OS ミドルウェアの導入、設定でChefやAnsibleがよく使われる

ソフトウェアのデプロイ、OS/ミドルウェアの構成管理、開発端末のセットアップはAnsibleだけでできる。

Ansibleのユースケース

  • デプロイ
  • 構成管理
  • 継続的デリバリ

Ansibleのコンセプト

作者の言葉: Ansible's Architecture: Beyond Configuration Management

オーケストレーションというコンセプトもある。Ansibleはこれらを全部できる。

Ansibleは構成管理とデプロイのどちらかではなく、アプリケーションを完成させること。全てを自動化させる。

Ansibleの基本的な使い方

Ansibleの特徴

  • 冪等性
    • 複数回実行しても同じ結果になる
    • 構成管理するうえで非常に重要
  • シンプル
    • エージェントレス
    • 準備するファイルが少ない
    • タスクの定義はYAML形式
  • 標準モジュールが豊富
  • roleを共有する仕組み

Ansibleで準備するファイル

  • inventory
    • 実行対象のホスト軍を定義
  • playbook
    • 一連のタスクを定義
  • ansible.cfg

Ansibleコマンドを実行

ansible -i "127.0.0.1" all -m debug -a "msg=hello"

-i INVENTORY -m MODULE_NAME -a MODULE_ARGS

Ansible playbook

playbook.ymlという名前のファイルで作成

- hosts: local
  connection: local
  tasks:
    - name: ファイルの作成
      file: path=/tmp/helloworld/{{item}} state=touch
      with_items:
        - test1.txt
        - test2.txt

    - name: OSXの合成音声
      osx_say: msg="Hello World" voice={{item}}
      with_items:
        - whisper
        - kyoko
        - Zarvox

↑ Mac OSXのsayコマンドで合成音声ができる

(こんなコマンドがあったなんて知らなかった…w)

Moduleについて

対象ホスト or Playbookを通して実行されるもの

  • copy
  • filecommand
  • get_url
  • unarchive
  • template
  • service

Handlerについて

設定ファイルを書き換えた際の再起動といったユースケースではHandlerをつかう

処理が複雑になった場合

  • 対策
    • includeで他のファイルを読み込む
    • taskを分割する
    • 変数を定義する
  • ロールにまとめてしまう
    • playbookを構成する最適な方法
    • ファイル構成に従えば、自動的にvarsなどが読み取られる

DMMでの活用事例

  • Macの環境設定

    • homebrewモジュールで環境構築が一発でできる
  • 仮想マシンの環境構築

  • DevとOpsの共通言語になりつつある

勉強会に参加して

社内の別の部署でChefを使った調査を実施しているのは聞いたことがあったのですが、覚えることが多すぎて利用する気になれませんでした…

今回紹介されたAnsibleはエージェントレスで実行ができ、YAML形式で定義が可能で可読性が高いということで、一目で気に入りました。これはすぐに使えそうだと実感できたんですね。

そこで、実際にAnsibleを利用してみることにしました。

私が開発を担当しているサービスでは、無償のトライアル環境を提供する際にはサイトを手動で構築することが多く、その構築作業を面倒に感じていたため、その作業をAnsibleで自動化しました。

実際に自動化した作業は下記の通りです。

  • ソースのZIPファイル解凍
  • ディレクトリのリネーム、パーミッション設定
  • データベース作成
  • 設定ファイルの書き換え
  • 差分SQLの実行
  • 特定ディレクトリの上書き

これらの作業をコマンド1つで実行できるようになりました。なんでこれまで自動化しなかったんだろうというレベルですね…w

社内の勉強会でもAnsibleを紹介して評判がよかったので、これからAnsibleをうまく更に使いこなせるように勉強していきたいと思います。