逆引き！TAPではこんなことができるよ

こんにちわ！TUNA-JPの運営メンバーをしている @hirosat です。
本記事は、「[TUNA-JP Advent Calendar 2022](https://qiita.com/advent-calendar/2022/tuna-jp)」の3日目のエントリです。
（実は、本業が忙しくなってきて、執筆当日になってバタバタしながら書いてます。。ひぇぇ）

# TL;DR (この記事の要約)
- VMware Tanzu Application Platform (以下、TAP) では、こんなことができるよ！を、ちょっとご紹介

# この記事の狙い

[Advent Calender 2日目](https://qiita.com/hirosat/items/7b1104110e339dfbacf4) では、TAPには色んなOSSが使われていることをご紹介させていただきました。
その後、恐らく次に思うことは、「で、結局それらを使ってどんなことができるんよ？」なのではないかと思います。VMwareからもいくつかTAPの記事がでていますが、「何か凄そう！」と思える記事はあるけど、具体的にはどう使われるかがイメージできる記事がないのでは？と思いました。

なので本記事では、そんな疑問に解消するため、逆引き形式で紹介しようかなと思いました。
前提として、全体像は2日目にご紹介したこの画像に集約されていますので、これを頭の隅に入れておいてください。


![Screen Shot 2022-11-26 at 17.11.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18601/9bf2c423-f994-6fef-94fd-e1945cb8d6aa.png)

※. 上記はTAP1.3時点の構成です。今後のバージョンアップによって変わる可能性があります。
また、思いつく限り書いてみましたが、完全に全機能を網羅できていない可能性もあります。

# 逆引き: TAPでできること
※. 以下、基本的には、肯定的な答えになるよう、仕向けています・・ｗ
## Software Supply Chain を構成するOSS
### ★ 開発者にとって・・・
#### ソースコードを書いたら、いい感じにKubernetesアプリケーションにして欲しい
できます！必要最低限なステップは、これだけです。
1. Github等のGitレポジトリにソースコードをあげる
1. CLI で `tanzu apps workload apply 引数` と実行し、対象のGitレポを指定

後は、TAPがソースコードをコンテナ化してくれて、Kubernetes上にアプリケーションとしてデプロイされ、URLが払い出されて公開までしてくれます。(参考: [Deploy an App](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.3/tap/GUID-getting-started-deploy-first-app.html))

#### そうは言っても、どんなコードを書けばいいのか分からないけど、雛形とかあるの？
あります！
[Deploy an App](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.3/tap/GUID-getting-started-deploy-first-app.html) のドキュメント内ではそこから解説しています。
具体的には、TAPが提供するGUIのAccelerators のページに進み、10数種類ある雛形の中から自分のイメージに合うものを選択し、サンプルをダウンロードします。
それをGitレポジトリに置き、少しずつ自分のアプリの仕様に合わせて編集していきましょう。

#### ソースコードを改良するたびに、毎回パイプラインに投入するコマンドを打つの？
違います！ (あ、やべ、否定してしまった・・ｗ)
`tanzu apps workload apply 引数` を打つのは、Gitレポジトリを登録する初回のみです。
その後は、git commit & push するだけで、改良したコードを元に、新しいアプリケーションが自動的にデプロイされて公開されます。

#### パイプラインが今どんな処理を行っていて、どこでエラーがでたかを見る方法はあるの？
複数あります！
1. TAP GUIから`Workload`メニューに進み、自分のアプリケーションがパイプラインを通る様子を視覚的に確認できます
1. `tanzu apps workload get APP名` で、現在の状態の概要を確認できます
1. `tanzu apps workload tail APP名` で、ジョブ投入後の各フェーズの詳細なログを確認できます

#### パイプラインを通って、デプロイされた後のアプリの状態を確認する方法はあるの？
あります！
ただし、TAP GUIのHomeメニュー内で、自分のアプリケーションをカタログとして登録する必要があります。
[Deploy an App](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.3/tap/GUID-getting-started-deploy-first-app.html) のドキュメント内の、[Add your Application...](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.3/tap/GUID-getting-started-deploy-first-app.html#add-your-application-to-tanzu-application-platform-gui-software-catalog-3)のところで、解説しています。


### ★ 運用者にとって・・・
#### CI/CDパイプラインを作ったことないけど、簡単に開発者にパイプラインを提供できる？
できます！
具体的には、[TAPのインストール](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.3/tap/GUID-install.html) に従い、導入するだけです。
TAPには、3種類のOOTB(Out of the box = すぐに使える) Supply Chain というものが用意されており、
初期設定では、最も基本的なOOTB Supply Chain Basic というCI/CDパイプラインが利用可能な状態となります。
なお、OOTB Supply Chain Basic では、以下の処理を行ってくれます。
1. Gitレポからソースコードを取り込み (Flux)
1. コンテナイメージのビルド (kpack)
1. Kubernetesに必要なコンフィグの設定
1. アプリのデプロイ (knative)

#### 図には、テストとかスキャンが入ってるけど、これも簡単に導入できるの？
できます！
それが残りの2種類のOOTB Supply Chainです。
1. OOTB Supply Chain Basic: `Git取り込み` + `ビルド` + `設定` + `デプロイ`
1. OOTB Supply Chain Testing: 1に加え、`Tekton で Test` が追加
1. OOTB Supply Chain Testing & Scanning: 2に加え、Grype で`ソースコード Scan` と `コンテナ Scan` が追加

変更方法は、[Add testing and scanning](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.3/tap/GUID-getting-started-add-test-and-security.html) を御覧ください。

### 図には、Jenkinsとかも出てきてるけど、これらにも変更できるの？
できます！
デフォルトで使われるOSSは、前の質問の通りですが、以下のドキュメントで入れ替えることができます。
- [Jenkins](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.3/tap/GUID-scc-ootb-supply-chain-testing-with-jenkins.html)
- [Kaniko](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.3/tap/GUID-scc-dockerfile-based-builds.html)
- [Snyk](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.3/tap/GUID-scst-scan-install-snyk-integration.html)

## 開発支援ツールで使われるOSS
※. 開発支援ツールの話なので、そもそも対象が開発者となります。

#### Supply Chainが通ってデプロイされるのを待つのがダルい。。もっと簡単に動作確認する方法はないの？
あります！
ただし、Java アプリケーション + VS code IDE 限定です。
TAPの [Developer Conventions](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.3/tap/GUID-developer-conventions-about.html) という機能によって実現します。または、`Live Update`と呼ぶこともあります。
具体的には、IDE上で変更した内容を、OSSのTiltと連携して、リアルタイムでKubernetes上のPodに反映して動作確認できます。Gitレポにあげる前段階として、この機能でしばらくデバッグを続け、コード内容がFixしたら、TAPのSupply Chainに反映するような使い方が想定されます。
使い方は、[Iterate on your App](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.3/tap/GUID-getting-started-iterate-new-app.html) をご参照ください。


#### Supply Chainでデプロイされたアプリに対して、Threadやアクセス数を解析する方法ある？
あります！
ただし、Spring Boot(と[Steeltoe](https://steeltoe.io/)) アプリケーション 限定です。
TAPの [Application Live View](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.3/tap/GUID-tap-gui-plugins-app-live-view.html) という機能によって実現します。
先ほど、自分のアプリケーションをカタログとして登録する方法を紹介しましたが、対応アプリの場合、Live Viewという項目が現れ、そこから確認可能です。


## デプロイ支援ツールとして利用されるOSS
#### 複数のアプリをサブドメインで振り分けたい
できます！
（というより、TAPでの標準的な使い方として、そのような仕様になっています。）
OSSのContourによって実現されます。

#### PodのScale-to-zero、Scale-from-zeroを実現したい
できます！
（というより、TAPでの標準的な使い方として、そのような仕様になっています。）
OSSのknativeによって、podがAuto scalingします。
しばらくアクセスがなかったら0pod状態になり、その状態からアクセスリクエストによってPodを起動、といったことが実現できます。もちろん、0podが嫌な場合、最小1podみたいな設定も可能です。

#### アプリをTLS対応したい
できます！
OSSのcert-managerにより、自動でhttps対応したり、証明書の自動更新といったことが可能です。

# あとがき
本当は、もっといっぱい機能があるので紹介したかったですが、1記事としてのボリュームを考えると、ここら辺でやめておきます。図もいれたかったけど、タイムアップですね。。

自社のコンテナ開発・生産体制に停滞を感じている場合、TAPの導入をご検討してみてはいかがでしょうか？