【SAP CP】CF環境にpythonで作るWebAPI


はじめに

この記事は SAP Advent Calendar 2020 の12月15日分の記事として執筆しています

今回は、Phthon で WebAPI を作成して、CF環境上で動かしてみたいと思います。
python歴3日くらいでも WebAPI が作成できました。

STEP 1: WebAPI を Python で作ろう

今回のプログラムで使用するモジュールのインストール準備をします。

まずは、一括インストール用に「requirements.txt」を準備します。
このファイルを利用すると、異なる環境間でのPython パッケージを管理し
必要に応じてインストールすることが出来ます。

requirements.txt
Flask==0.12.2
flask-cors

requirements.txt を保存後は、python の パッケージ管理ソフトを使用して
必要なモジュールのインストールをします。

$ pip install -r requirements.txt

CF環境で使用するPython のバージョンを指定します。

runtime.txt
python-3.6.12

CF環境のデプロイ定義ファイルを作成します。
<アプリ名> には、CF環境へデプロイ時のアプリケーション名を指定します。

manifest.yml
applications:
- name: <アプリ名>
  path: .
  memory: 256M
  command: python server.py

WebAPI をPython で作りたいと思います。
以下にコードを記載しています。

server.py
import os
import json
import pickle
from flask import Flask, request, abort
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

port = int(os.environ.get('PORT', 3000))


@app.route('/')
def hello():
    return "Hello World"


@app.errorhandler(404)
def error_not_found(error):
    result = "{\"message\": \"pickle file not found\"}"
    return result, 404


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=port)

STEP 2: CF環境へデプロイ

CF環境へ作成したプログラムをデプロイします。
ここでは、トライアル環境へアップしてみます。

実行環境を指定してログインします。

$ cf api <APIエンドポイント>

ここで指定する は、SAP Cloud Platform Cockpit から確認出来ます。

接続に成功すると、email とパスワードで認証が入ります。
登録した email とパスワードを使用してログインします。

接続先の組織を指定します。

ここで指定する <組織> も、SAP Cloud Platform Cockpit から確認出来ます。

デプロイ先のCF環境が指定できましたので、CF環境へデプロイします。

cf push <アプリ名>

STEP 3: 実行

デプロイに成功すると、SAP Cloud Platform Cockpit にアプリケーションが追加され
Status が RUNNING と表示されています。

では、作成したAPIを実行しましょう。
Application Routes に記載された URL をクリックします。

今回は '/' へアクセスすると動くように作成しているので
成功すると以下のような画面が表示されます。

最後に

今回は Python3.6.12 を使用していますが、CF環境で利用できる PHPのバージョンは変動するようです。
過去に自分が試作したときは、Python3.5.10 を使用していたのですが
今回の投稿に向けて、CF環境へ同じプログラムのデプロイを試みようとしたところ、Python3.5.10 は利用出来なくなっていました。
あまり古いバージョンのPythonは、利用しないほうが良いかもしれません。

参考URL