Codewindとappsodyを使ってNode.jsのアプリケーションを5分でK8sにデプロイする

# 初めに
2019年12月5日に[IBM から始まった新しいオープン・ソース・プロジェクト Kabanero を使用して、Kubernetes 対応のクラウド・ネイティブ・アプリを迅速に構築する](https://developer.ibm.com/jp/2019/12/05/cloud-native-apps-kubernetes-kabanero/?cmp=dw&cpb=dW&ct=dwrss&cr=dwrss&ccy=jp&csr=120619)という記事が公開されています。(この記事は[「Build cloud-native apps faster for Kubernetes with Kabanero, a new open source project from IBM（2019年7月16日公開）」](https://developer.ibm.com/blogs/cloud-native-apps-kubernetes-kabanero/)の翻訳です。)
K8sに興味津々だけど、その難しさに阻まれてきた私にとって、面白そうなOSSプロジェクトのようです。
公式HPは[こちら](https://kabanero.io/)
[IBM Cloud Pak for Applications](https://www.ibm.com/jp-ja/cloud/cloud-pak-for-applications)にも使われているそうです。

![kabanero.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154110/770e1a1b-3355-b55c-512d-0efea6f604ff.png)

# Kabaneroって何？
**以下は上記のサイトの引用です。**

## すでに身に付けたスキルを使って Kubernetes アプリケーションを作成できます
> Kabanero を使用する場合、DevOps 手法を習得したり、ネットワーキング、Ingress、セキュリティーなどの Kubernetes インフラストラクチャーに関するトピックを習得したりするのに時間を費やす必要はありません。Kabanero は Kubernetes のネイティブ DevOps ツールチェーンに、開発者が使い慣れているランタイムとフレームワーク (Node.js、Java、Swift) を統合するからです。Kubernetes と Knative への (Operator と Helm チャートを使用して) 事前ビルドされたデプロイメントは、ベスト・プラクティスに基づいています。

## Kabanero を選ぶ理由
> 現在の市場に Kabanero のようなプロジェクトはありません。Kabanero が対処する個々の側面に対処するオープン・ソース・プロジェクトはありますが、コンテナー化されたクラウド・ネイティブ・アプリケーションの作成から本番環境の Kubernetes 上でのライフサイクルまでのすべてを操作できるオープン・ソース・プロジェクトは Kabanero しかありません。
Kabanero を使用することで、開発チームはあらかじめコンテナーと Kubernetes の専門知識を身に付けなくても、Kubernetes にデプロイできる状態のアプリケーションを構築できます。したがって、組織がクラウドへの移行においてレガシー・インフラストラクチャーから最新式インフラストラクチャーに移行する際に開発者が越えなければならない障壁が低くなります。

## ドキュメントを読んだ時の感想
一介のWebアプリケーションエンジニアにとって、この響きはとても魅力的に見えます。**作成したアプリケーションを迅速かつ、堅牢な環境で動かしたいでも、面倒な設定は出来るだけ避けたい**、というニーズを汲み取ってくれていると思います。

# というわけで、Node.jsのデプロイまでやってみた。
[Developer向けのページ](https://kabanero.io/developer/ide/)と、[youtube動画](https://www.youtube.com/watch?v=Ri7RJ5XyY60&feature=youtu.be)に詳細があります。
> You can go from zero to application running in Knative/Kubernetes in under 5 minutes, working only with the app code - no tinkering with Dockerfiles, no learning Kube and Kube Yaml, no non-sense.

要するに
##### 0から初めて5分で、Knative/Kubernetes上で稼働するアプリケーションが作れますよ！必要なのは、アプリケーションのコードだけで、DockerfileやK8sのyamlを意識することもないですよ！
だそうです。すごい。

## というわけでやってみた。
どうやら`Eclipse`または`VS Code`が使えるようです。今回は`mac` & `VS Code`で行きましょう。
※以下は、youtubeで公開されている動画の手順を参考にしています。

### 前提
`docker for mac`で`Kubernetes`が有効であること。

### appsodyをinstallする。
appsodyはK8sにデプロイするときに使用する、CLIツールのようです。詳しくは[こちら](https://appsody.dev/)
[こちらの手順](https://appsody.dev/docs/getting-started/installation)に従って、`appsody`をインストールします。
私の場合は、

```sh
brew install appsody/appsody/appsody
```
だけで大丈夫でした。

```sh
appsody list
```

とうって、下記のようになれば良いようです。

```sh
$ appsody list

REPO            ID                              VERSION         TEMPLATES               DESCRIPTION                                              
experimental    java-spring-boot2-liberty       0.1.11          *default                Spring Boot on Open Liberty & OpenJ9 using Maven         
experimental    nodejs-functions                0.1.6           *simple                 Serverless runtime for Node.js functions                 
experimental    quarkus                         0.2.2           *default                Quarkus runtime for running Java applications            
experimental    rocket                          0.1.0           *simple                 Rocket web framework for Rust                            
experimental    rust                            0.1.4           *simple                 Runtime for Rust applications                            
experimental    vertx                           0.1.4           *default                Eclipse Vert.x runtime for running Java applications     
*incubator      java-microprofile               0.2.21          *default                Eclipse MicroProfile on Open Liberty & OpenJ9 using Maven
*incubator      java-spring-boot2               0.3.19          *default, kotlin        Spring Boot using OpenJ9 and Maven                       
*incubator      kitura                          0.2.3           *default                Runtime for Kitura applications                          
*incubator      nodejs                          0.2.5           *simple                 Runtime for Node.js applications                         
*incubator      nodejs-express                  0.2.10          scaffold, *simple       Express web framework for Node.js                        
*incubator      nodejs-loopback                 0.1.8           *scaffold               LoopBack 4 API Framework for Node.js                     
*incubator      python-flask                    0.1.6           *simple                 Flask web Framework for Python                           
*incubator      starter                         0.1.1           *simple                 Runnable starter stack, copy to create a new stack       
*incubator      swift                           0.2.3           *simple                 Appsody runtime for Swift applications 
```

### VS Codeの拡張(Codewind)をインストールする
特に変わったところはありません。`Codewind`をインストールしましょう。
![スクリーンショット 2019-12-09 17.53.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154110/8b9eb075-d617-bc60-f2b5-376427f7359c.png)
#### インストール完了後
`CODEWIND`が追加されています。
![スクリーンショット 2019-12-09 17.56.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154110/747cd28e-3950-79de-3d38-fd63781467fd.png)

### テンプレートを展開します。
下記の様な手順となります。
1. CodeWindの起動
2. プロジェクトの追加
3. `Kabanero Node.js Express Simple template`を選択(選択画面右上よりSouce Managerを押下してKabaneroを選択しておく)

以上です。

下記の様な概要画面が表示されると思います。
![スクリーンショット 2019-12-09 18.56.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154110/1d4f1b08-98af-283a-b36f-4b0af697eb5d.png)

`Application Endpoint`の通り、

```
http://127.0.0.1:32776/
```
にアクセスすると下記の画面が表示されます。ソースコードを変更すると、リアルタイムに反映されます。
![スクリーンショット 2019-12-09 18.57.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154110/2627bc75-83a1-5db0-68b7-af265f7581c3.png)

### Applicationモニタなどの見方
該当のプロジェクトを右クリックすると、いくつかのコンテキストメニューが表示されます。
![スクリーンショット 2019-12-09 18.58.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154110/74d80b06-5764-308e-5242-0d5db86c45a5.png)

#### Applicationモニタ
![スクリーンショット 2019-12-09 19.00.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154110/ef8059ea-9ccc-2b14-5b52-eb95a6216fe6.png)

#### Performanceモニタ
![スクリーンショット 2019-12-09 19.01.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154110/50239131-bfc4-fc20-309f-b82348bf4cc8.png)

まだ、よく見方はわかりませんがモニタリングもうまくできている様です。

### K8sへのデプロイ
```sh
appsody deploy
```
で完了です。

```
Deployed project running at http://localhost:31781
```

というメッセージが出ているので、`http://localhost:31781`にアクセスすると、確かに稼働していることが確認できます。

## まとめ
謳い文句にある様に、確かにK8sへのデプロイまですぐに対応できました。`VS Code`との親和性も高いのは良いですね！
他にも多くの機能がありそうなので、こちらもドキュメントを見ながら検証をしてみようと思います。

## 参考リンク
[Kabanero 公式ページをざっと翻訳してみた (2019年8月版)](https://qiita.com/yamachan360/items/7b4a53758ecdbe876a5f)
[Kabanero Developer Experience 公式ページもざっと翻訳してみた (2019年8月版)](https://qiita.com/yamachan360/items/1550887f76f3a0a8f47d#_reference-af0275aaaa738c609696)