Google Cloud Platform Cloud Composer の公式クイックスタートをやってみた

# Google Cloud Composer ？
Google Cloud Composer は、Apache Airflow をGoogle Cloud Platform (GCP) のマネージドサービス化したもので、パイプラインの作成・スケジュール実行・監視ができます。バッチ処理のジョブの実行・監視ができるイメージのサービスです。
Apache Airflow の[公式ページ](https://airflow.apache.org/) には、
>「Airflowは、プログラムでワークフローを作成、スケジュール設定、監視するためのプラットフォームです。」

と書かれています。
（Apache Airflow とは、Airbnb が云々・・・というのは有名のようなので省略します。）

GCP 上でバッチ処理というと、私は GCE インスタンスで実行する必要があると考えていましたが、マネージドサービスでバッチ処理ができるとは、

**今更ながら、これは使える・使いたい**

と思ったので、試してみました。

私は Apache Airflow についてあまり知らず、ドキュメントだけでは Cloud Composer のイメージがつかなかったので、[クイックスタート](https://cloud.google.com/composer/docs/quickstart?hl=en)を実際に行い記事にしてみました。
詳細な説明記事ではありませんが、本記事を読まれる方に Cloud Composer のイメージが伝われば幸いです。

## クイックスタートをやってみた

Cloud Composer のクイックスタートは、以下の処理の実行を試すことができます。
>
1. Creates a Cloud Dataproc cluster.
2. Runs an Apache Hadoop wordcount job on the cluster, and outputs its results to Cloud Storage.
3. Deletes the cluster. 

1. Cloud Dataproc クラスターを作成する。
2. クラスターで Apache Hadoop 文字数カウントジョブを実行し、その結果を Cloud Storage に出力します。
3. Cloud Dataproc クラスターを削除する。

では、クイックスタートのページを上からやっていきます。

### 使用するAPIを有効にする
これは簡単なので省きますが、クイックスタートで使用するCloud Composer、Cloud Dataproc、Cloud Storage のAPIを有効にします。

### Cloud Composer の環境を作成する
ここでいきなり Cloud Composer の環境を作成します。設定は基本的にデフォルトとしました。以下が設定画面のイメージです。
![20190502gcc-settei.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/54c22f9b-92dc-38de-6485-74a65f9d5c09.png)

必要な個所を入力すると、「作成」ボタンが押せるようになりますので、クリックします。
Cloud Composer の環境作成はかなり時間が掛かりますので焦らずに待ちましょう。


### 文字数カウントの結果を格納するバケットを作成する
名前はなんでもいいので、バケットを作成します。今回は us-central1 にリージョナルバケット、バケット名 wordcount-result を作成しました。
![2019-05-02_21h29_49gcs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/fd21f2b3-bc80-a4a4-829d-586bdeea4c36.png)


### 変数を設定する
Cloud Composer に以下の３つの変数を設定します。

| キー | 値 |本記事での設定|
|:-:|:-:|:-:|
|gcp_project|クイックスタートを実行するプロジェクトID|GCPのproject-id|
|gcs_bucket|先ほど作成したバケットパス|gs://wordcount-result|
|gce_zone|Cloud Composer を作成したリージョン|us-central1|

設定するコマンドは以下のコマンドです。
`gcloud composer environments run {Cloud Composer の環境名} --location {リージョン} variables -- --set {キー} {値}`

本記事での具体的なコマンドは以下となります。

```BASH:gcp-project設定
gcloud composer environments run my-environment \
    --location us-central1 variables -- --set gcp_project my-project-id
```

```BASH:gcs_bucket設定
gcloud composer environments run my-environment \
    --location us-central1 variables -- --set gcs_bucket gs://wordcount-result
```

```BASH:gce_zone設定
gcloud composer environments run my-environment \
    --location us-central1 variables -- --set gce_zone us-central1
```

設定した値を確認するには、以下のコマンドを使用します。
`gcloud composer environments run {Cloud Composer の環境名}
    --location {リージョン} variables -- --get {キー}`


### ワークフローファイルを設定する
クイックスタートに記載のサンプルワークフロー quickstart.py をCloud Composer に設定します。
quickstart.py の内容については、上記引用したものと同じですが、[公式ドキュメントのクイックスタート](https://cloud.google.com/composer/docs/quickstart?hl=en)に記載されているソースの説明を抜粋しました。ここは公式ドキュメントのソースを見て確認するほうが分かり易いと思います。
>
1. DataprocClusterCreateOperator: Creates a Cloud Dataproc cluster.
2. DataProcHadoopOperator: Submits a Hadoop wordcount job and writes results to a Cloud Storage bucket.
3. DataprocClusterDeleteOperator: Deletes the cluster to avoid incurring ongoing Compute Engine charges.

1. DataprocClusterCreateOperator：Cloud Dataproc クラスターを作成します。
2. DataProcHadoopOperator：Hadoop文字数カウントジョブを実行して結果を Cloud Storage バケットに書き込みます。
3. DataprocClusterDeleteOperator：Compute Engine の料金がかからないように、Cloud Dataproc クラスターを削除します。

### DAGを Cloud Storage にアップロードする
クイックスタートに記載されているサンプルワークフロー quickstart.py を Github から取得します。(取得方法は割愛します。公式ドキュメントからコピペでも取得可能です。)
ここでは、Cloud Shell を使用してアップロード方法を記載します。

1. [Cloud Shell](https://cloud.google.com/shell/?hl=ja) を起動します。
2. DAG用フォルダを作成します。（本記事では test-dag フォルダを作成しました。）
   mkdir test-dag/
3. quickstart.py を Cloud Shell にアップロードし、先ほど作成した test-dag フォルダに移動します。Cloud Shell でのファイルアップロードは以下のように簡単にできますが、ファイルはホームディレクトリにアップロードされるので、作成したフォルダに移動します。
![2019-05-02_23h56_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/65d1f464-6619-b66b-2266-658dc27ac16c.png)

4. 以下のコマンドを使用し、DAGを Cloud Composer にアップロードします。

`gcloud composer environments storage dags import 
  --environment {Cloud Composer の環境名}  --location {リージョン} 
  --source {DAGファイルパス}`

本記事では以下のコマンドを実行しました。

```BASH:DAG-Import
gcloud composer environments storage dags import 
  --environment my-environment  --location us-central1 
  --source test-dag/quickstart.py
```

### Airflow UIを開く
このクイックスタートは、Quickstart.py を Cloud Composer に設定すると、実行するようになっていますので、Cloud Composer の環境の画面にある「Airflow ウェブサーバー」の下の「Airflow」をクリックし、実行状態を確認します。
![2019-05-03_00h38_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/590c1cc3-bc0f-1cf6-9dc6-35da0ab71b8d.png)

Airflow UIが開きます。以下のような感じで表示されます。
正常に終了した場合は、赤枠のようにSUCCESS(左隅の〇)が点灯します。
![2019-05-03_02h23_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/47eda31c-2467-c676-cd4c-735436901890.png)

また、DAGをクリックすると、Tree View を表示します。
正常に完了していると、赤枠のステータスがSUCCESSとなります。マウスを緑の印に合わせるとステータスがわかります。
![2019-05-03_02h24_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/ce6bc93f-cf2f-4618-d7ed-da6cbd37b261.png)

Graph View をクリックすると、どこかで見たことがあるジョブネットのようなイメージで表示されます。
![2019-05-03_02h26_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/b5cdbc8c-e879-feb4-89bf-d4063f281fe0.png)

### 実行結果
クイックスタートの実行結果は、作成した wordcount-result バケットに保存されています。以下がバケット内のイメージです。
![2019-05-03_02h30_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/9d2359e1-0538-9d32-77ea-f2809094a067.png)

作成されたファイルの一部を`gsutil cat`コマンドで見てみるとこんな感じで出力されていました。
![2019-05-03_02h43_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/6a99419a-5fec-4c16-fe7e-7cfee600ab23.png)



# 終わりに
本記事では、Cloud Composer のクイックスタートをなぞってみただけですが、バッチ処理で結構使えるイメージが湧きませんでしたか？ Python を使ってバッチ処理が書けて、J(ピー)1のジョブネットのように実行監視ができるマネージドサービスは活用できる場面がたくさんあると思います。
私は、例えば BigQuery のバッチ処理や、クイックスタートのように Cloud Dataproc (Spark / Hadoop ) のバッチ処理など、日々ビッグデータを使用したデータ分析を行う企業の夜間バッチ処理に使いたいと思いました。

機会があれば次は Cloud Composer で BigQuery の処理を実行する記事を書こうと思います。
（もう既に偉大なる先人の記事があると思いますが・・・）

本記事を読んでいただいた方に Cloud Composer を知っていただき、ご活用いただけるキッカケになれば嬉しいです。お読みいただきありがとうございました。

# 参考サイト
・[Google Cloud Composer QuickStart](https://cloud.google.com/products/)
・[Cloud Shell](https://cloud.google.com/shell/?hl=ja)