はじめに

皆様、こんにちは。

PIALab.のつくるひと、西です。

前回の記事では、デプロイツール「Ansistrano」について、概要を紹介しました。
今回はAnsistranoを導入してデプロイするまでのステップを簡潔にまとめていきます。

 

Ansistranoを利用して簡単にデプロイしよう

Ansibleは導入済みの前提で進めていきます。
※Ansibleの導入から、という方はさくらインターネット様のナレッジが整理されていて分かり易いので、そちらを御覧ください。

では、スタート!
start

 

インストール

Ansistranoは ansistrano-deployと ansistrano-rollback の2つのroleから構成されており「Ansible Galaxy」で公開されています。
それぞれansible-galaxyを使ってインストールを行います。
ターミナルから下記コマンドを実行すればOKです。

$ ansible-galaxy install carlosbuenosvinos.ansistrano-deploy carlosbuenosvinos.ansistrano-rollback

はじめてのデプロイとロールバック

build

まずは、最低限のplaybookで始めましょう。
下記内容でデプロイとロールバックのplaybookファイルを作成します。

  • デプロイplaybook
---
- hosts: batch_server
  vars:
    ansistrano_deploy_from: "/source_dir" 
    ansistrano_deploy_to: "/target_dir" 
    ansistrano_deploy_via: rsync 
  roles:
    - carlosbuenosvinos.ansistrano-deploy

 

デプロイで指定したパラメータの解説です。
全体的なリファレンスはこちらから確認してください。

ansistrano_deploy_param

 

  • ロールバックplaybook
---
- hosts: all
  vars:
    ansistrano_deploy_to: "/target_dir"
  roles:
    - carlosbuenosvinos.ansistrano-rollback

ロールバックで指定したパラメータの解説です。

ansistrano_rollback_param

  • hostsファイル あわせて、デプロイ先ホストの情報をまとめるhostsファイルを作成します。
---
[web]
192.168.0.1

[all:vars]
env=Development

これだけで、デプロイとロールバックが可能です。

デプロイ実行

ここでおもむろにデプロイしてみましょう。

ターミナルからAnsibleコマンドを実行します。

$ ansible-playbook -i dev_hosts deploy.yml

PLAY [] ******************************************************

TASK [setup] *******************************************************************
ok: [192.168.0.1]

....................

PLAY RECAP *********************************************************************
192.168.0.1 : ok=32 changed=13 unreachable=0 failed=0

$ 

上記のデプロイ実行結果、以下のようなディレクトリが作られます。
/target_dir/current は、常に最新のプログラムへのシンボリックリンクになります。

target_dir/
  current -> /target_dir/releases/20171016083507Z へのシンボリックリンク
  releases/
    20171010055823Z/
    20171010060242Z/
    20171016083507Z/
      log -> ../../shared/log へのシンボリックリンク
      tmp -> ../../shared/tmp へのシンボリックリンク
  shared/
    log/
    tmp/

ロールバック実行

続いてロールバックを実行します。

$ ansible-playbook -i dev_hosts rollback-batch.yml

ロールバック実行後、最新だった 20171016083507Z ディレクトリは削除されます。

target_dir/
  current -> /target_dir/releases/20171010060242Z へのシンボリックリンク
  releases/
    20171010055823Z/
    20171010060242Z/
      log -> ../../shared/log へのシンボリックリンク
      tmp -> ../../shared/tmp へのシンボリックリンク
  shared/
    log/
    tmp/

単純なデプロイとロールバックならこのとおりです。
簡単ですね!

Anisistranoの設定ポイント

改めて、Ansistranoが実行する作業は下記3ステップだけです

  • 対象のサーバーにSSH接続し、
  • git等から取得したファイルを配置して、
  • Webサーバのアプリケーションルートへデプロイ実行

上記の3ステップがベースとなりますが、Ansistrano の動作は複数フェーズに分かれており、各フェーズの前後に処理を差し込むことができます。
差し込む処理は Ansible の task で記述します。

メインワークフロー

以下の図は、Ansistrano のページ からの引用です。
ダイアグラムの灰色箇所がメインワークフローの各ステップ、
黄色箇所が各ステップの前後に実行されるカスタムタスクのフックポイントです。

workflow

ステップ

メインワークフローのフェーズは以下の 5 ステップで構成されています。

ansistrano_step

ワークフローとステップについて紹介しました。
最低限のデプロイ、ロールバックについては、前項を参照してもらい、理解を含めながらtaskを追加していくことをおすすめします。

git pullの準備

Ansistranoでデプロイを実行する際、対象のLinuxサーバからGitホスティングサービスへ接続し、git pull(ソースコードをダウンロード)する必要があります。
下記URLを参考に、事前にSSHKeyをGitホスティングサービスへ登録しておきましょう。

デプロイ時のplaybookの記述について

では、PIALab.で実際に利用しているディレクトリ構造、デプロイ用playbookの記述例を紹介していきます。

想定しているデプロイ

AWS EC2 で構築しているWebアプリケーションへ、Bitbucketで管理しているソースコードをgit pullし、アプリケーションルートへ配置

Playbook のディレクトリ構成

├── deploy.yml // デプロイ用 playbook
├── dev_hosts // デプロイ先ホストの情報
├── key // 認証用のKeyファイルを配置するディレクトリです
│   ├── sample_app.pem
│   ├── id_rsa
│   ├── id_rsa.pub
│   └── tnishi-Bitbucket.pub
├── rollback.yml // ロールバック用 playbook
└── vars
└── Development.yml // Gitリポジトリ情報などを定義したplaybook

デプロイ用 playbook

順番に見ていきましょう。
まずは、デプロイ時の動作を定義したplaybookです。

  • deploy.yml
- hosts: all
  vars:
    ansistrano_deploy_via: git
    ansistrano_git_repo: "gitリポジトリを記述してください"
    ansistrano_git_identity_key_path: key/id_rsa
    ansistrano_shared_paths: []
  vars_files:
    - vars/Development.yml
  roles:
    - carlosbuenosvinos.ansistrano-deploy

 

ロールバック時の動作を定義したplaybookです。

  • rollback.yml
---
- name: Rollback last wishes app to my server
  hosts: all
  vars:
    ansistrano_deploy_to: /home/ec2-user/apps
  vars_files:
    - vars/Development.yml
  roles:
    - carlosbuenosvinos.ansistrano-rollback

Gitリポジトリ情報などを定義したplaybookです。

  • Development.yml
ansistrano_git_branch: release/anniversary_update
ansistrano_deploy_to: /home/ec2-user/apps
ansible_ssh_user: ec2-user
ansible_ssh_private_key_file: key/sample_app.pem

 

デプロイ、ロールバックのコマンドは先ほどと同じです。

$ ansible-playbook -i dev_hosts deploy.yml
$ ansible-playbook -i dev_hosts rollback-batch.yml

以上となります。
元々、解決したかった課題が「リモートデプロイを簡単かつ確実に行いたい」となっていますので、やっていることはシンプルです!

終わりに

coffee_book

如何でしょうか?

今回は、Ansistrano を使ってデプロイ環境を構築する方法を、実例をベースにご紹介しました。
Ansitrano は、Ansible に慣れている方であれば、新しい概念を特別に覚える必要もなく、すぐに使い始められるツールです。

(多くの)エンジニアにとって、ドキドキのデプロイ作業、Ansistranoをうまく活用して、カジュアルな作業に変えていきましょう。

本記事が皆様のきっかけになれば幸いです。

つくる人募集中

PIALab.ではつくるひと(エンジニア)を募集しています。
気軽にPIALab.に遊びに来て、Gwaveカフェでお話しませんか?

詳しくはこちら の記事を御覧ください。