23. デプロイ用パッケージの作成

このチュートリアルでは、Asakusa Frameworkの実行モジュール一式をパッケージした デプロイメントアーカイブ を生成する方法を説明していきます。

23.1. デプロイメントアーカイブ

Asakusa Frameworkで開発したバッチアプリケーションは、HadoopやSparkのクラスター環境、もしくはM3BPを利用する高性能マシンなどに配置して実行します。 ここではこれらの環境をまとめて 運用環境 と呼びます。

Asakusa Frameworkを運用環境で利用するには、バッチアプリケーションの他にも以下のようなAsakusa Frameworkの実行モジュール一式を配置する必要があります。

  • Asakusa Frameworkで生成したバッチアプリケーション
  • Asakusa Framework本体の実行ライブラリ
  • Asakusa Frameworkのバッチ実行ツール
  • Asakusa Frameworkの外部システム連携モジュール
  • 各種設定ファイル

Asakusa Frameworkでは、プロジェクトのビルド設定に従ってこれらの実行モジュール一式を デプロイメントアーカイブ と呼ばれる単一のファイルにパッケージングすることができます。

_images/organizer-assemble.png

23.2. デプロイメントアーカイブを生成する

それではまず、プロジェクトのデフォルト設定でデプロイメントアーカイブを生成してみましょう。

23.2.1. Eclipse上でデプロイメントアーカイブを生成

Shafuを導入したEclipse環境では、デプロイメントアーカイブの生成をコンテキストメニューから実行することができます。

  1. プロジェクトを選択してコンテキストメニュー(右クリックなどで表示されるメニュー)を表示します。
  2. コンテキストメニューの Jinrikisha (人力車) を選択し、サブメニューとして表示される Asakusaデプロイメントアーカイブを生成 を選択します。
_images/shafu-assemble.png

23.2.2. コマンドライン上でデプロイメントアーカイブを生成

コマンドライン上からデプロイメントアーカイブを生成する場合は、Gradleの assemble タスクを実行します。

./gradlew assemble

23.2.3. アーカイブファイルを確認する

アプリケーションプロジェクトの標準設定でデプロイメントアーカイブを生成すると、 プロジェクトの build フォルダ配下にデプロイメントアーカイブが asakusafw-${project.name}.tar.gz というファイル名で生成されます。

23.3. デプロイメント構成のカスタマイズ

デプロイメントアーカイブが持つデプロイメント構成は、実行環境に応じて構成を変更したり、拡張モジュールを追加したりと、様々な利用状況に応じてカスタマイズすることができるようになっています。

デプロイメント構成の変更を行うには、プロジェクトフォルダの直下にあるGradleのビルドスクリプト build.gradle を編集します。 このチュートリアルの手順で構築したプロジェクトに含まれる build.gradle は以下のようになっています。

build.gradle
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
group 'com.example'

buildscript {
    repositories {
        maven { url 'http://asakusafw.s3.amazonaws.com/maven/releases' }
    }
    dependencies {
        classpath group: 'com.asakusafw.gradle', name: 'asakusa-distribution', version: '0.10.1'
    }
}

apply plugin: 'asakusafw-sdk'
apply plugin: 'asakusafw-organizer'
apply plugin: 'asakusafw-spark'
apply plugin: 'eclipse'

以降では、デプロイメント構成に対して簡単なカスタマイズを行っていきます。

23.3.1. プロファイルの構成

デプロイメント構成の定義は、 build.gradle 内の asakusafwOrganizer ブロックに対して行います。

標準の build.gradle には asakusafwOrganizer ブロックは存在しないので、まずこのブロックを作成します。 このブロックは apply plugin: ... と書かれている行より下に作成します。

build.gradle
...
apply plugin: 'asakusafw-sdk'
apply plugin: 'asakusafw-organizer'
apply plugin: 'asakusafw-spark'
apply plugin: 'eclipse'

asakusafwOrganizer {
}

次に、 asakusafwOrganizer 内に標準プロファイルを表す profiles.prod ブロックを作成します。

build.gradle
asakusafwOrganizer {
    profiles.prod {
    }
}

プロファイル とは、特定の環境向けにデプロイメントアーカイブの構成を設定するための仕組みです。 プロファイルを定義することで、例えばテスト環境と本番環境でそれぞれ異なる構成をもつデプロイメントアーカイブを定義する、といったことが可能になります。

ここでは、標準で定義されているプロファイル prod に対する定義を変更していきます。

23.3.2. デプロイメント構成に対するファイルの追加

作成するデプロイメントアーカイブに任意のファイルやディレクトリを追加することができます。

ファイルを追加するには、 assembly.into(<追加先>) { put <追加元> } のように指定します。

build.gradle
asakusafwOrganizer {
    profiles.prod {
        assembly.into('example-dataset') {
            put 'src/test/example-dataset'
        }
    }
}

ここでは、デプロイメントアーカイブに運用環境で使用する疎通確認用のテストデータを追加します。 上記の例ではプロジェクトのフォルダ src/test/example-dataset に含まれるテストデータを example-dataset というディレクトリ名でデプロイメントアーカイブに追加しています。

23.3.3. テストデータの作成

上記のデプロイメント構成に対応するため、プロジェクト上のソースフォルダ src/test/example-dataset 配下にテストデータを配置します。

ここではバッチアプリケーションの入力データとなる以下の3ファイルを作成します。

23.3.4. デプロイメントアーカイブの再作成

これまでの手順を実施した上で デプロイメントアーカイブを生成する の手順を再度実行すると、 アーカイブファイルがプロジェクトの build フォルダ配下にデプロイメントアーカイブが asakusafw-asakusa-tutorial.tar.gz というファイル名で生成され、 このアーカイブファイルにはテストデータが同梱されています。

このアーカイブファイルは次のチュートリアル Spark環境へのデプロイ で使用します。

23.4. 終わりに

このチュートリアル終了時点のGradleのビルドスクリプト build.gradle は、次のようになります。

build.gradle
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
group 'com.example'

buildscript {
    repositories {
        maven { url 'http://asakusafw.s3.amazonaws.com/maven/releases' }
    }
    dependencies {
        classpath group: 'com.asakusafw.gradle', name: 'asakusa-distribution', version: '0.10.1'
    }
}

apply plugin: 'asakusafw-sdk'
apply plugin: 'asakusafw-organizer'
apply plugin: 'asakusafw-spark'
apply plugin: 'eclipse'

asakusafwOrganizer {
    profiles.prod {
        assembly.into('example-dataset') {
            put 'src/test/example-dataset'
        }
    }
}