目次


OpenWhisk アクションを呼び出す

developerWorks サンドボックスから IBM Cloud にコードをデプロイした後の手順

Comments

インタラクティブ・コード: コードのトップで実行ボタンがある場合、実行を押した後、結果を確認し再度実行してください。 デプロイボタンがある場合、コードをdeveloperWorksのIBM Cloudアカウントにデプロイすることができます。

この記事では、developerWorks サンドボックスから IBM Cloud にコードをデプロイした後、その OpenWhisk アクションにアクセスする 4 つの方法を説明します。けれどもその前に、OpenWhisk の基本をおさえ、新しくデプロイしたコードをどのように使用できるかを見ていきましょう。

OpenWhisk の基本

OpenWhisk は、サーバーレス・コンピューティングのためのオープンソース・プラットフォームです。サーバーレス・コンピューティングの背後には、たまにしか呼び出さないわずかなコードをホスティングするためだけに仮想マシンを立ち上げるのは無駄であるという考え方があります。第一に、ほとんどの時間はアイドル状態の VM を四六時中稼働させるために費用をかけるとなると、金銭的な無駄が生じるだけでなく、時間的な無駄も生じます。それは、VM 内で実行するソフトウェアを保守しなければならないためです。コードをたまに実行するだけだとしても、コードをホスティングする VM では、オペレーティング・システム、インフラストラクチャー、そして言語ランタイムにパッチを適用するなどの保守作業を行う必要があります。しかも実行するコードが重要な処理を行うものだとしたら、VM に耐障害性を持たせ、スケーラブルにする必要があります。そのためにサーバー・ベースのアーキテクチャーが拡大および複雑化すると、それに伴ってさらに多くのコストが生じることになります。

サーバーレス・コンピューティング環境のOpenWhisk では、コードを実行するためのサーバーを作成する必要はありません。コードをシステムに渡して、そのコードを実行する条件 (OpenWhisk の用語ではトリガーとルール) を定義すればよいだけです。定義した条件のいずれかが発生すると、OpenWhisk ランタイムがコードを実行します。料金は時間単位ではなく、呼び出し回数に基づいて請求されるので、コードがたまにしか呼び出されないとしたら、サーバーレス・コンピューティングのほうが、遥かに出費が少なくなります。しかも、必要なインフラストラクチャーの保守は IBM Cloud チームが担当します。それが、IBM Cloud OpenWhisk の利点です。

OpenWhisk の概念

OpenWhisk 環境のベースとなるリソースには、いくつかのタイプがあります。この記事で使用するリソースのタイプはアクションだけですが、以下の概念を理解しておくことが重要です。

  • アクション: アクションとは、実行されるコードのことです。通常、アクションは短時間だけ存続するタスクを処理し、処理が完了すると終了して休止状態になります。アクションは JSON オブジェクトを入力として取り、出力として JSON オブジェクトを返します。前述のとおり、developerWorks サンドボックス内にデプロイしたコードは OpenWhisk アクションになります。
  • トリガー: トリガーとは、イベントのクラスに関連付けられた名前を指します。トリガーは、ユーザーが直接起動することも、フィードからのイベントに対する応答として OpenWhisk 環境によって起動することもできます。フィードについては次に説明します。
  • フィード: フィードは外部イベント・ソース (OpenWhisk 環境の外部にあることもあります) を OpenWhisk のトリガーに結び付けるものです。例えば、Cloudant データベースに対する変更のフィードを作成して、そのフィードとトリガーを結び付けると、データベースに変更が発生するたびに、このトリガーが起動されることになります。
  • ルール: ルールはトリガーとアクションを結び付けるものです。トリガーが起動して、その結果として呼び出されるアクションは、ルールによって決定されます。複数のアクションを呼び出す 1 つのルールを定義したり、複数のルールで同じアクションを呼び出したりすることができます。

以下の図に、上記の 4 つの概念の相互関係を示します。

OpenWhisk のアーキテクチャー図

OpenWhisk のアーキテクチャー図

以上が、OpenWhisk の基本的な仕組みです。この記事で説明する基礎知識を広げるためには、これらの概念を理解していることが非常に重要となります。それはそれとして、この記事では OpenWhisk アクションを直接呼び出すことだけに集中します。アクションを呼び出すだけで、フィード、トリガー、ルールは使用しません (IBM Cloud の資料に、OpenWhisk プラットフォームとその仕組みの概要がわかりやすく説明されています)。

サンプル・アクション

この記事では、単純な Hello World アクションを例として用います。Hello World のサンプル・コードは、name が格納された JSON オブジェクトを入力として取り、パーソナライズされた greeting を含む別の JSON オブジェクトを返します。

まずは下の「デプロイ」ボタンをクリックして、サンプル・コードをデプロイしてください。

結果を表示

上記のサンドボックスから返される URL が、OpenWhisk アクションのアドレスです。記事全体を通してこのアドレスを使用するので、必要に応じて、この URL をクリップボードにコピーしてください (注: 生成される URL はそれぞれの開発者に固有のものなので、ここに記載する例とは異なります)。

ここからは、このアクションを呼び出す以下の 4 つの手法を見ていきます。

  • ブラウザー・ベースの HTTP ツールを使用する
  • curl コマンド・ライン・ツールを使用する
  • node.js アプリケーション内で npm request パッケージを使用する
  • Java アプリケーション内で HttpURLConnection クラスを使用する

手法 1: ブラウザー・ベースの HTTP ツールを使用する

最初に取り上げる手法では、ブラウザー・ベースのツールを使用して OpenWhisk アクションを呼び出します。ここではブラウザー・ベースのツールとして Advanced REST Client for Chrome を使用しますが、他のブラウザーにも同様のツールがあります。どのツールを使用するかに関わらず、以下の 4 つの基本的な情報を把握または指定する必要があります。

  • OpenWhisk アクションのアドレス (上記のサンドボックスから返された URL)
  • HTTP 動詞は POST でなければなりません。
  • リクエストの Content-Type HTTP ヘッダーには、値として application/json を指定する必要があります。
  • JSON オブジェクト内の name の値。

まず始めに、developerWorks サンドボックスからコピーした URL を URL フィールドに貼り付けます。

URL フィールドに貼り付けられた URL を示すスクリーンショット

URL フィールドに貼り付けられた URL を示すスクリーンショット

次に、「POST」ラジオ・ボタンが選択されていることを確認した上で 2 番目のドロップダウン・メニューをクリックし、メニューから「application/json」を選択します。

POST リクエストのコンテンツ・タイプとして application/json を指定する画面のスクリーンショット

POST リクエストのコンテンツ・タイプとして application/json を指定する画面のスクリーンショット

次に行う作業は、name フィールドの内容を入力することです。フィールドの内容は JSON ストリングなので、正しい構文を使用して入力してください。

サービスに送信する内容と、それを送信するためのボタンのスクリーンショット

サービスに送信する内容と、それを送信するためのボタンのスクリーンショット

すべての詳細を入力したら、「SEND (送信)」ボタンをクリックします。以下のような結果が表示されるはずです。

OpenWhisk アクションから返されたデータのスクリーンショット

OpenWhisk アクションから返されたデータのスクリーンショット

この単純な例では、OpenWhisk アクションがシンプルな挨拶のメッセージを返します。演習として、例えばこのリンク先の記事「Translate natural language with the Watson Language Translator service」で説明されているような複雑なサンプル・コードをデプロイしてみてください (Language Translator サービスを利用するには、IBM Cloud アカウント内で資格情報を定義する必要があることに注意してください。また、さらに複雑な JSON オブジェクトを作成する必要もあります。詳細については、上述の記事を参照してください)。

手法 2: curl コマンド・ライン・ツールを使用する

curl コマンド・ライン・ツールは、Web 上のリソースとやりとりするための一般的な手段です。Advanced REST Client の場合と同じく、このコマンド・ライン・ツールを使用する際も、各種のプロパティーとパラメーターを定義する必要があります。すべての定義はコマンド・ライン上で行いますが、定義する内容は同じです。

  • OpenWhisk アクションのアドレス (コードをデプロイすると、developerWorks サンドボックスから返されます)。
  • HTTP 動詞は POST でなければなりません。
  • リクエストの Content-Type HTTP ヘッダーには、値として application/json を指定する必要があります。
  • JSON オブジェクト内の name の値。

前の例でのサービスを前提とすると、curl コマンドは以下のようになります。

curl [the URL from the sandbox] -X POST -H "Content-Type: application/json" -d '{"name":"Susan"}'

-X POST は、これが HTTP POST 処理であることを指定し、-H (ヘッダー) フラグは Content-Type ヘッダーを定義します。-d (データ) フラグには、アクションに渡す情報を含めます。このコマンドによって、コマンド・ラインに JSON 構造が返されます (出力をファイルに書き込むには、-o オプションを追加して、ファイル名を指定します)。

手法 3: node.js アプリケーション内で npm request パッケージを使用する

次に取り上げる手法では、npm request パッケージを使用して、アクションをアプリケーションの一部として呼び出します。アクションをアプリケーションの一部として呼び出すと、OpenWhisk アクションをマイクロサービスとして利用することができます (Martin Fowler のブログに掲載されている、このリンク先のサーバーレス・コンピューティングについての優れた紹介記事を読んでください。その中で、マイクロサービスについて簡潔に説明しています)。

以下の簡単な node アプリケーションは、この記事全体を通して参照している OpenWhisk アクションを呼び出します。[URL] をデプロイ済み Hello World コードの URL に置き換えてから、「実行」ボタンをクリックしてコードを実行してください。

結果を表示

options オブジェクトに OpenWhisk アクションの URL、入力データ (本文) を格納し、Content-Type ヘッダーを設定して、request オブジェクトに対してアクションに送信されるデータが JSON であることを伝えます。

オプションとコールバック関数を定義した上で、request.post を使って OpenWhisk アクションに適切なデータとヘッダーを送信します。この node アプリケーションを実行すると、以下の結果が生成されます。

Hello, Susan!

console.log() の呼び出しにより、JSON オブジェクトに含まれる greeting フィールドが OpenWhisk アクションによって返されます。多くのアクションでは、これよりも複雑な JSON オブジェクトを調べて必要なデータを見つける必要がありますが、ここでは単純なオブジェクトを処理するだけにとどめておきます。

手法 4: Java アプリケーション内で HttpURLConnection クラスを使用する

次に説明する手法では、Java アプリケーション内で HttpURLConnection クラスを使用します。この後わかるように、この手法に必要な情報は、アクションを呼び出す他のすべての手法で使用した情報と変わりません。単に異なる構文を使用して定義および指定しているだけです。node.js バージョンの場合と同じく、[URL] を OpenWhisk アクションの URL に置き換えてから、「実行」ボタンをクリックして以下の Java アプリケーションを実行してください。

結果を表示

上記のコードによって、以下の結果が生成されます。

{
  "greeting": "Hello, Susan"
}

まとめ

この記事では、OpenWhisk アクションを呼び出す 4 つの手法を説明しました。記事の例では developerWorks サンドボックスを使用してデプロイされたアクションを使用しましたが、アクションがどのようにデプロイされているかを問わず、これらの手法はあらゆるアクションに適用できます。IBM Cloud コンソールを使ってアクションを自分の IBM Cloud アカウントにデプロイすると、アクション、トリガー、ルールを含む任意のOpenWhisk リソースを呼び出し、管理、モニターするために、非常に有用な wsk コマンド・ライン・ツールを使用できるようになります。

OpenWhisk の知識を広げるには、自分の IBM Cloud アカウント内で OpenWhisk を操作することをお勧めします。その手始めとして、このリンク先の記事「IBM Cloud と Node.js を使用してユーザー向け OpenWhisk アプリケーションを作成する」に取り組んでください。一般的なリソースについては、OpenWhisk 開発者センターにアクセスして調べることもできます。それでは、サーバーレス・コンピューティングの力と柔軟性をお楽しみください!


ダウンロード可能なリソース


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Web development
ArticleID=1052005
ArticleTitle=OpenWhisk アクションを呼び出す
publish-date=11162017