【Airflow on Kubernetes】トラブルシューティング - WEB UIの/staticディレクトリが500 Internal Server Error

Airflow on Kubernetesで発生したエラーの内容と対策方法。

## Issue
AIRFLOWのJIRAにIssueを出しました。

- https://issues.apache.org/jira/browse/AIRFLOW-5080

## PR
AIRFLOWにPull Requestを出しました。

- https://github.com/apache/airflow/pull/5693

## 目次
- [【Airflow on Kubernetes】目次](https://qiita.com/Esfahan/items/cd6b3dc0f724b84361d2)

## 発生バージョン
- [airflow-1.10.3](https://github.com/apache/airflow/releases/tag/1.10.3)

## エラー内容
AirflowのWEB UIをブラウザで閲覧すると、一部のアイコンなどが表示されず、ChromeのinspectorのNetworkタブを確認すると、`/static`ディレクトリが`500 Internal Server Error`となっている。
<img width="1440" alt="Screen Shot 2019-07-31 at 15.10.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105936/b483a5ba-dee8-d89c-50f4-c14766a6c7b7.png">


## 調査
### Deploy時のログを確認
[scripts/ci/kubernetes/kube/deploy.sh](https://github.com/apache/airflow/blob/1.10.3/scripts/ci/kubernetes/kube/deploy.sh)を実行しPodを起動しようとする際、[initContainersのcommand](https://github.com/apache/airflow/blob/1.10.3/scripts/ci/kubernetes/kube/templates/airflow.template.yaml#L66)の[airflow create_user](https://github.com/apache/airflow/blob/1.10.3/scripts/ci/kubernetes/docker/airflow-test-env-init.sh#L28)の処理で、`Please make sure to build the frontend in static/ directory and restart the server`というログが出力されている。

```
+ airflow create_user -u airflow -l airflow -f jon -e airflow@apache.org -r Admin -p airflow
/usr/local/lib/python2.7/dist-packages/airflow/configuration.py:575: DeprecationWarning: Specifying airflow_home in the config file is deprecated. As you have left it at the default value you should remove the setting from your airflow.cfg and suffer no change in behaviour.
  category=DeprecationWarning,
[2019-07-31 06:04:49,824] {settings.py:182} INFO - settings.configure_orm(): Using pool settings. pool_size=5, pool_recycle=1800, pid=23
[2019-07-31 06:04:50,174] {__init__.py:51} INFO - Using executor KubernetesExecutor
Please make sure to build the frontend in static/ directory and restart the server
```

### Build時のログを確認
[scripts/ci/kubernetes/docker/build.sh](https://github.com/apache/airflow/blob/1.10.3/scripts/ci/kubernetes/docker/build.sh)を実行すると、[compile_assets.sh](https://github.com/apache/airflow/blob/master/airflow/www/compile_assets.sh#L26)で`npm install`を実行する部分で、以下のエラーが出力されている。
npmコマンドが無いと言われている。

```
running compile_assets
./airflow/www_rbac/compile_assets.sh: 26: ./airflow/www_rbac/compile_assets.sh: npm: not found
```

## 原因
[scripts/ci/kubernetes/docker/build.sh](https://github.com/apache/airflow/blob/1.10.3/scripts/ci/kubernetes/docker/build.sh#L45)の中で[scripts/ci/kubernetes/docker/compile.sh](https://github.com/apache/airflow/blob/1.10.3/scripts/ci/kubernetes/docker/compile.sh)を実行してcompileをするが、compile.shの中でnpmをインストールする処理が書かれていないため、npmコマンドが存在せずに実行できず、staticディレクトリが生成されない。

## 対策
[scripts/ci/kubernetes/docker/compile.sh](https://github.com/apache/airflow/blob/1.10.3/scripts/ci/kubernetes/docker/compile.sh)にnpmをインストールする処理を追加する。

```diff
diff --git a/scripts/ci/kubernetes/docker/compile.sh b/scripts/ci/kubernetes/docker/compile.sh
index 9a84d4d..6db842b 100755
--- a/scripts/ci/kubernetes/docker/compile.sh
+++ b/scripts/ci/kubernetes/docker/compile.sh
@@ -27,6 +27,6 @@ apt-get install -y --no-install-recommends curl gnupg2
 curl -sL https://deb.nodesource.com/setup_8.x | bash -

 apt-get update
-apt-get install -y --no-install-recommends git nodejs
+apt-get install -y --no-install-recommends git nodejs npm
 pip install GitPython
 python setup.py compile_assets sdist -q
```