Tanzu Application Platformがついにリリースされた！

2021年10月開催のVMworld2021で発表されたTanzuApplicationPlatformが
2022/1/12に正式に1.0としてリリースされました。

- 記事は[こちら](https://blogs.vmware.com/vmware-japan/2022/01/tanzu-application-platform.html)

本稿は、VMworld2021での内容と[記事](https://blogs.vmware.com/vmware-japan/2022/01/tanzu-application-platform.html)および、下記のドキュメントを参照して記載しております。

- https://docs.vmware.com/en/Tanzu-Application-Platform/1.0/tap/GUID-overview.html

### Tanzu Application Platformとは？
アプリケーションをkubernets上にデプロイするまでに必要な色々を登録した内容に沿ってある程度自動で実行してくれる製品。
Tanzu Application PlatformはCartographer[^1]をベースにしているようです。
[^1]: CartographerはKubernetesに対する"Supply Chain Choreographer"なオープンソース

発表された記事では、以下のように記載されています。

> この製品は、 Kubernetes 上でクラウドネイティブ アプリケーションを構築しデプロイする企業に対して優れた開発者体験を提供するものです。また、開発者とオペレーターの役割を明確に定義することでお互いが協調して作業できるよう支援します。
> Kubernetes ディストリビューション上で稼働するコンテナアプリケーションの開発からデプロイまでのプロセスを効率化する製品です。

### なぜTanzu Application Platform?
もともとの構想として、Tanzu Application Serviceが実現していた`cf push`によるアプリケーションのデプロイは非常に魅力的でしたが、kubernetsに対応していませんでした。（PaaSの誕生がk8s以前であることによるもの）

また、PaaSは"12 Factor App"に沿ったステートレスなアプリであること、CaaS(Container as a Service)/KaaS（Kubernets as a Service)に比して制約が強いため、動作させるのが難しい既存のワークロードが多数存在してしまう、という点も制約事項としてありました。

k8sにアプリケーションをデプロイする、という行為には下図のような手順が必要であることが多いと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922657/acb81211-2b9a-e39d-fe77-e49aeccf61c2.png)
TanzuApplicationPlatformは、コード作成以降からアプリケーション実行までの途中をサプライチェーンという形で提供し、より開発者がソフトウェア開発に多くの時間を費やすことができるようにすることを目的としているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922657/342fc3a8-b21a-987a-3db2-7af540cd957e.png)

### Tanzu Application Platform の特徴
下記の特徴があげられています。

- 開発生産性の向上
- カスタマイズ可能な柔軟なサプライチェーン
- 本番環境への移行を加速

#### 開発生産性の向上

- クラウドネイティブのパターンを事前に定義したテンプレートを使用してアプリケーションの開発を迅速に開始
- サービスや API を 1 つの管理ポータルにまとめるための一貫した GUI を提供
  - 他のアプリケーションの発見と統合が容易に
  - IDE から直接コードの迅速な反復とデバッグのための開発者ツールに即座にアクセス可能

これらすべての先進的な機能により、開発者はコードの変更、ビルド、デプロイ、反復を迅速に行うことが可能に

#### カスタマイズ可能な柔軟なサプライチェーン
Tanzu Application Platform には、エンドツーエンドのサプライチェーンが組み込まれており、各コンポーネントはシームレスに連携できるようあらかじめ実装されているそうです。

サプライチェーンは自社の標準的なプロセスに合わせてカスタマイズすることも可能で、下図のようなイメージとなるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922657/b3f99d96-ffbc-58be-18d4-876a25b5e37b.png)

この柔軟さによって、本番環境へのパスに沿って署名、スキャン、保存のための機能を挿入するなど、特定のセキュリティ対策を定義することも可能とのことで、ソースコードからURLまでシームレスなサプライチェーンが自動的に構築されるため、開発者の負担が軽減されるとともに、より強力なセキュリティ対策を実施することが可能なようです。

Tanzu Application Platform では、[VMware Tanzu Build Service](https://tanzu.vmware.com/jp/build-service) が [Cloud Native Buildpacks](https://buildpacks.io/) を使用して、検証済みのビルディングブロックからコンテナを自動的に作成、更新が可能なようです。
Tanzu Build Service のユーザーは、実行イメージに環境変数を追加しその上に構築されたすべての既存アプリケーションをリベースすることで、簡単に脆弱性を緩和することが可能となっているようです。

#### 本番環境への移行を加速
- アプリケーションの開発から本番環境へのシームレスな引き渡しのために、DevSecOps の間に明確な分離を確立
  - 開発者がコードをコミットする（例：「git push」）だけでよい
  - 開発者がコードをコミットすると、ソフトウェアのセキュアなサプライチェーンが自動的に開始
  - 本番環境への継続的なパスを提供
- 環境に合わせた拡張性とツールを備えており、コードを迅速かつ継続的に本番環境へ移行することが可能

### インストール要件
#### Tanzu NetworkおよびContainer Image Registryに関する要件
- Tanzu ApplicationPlatformパッケージをダウンロードするためのTanzuNetworkアカウント
- https://registry.tanzu.vmware.com へのネットワークアクセス
- アプリケーションイメージ、ベースイメージ、およびランタイム依存関係を格納するContainerImageRegistry
  - 一部の無料レジストリ製品に関連する潜在的なレート制限回避のために、有料レジストリアカウントの使用をお勧め
- Tanzu Build Serviceを利用する場合、オプションにより下記
  - lite：1GB以上の使用可能なストレージ領域
  - full：10GB以上の使用可能なストレージ領域
      - 本番環境およびオフライン環境での利用を想定する場合はこちらを指定

#### DNSレコード(Option)
特定のコンポーネントを使用する場合にDNSレコードを割り当てる必要がある、とドキュメントにありますが「Tanzu Application Platform GUI」は利用することになると思われるため、ほぼ必須要件と思われる。

- Cloud Native Runtimes（knative）
  - 開発者のアプリケーションにワイルドカードサブドメインを割り当て
- Tanzu Learning Center
  - Cloud Native Runtimesと同様に、ワークショップとコンテンツにワイルドカードサブドメインを割り当て
- Tanzu Application Platform GUI

#### Tanzu Application Platform GUI
- Tanzu Application Platform GUIのソフトウェアカタログのGitリポジトリと、読み取りアクセスを許可するトークン
- Tanzu Application Platform GUI Blank Catalog(Tanzu NetworkのTanzu Application section)
- カタログ情報を保存するための2つのアプローチ
  - デフォルトのオプション
     - インメモリデータベースを使用
  - 実稼働のユースケース
     - Tanzu ApplicationPlatformパッケージの外部に存在するPostgreSQLデータベースを使用(永続化可能)

#### Kubernetesクラスタ要件
- 次のKubernetesプロバイダーのいずれかでKubernetesクラスターバージョン1.20、1.21、または1.22
  - AzureKubernetesサービス
  - Amazon Elastic Kubernetes Service
  - Google Kubernetes Engine
      - GKE Autopilot clustersは必要な機能が有効化されていない
  - Minikube
      - 以降で記載するリソース要件参照
      - HyperkitドライバーはmacOSでのみサポート。Dockerドライバーはサポートされていない
  - vSphere with Tanzu v7.0 U3a

#### リソース要件
TanzuApplication Platformパッケージをデプロイするには、クラスターに少なくとも次のものが必要

- Tanzu Application Platformコンポーネントで利用可能なi9（または同等のもの）用の8つのCPU
- Tanzu Application Platformコンポーネントで利用可能なi7（または同等のもの）用の12個のCPU
- Tanzu ApplicationPlatformで利用可能なすべてのノードで8GBのRAM
- Minikubeを含むアプリケーションの構築と展開には12GBのRAMを使用可能
  - 最適なエクスペリエンスを実現するには、16GBのRAMをお勧め
- ノードあたり70GBのディスク容量

[full profile](https://docs.vmware.com/en/Tanzu-Application-Platform/1.0/tap/GUID-install.html#full-profile)、Security Chain Security Tools - Storeを利用する場合は、クラスタにデフォルトのStorageClassが構成されている必要がある。

### Tanzu Application Platform GUI authentication provider
Tanzu Application Platform GUIは、[Backstage’s authentication plug-in](https://backstage.io/docs/auth/)を拡張して、インストール時に構成された認証プロバイダに基づいたログインページを表示できるようになっているようです。

現時点で利用可能な認証プロバイダは下記のようです。

- Auth0
- Azure
- Bitbucket
- GitHub
- GitLab
- Google
- Okta
- OneLogin

### 終わりに
今回はTanzu Application Platformについて、どのような製品なのか、インストール要件、利用可能な認証プロバイダについてVMwaraのドキュメントを確認して記事としてみました。

動作デモを見てみたい人向けには、実際にインストールして試しているサイトがあるので確認してみてください。

- [Tanzu Application Platform 0.3 (Beta-3) をKindにインストールし"Source to URL"を試すメモ](https://ik.am/entries/669)

実際に触るところまではできていないので、認証プロバイダを利用して複数のユーザでログインした場合に、どのようになるのかが非常に気になるところです。ドキュメント上では、そこまでは記載がなかったため、実際に触ることができたら記事化したいと思います。