2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CAPで作ったサービスをKyma runtimeにデプロイ(1) 事前準備編

Last updated at Posted at 2022-08-20

はじめに

この記事は chillSAP 夏の自由研究2022、8/20の記事として執筆しています。

最近、以下のチュートリアルを実施してCAPで作ったサービスをKyma runtimeにデプロイしてみました。色々とつまずきはあったものの、最後まで実施することができました。

チュートリアルをやっている間はステップを追うことに専念していたので、この記事では以下を確認したいと思います。

  • CAPで作ったアプリをKymaにデプロイするにはどのような仕組みが使われているか
  • 一からアプリを作成してKymaにデプロイするには何が必要か

上記のチュートリアルでは、いくつかの操作を事前に用意されたスクリプトを使用して自動的に行っていました(おそらく時間短縮とエラー回避のため)。それゆえに、裏で何が行われているかわかりにくかったので、この記事ではそれらの操作をマニュアルで実施してみます。

シリーズの目次

  1. 事前準備(この記事)
  2. 基本的なCAPアプリを作成してKyma runtimeにデプロイ
  3. 認証を追加
  4. UIを追加してLaunchpadにデプロイ

CAPで作ったサービスをKyma runtimeにデプロイする仕組み

Kyma runtimeへのデプロイの基本的な流れ

Kyma runtimeへデプロイするための基本的な流れは以下のとおりです。

  1. 作成したプロジェクトと実行環境をセットにしたDockerファイルを作成
  2. Dockerイメージを作成してDocker Hubなどのレジストリにプッシュ
  3. Dockerイメージを参照するデプロイ用のyamlファイルを作成
  4. yamlファイルを使用してKyma runtimeにデプロイ
    image.png

以下はKyma runtimeのCommunity Code Challengeで作成した簡単なサービスのデプロイ用yamlファイルです(CAPではありません)。中を見ると、---で区切られた3つのリソース(Deployment, Service, APIRule)から構成されていることがわかります。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-service2
  labels:
    app: my-service2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-service2
  template:
    metadata:
      labels:
        app: my-service2
    spec:
      containers:
      - name: my-service2
        image: docker.io/miyasuta/my-service:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
        resources:
            limits:
              ephemeral-storage: 256M
              memory: 256M
              cpu: 100m
            requests:
              cpu: 100m
              ephemeral-storage: 256M
              memory: 256M
      imagePullSecrets:
      - name: regcred
status: {}
      
---
apiVersion: v1
kind: Service
metadata:
  name: my-service2
spec:
  selector:
    app: my-service2
  ports:
  - port: 8081
    targetPort: 8080
    protocol: TCP

---

apiVersion: gateway.kyma-project.io/v1alpha1
kind: APIRule
metadata:
  name: my-service2
spec:
  gateway: kyma-gateway.kyma-system.svc.cluster.local
  service:
    name: my-service2
    port: 8081
    host: my-service2
  rules:
    - path: /.*
      methods: ["GET"]
      accessStrategies:
        - handler: noop
          config: {}

このファイルを使ってデプロイすると、DeploymentをもとにPodができ、またPodを参照するService、Serviceを参照するAPIRuleができます。

  • Pod: アプリケーションを動かすための最小単位。一つまたは複数のDockerコンテナで構成される
  • Service: Podで稼働するサービスを公開するためのもの。(Podは複数作成できるが、一つのサービスとして透過的にアクセスできるようにする)
  • APIRule: Serviceに対してアクセスポリシーなどを設定し、外部から利用できるようにする

image.png

CAPの場合

CAPの場合、データベース(HANA Cloud)へのアクセスや認証のためのXSUAAサービスインスタンスなど、追加のリソースが必要になります。それらをデプロイするためのyamlファイルを毎回手で作成するのは大変なので、Helmというツールを使います。

Helmを使用するために、yamlファイルを作成するためのテンプレートと、テンプレートに値を設定するためのvalues.yamlというファイル用意する必要があります。CAPではcds add helmというコマンドで自動的にテンプレートとvalues.yamlファイルを生成できます。開発者が設定するのはvalues.yamlファイルのみです。設定ができたらHelmのコマンドでKubernetes(Kyma runtime)にデプロイします。
image.png

一からアプリを作成してKymaにデプロイしてみる(事前準備編)

開発環境

  • VS Code
  • BTPトライアルアカウント(Kyma runtimeを有効化済)

事前準備のステップ

  1. 環境設定
  2. HDIコンテナおよびシークレットの作成

1. 環境設定

以下のチュートリアルに沿って必要なツールのインストールやKyma runtimeの設定を行います。

概要は以下です。

インストールするもの

  • @sap/cds-dkと@sap/cds-dkの最新バージョン(いずれも6.0.1以上)
  • kubectl
  • kubelogin
  • helm
  • pack
  • Docker Desktop
  • Rancher Desktop(DockerかRancherを選択する)

ローカルでの設定

  • Kyma runtimeから接続用のコンフィグファイルをダウンロード

Kyma runtimeでの設定

  • サービスをデプロイするためのnamespaceを作成
  • Dockerレジストリにアクセスするためのシークレットを作成

※今回namespaceはcapkymaという名前で作成しました。

2. HDIコンテナおよびシークレットの作成

xsuaaやdestinationのサービスインスタンスはKyma runtimeからも作ることができますが、HANA CloudのHDIコンテナは作ることができません。そこで、Cloud FoundryでHDIコンテナのサービスインスタンスを作成しておき、Kyma runtimeからアクセスできるようにシークレットをKyma側に作成します。
チュートリアルではスクリプトを使って実施していましたが、ここでは何をしているのかわかるようにマニュアルで実施してみます。

image.png

2.1. HDIコンテナの作成

CLIでCloud Foundryにログインし、以下のコマンドでHDIコンテナを作成します。(前提として、HANA Cloudのサービスインスタンスが起動していること)

cf create-service hana hdi-shared <サービス名>

例
cf create-service hana hdi-shared capkyma-db

2.2. サービスキーの作成

cf create-service-key <サービス名> <サービスキー名>

例
cf create-service-key capkyma-db capkyma-db-key

2.3. シークレットの作成

2.3.1. サービスキーの表示

以下のコマンドで作成したサービスキーを表示します。

cf service-key <サービス名> <サービスキー名>

例
cf service-key capkyma-db capkyma-db-key
2.3.2. yamlファイルの作成

サービスキーの内容を参照して、以下のようなyamlファイルを作成します。ファイル名は何でもよいです。typelabelは固定値(hana)で、その他はサービスキーから設定します。

secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: capkyma-db
type: Opaque
stringData:
  type: hana
  label: hana
  url: jdbc:sap://d6b507e7-ef9c-46ad-9269-22a2b982188c.hana.trial-eu10.hanacloud.ondemand.com:443?encrypt=true&validateCertificate=true&currentschema=32A9C5EA390F49C4A19410B001541306
  certificate: |
    -----BEGIN CERTIFICATE-----
    MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
    ...
    YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
    CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
    -----END CERTIFICATE-----
  database_id: d6b507e7-ef9c-46ad-9269-22a2b982188c
  driver: com.sap.db.jdbc.Driver
  hdi_password: xxxxxx
  host: d6b507e7-ef9c-46ad-9269-22a2b982188c.hana.trial-eu10.hanacloud.ondemand.com
  hdi_user: 32A9C5EA390F49C4A19410B001541306_AMSMNC2G4WVWQUPJ9C1NA82OY_DT
  password: xxxxxx
  port: "443"
  schema: 32A9C5EA390F49C4A19410B001541306
  user: 32A9C5EA390F49C4A19410B001541306_AMSMNC2G4WVWQUPJ9C1NA82OY_RT  

yamlファイルを作成する際の注意点が2つあります。

  • portの443はクォーテーションで囲む
  • certificateは改行して設定する
    サービスキーには以下のように1行でcertificateが設定されていますが、"\n"のところで改行して設定する必要があります。
"-----BEGIN CERTIFICATE-----\nMIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nxxxx-----END CERTIFICATE-----"

Terapadで改行を入れることができます。
①"\n"を"あ"などcertificateにない文字に置換する。"\n=改行"のチェックボックスは外しておく
image.png
②"あ"を"\n"に置換する。"\n=改行"のチェックボックスをつける
image.png
結果、以下のような形になります。
image.png

2.3.3. Kyma runtimeにシークレットを作成

以下のコマンドでシークレットを作成します。

kubectl apply -f <ファイル名>

以下のメッセージが出れば成功です。

secret/capkyma-db created

Kyma runtimeに作成したnamespaceにシークレットができていることが確認できます。
image.png

事前準備は以上です。次回は基本的なCAPアプリを作成してKyma runtimeにデプロイしてみます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?