IBM Cloud Functions は、拡張性の高いサーバーレス環境でプログラムコードを実行してくれる IBM Cloud のサービスのひとつです。(以前は OpenWhisk と呼ばれていました)サーバーレス環境では、サーバーの構築や保守、負荷対策などの管理が一切不要になりますので、開発者はプログラムをつくることに集中できます。そこで今回は、IBM Cloud Functions(Python 3.7)を簡単に使う手順をまとめてみました。
アクション(関数)の作成
IBM Cloud Functions の「アクションの作成」は、他社のサーバーレスサービスで言うところの「関数の作成」とほぼ同じ意味です。シンプルな HTTPSリクエストで簡単にプログラムコードを実行できます。
IBM Cloud のコンソール にログインしたら、左上のハンバーガーメニューから「Functions」をクリックします。
「作成の開始」をクリックします。
Functions を作成する地域を選択します。(2018年12月16日時点では、日本を含むアジア圏のリージョンは選択できないようです)
「アクションの作成」をクリックします。
適当なアクション名を入力して、好みのランタイム(プログラム言語)を選択したら「作成」をクリックします。
下のようなコードをもつアクションが作成されます。
アクションの実行
作成したアクションを実行してみましょう。
左メニューの「エンドポイント」をクリックします。
CURLセクションのコピーアイコンをクリックすれば、アクションを実行できるコマンドが APIキー付きでコピーできます。(「API-KEY」の部分が実際のAPIキー変わってコピーされます)
コピーしたコマンドを実行してレスポンスのメッセージに「Hello world」と表示されていればOKです。(最後に付け足した「python -mjson.tool」は、JSON形式のレスポンスを見やすいように整形するためのコマンドです)
https://openwhisk.ng.bluemix.net/api/v1/namespaces/apar.jp_dev/actions/sample?blocking=true \
| python -mjson.tool
(略)
"response": {
"result": {
"message": "Hello world"
(略)
オリジナルのコードに変更
リクエストパラメーター「string」に指定した文字列を返すだけの、下のようなコードに変更してみます。
import sys def main(dict): string = dict['string'] return { 'message': string }
左メニューの「パラメーター」を選択して、「パラメーターの追加」をクリックします。
パラメーター名に「string」、パラメーター値に適当なデフォルト値を入力して「保存」をクリックします。(パラメーター値が数値以外の場合は、ダブルクォートで囲む必要があります)
左メニューの「コード」を選択して、オリジナルのコードを入力したら「保存」をクリックします。
コードが保存されたら「起動」をクリックしてテストします。
結果にパラメーターのデフォルト値が表示されていればOKです。
コードにエラーがある場合は、下のようなエラーログが表示されますのでデバッグすることもできます。
リクエストパラメーターの送信
リクエストパラメーターは、JSON形式で送信する必要があります。
curl コマンドの場合は -H オプションでコンテンツタイプJSONを指定して、-d オプションで送信するJSONオブジェクトを指定します。(リクエストパラメーターが多い場合はJSONファイルにして「-d @<JSONファイルのパス>」としてもよいでしょう)
-H 'Content-Type: application/json' \
-d '{"string":"Hello! IBM Cloud Functions"}' \
https://openwhisk.ng.bluemix.net/api/v1/namespaces/apar.jp_dev/actions/sample?blocking=true \
| python -mjson.tool
(略)
"response": {
"result": {
"message": "Hello! IBM Cloud Functions"
},
(略)
おわりに
IBM Cloud Functions のアクションは、Watson の各種APIの呼び出しにも使われているようです。以前「Watson Speech to Text の使い方 日本語音声をテキストに変換してみよう」の記事で作成した Speech to Text サービスのコードが確認できました。色々な Watson API のコードを見てみるのも面白そうですね(^^)
コメント