SAP Kymaを使ってみる

この記事は [SAP Advent Calendar 2021](https://adventar.org/calendars/6252) の13日分の記事として執筆しています。
Advent Calendarは初めての執筆です。
今回はKymaを使ってみようと思います。
#Kymaとは
SAP BTPのランタイム環境はCloud Foundry、Kyma、ABAPの3つがあります。
KymaはSAPのKubernetesをベースとした開発プラットフォームです。
サーバレス、マイクロサービスを使用したアプリケーションの開発を容易にすることが出来ます。

##Kubernetes
https://kubernetes.io/ja/docs/home/

#前提条件
・SAP BTPのトライアルアカウントを取得済
・PCのOSはWindow10を使用

#今回の流れ
・SAP BTPのKyma Runtime環境を有効化
・ローカルにコマンドライン環境を作成
・ネームスペースを作成
・Functionを作成

本当はローカルのアプリをKymaに上げるところまでやりたかったですが長くなるのでFunctionを作って終わりとしています
kubectlのインストールを手順にはさみますが、今回やりたいことをやるだけなら画面から操作するだけで可能です。（必要に応じて読み飛ばしてください）
ローカルで作ったアプリなどをkymaに上げるとき、kubectlがあると便利だと思うのでまとめて準備してしまいました。

#SAP BTPに Kyma Runtimeを有効化する
こちらの記事に従ってBTPにKyma Runtimeを有効化してください
もしロールの割当後、エラーになる場合はキャッシュのクリア等行ってください

https://developers.sap.com/tutorials/cp-kyma-getting-started.html

#ローカルにコマンドライン環境を作成

こちらからcluster をインストール

https://cluster.mu/downloads

cmdからKubernetesのコマンドラインツールをインストール

```bash
curl -LO "https://dl.k8s.io/release/v1.23.0/bin/windows/amd64/kubectl.exe"
```

ちゃんとインストールできたか確認


```bash
kubectl version --client
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.0", GitCommit:"ab69524f795c42094a6630298ff53f3c3ebab7f4", GitTreeState:"clean", BuildDate:"2021-12-07T18:16:20Z", GoVersion:"go1.17.3", Compiler:"gc", Platform:"windows/amd64"}
```
Kymaの右上の**Get Kubeconfig**からconfigファイルをダウンロード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/01614006-d1f3-15b0-b7d2-30c70500ec6c.png)

Kubeconfigを設定して設定が反映されているか確認
"configファイルのファイルパス"はローカルにダウンロードした**kubeconfig.yml**のパスを設定

```bash
$ENV:KUBECONFIG="configファイルのファイルパス"
kubectl config get-contexts
CURRENT   NAME                                            CLUSTER                                         AUTHINFO   NAMESPACE
*         fad45d7.kyma.shoot.live.k8s-hana.ondemand.com   fad45d7.kyma.shoot.live.k8s-hana.ondemand.com   OIDCUser
```
#ネームスペースを作成

**dev**って名前のnamespace を作成

```bash
kubectl create namespace dev
namespace/dev created
```
devが作成されていることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/9854317a-6458-d277-f2f6-bb9514dca91f.png)
画面右上の**Add new namespace**からも同じように追加できます

#Functionを作成
ネームスペースのdevを選択して左のWorkloadsからFunctionを開く
**Create Function**を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/5e6ae15d-6500-ccff-35e2-b1ae47ee04f8.png)

Nameを入力してCreate
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/34564ac7-68f2-0081-afc1-addde8b2ebdc.png)

**Edit Environment Variables**を押下

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/62aa024c-0c1c-77c3-89a4-08e75572d0dd.png)

**Add Environment Variables**から環境変数を追加
今回は**MESSAGE**を追加
！が多くなっています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/89d6ec15-5858-922e-55c9-1254822e1ef1.png)

Souceを以下の通り変更してSaveを押下

```javascript
module.exports = { 
  main: function (event, context) {
    return "Hello " + process.env["MESSAGE"];
  }
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/385efb61-edd2-fbb9-b845-d701b266e511.png)

**Configuration**タブから**Expose Function**を押してAPI Rulesを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/ca0a405e-0435-7758-0163-8d6134eb9b28.png)

Name、Hostname、Access strategiesを設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/554bfddb-9a24-f127-8721-db8b6e3a054e.png)

HostしたのURLリンクをクリックするとプラウザに**Hello World!!!!**が表示されると思います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/2b339a42-afd5-242b-a7dd-578b67e56ac4.png)


#参考
https://blogs.sap.com/2021/01/15/kyma%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E6%8B%A1%E5%BC%B5%E9%96%8B%E7%99%BA-application-connector%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99/

https://blogs.sap.com/2020/12/17/kyma%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%B5%E3%83%BC%E3%83%90%E3%83%AC%E3%82%B9/

https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/