|
| 1 | +[](https://travis-ci.org/IBM/ibm-cloud-functions-serverless-apis) |
| 2 | + |
| 3 | +# IBM Cloud Functions でサーバーレス API ハンドラーを作成する (Apache OpenWhisk の利用) |
| 4 | + |
| 5 | +*Read this in other languages: [English](README.md), [한국어](README-ko.md).* |
| 6 | + |
| 7 | +このプロジェクトは、サーバーレスのイベント駆動型アーキテクチャーの仕組みを説明するものです。このアーテクチャーでは、HTTP REST API の呼び出しにより、需要に応じてコードが実行されます。API エンドポイントが呼び出されるまでは、レスポンスにリソースは消費されません。API エンドポイントが呼び出されると、現在の負荷とちょうど一致するようにリソースがプロビジョニングされます。 |
| 8 | + |
| 9 | +このプロジェクトでは、MySQL データベース内のデータの書き込み/読み取りを行う 4 つの (Apache OpenWhisk ベースの) IBM Cloud Functions を取り上げて、アクションとサポート・データ・サービスが連動して HTTP リクエストに応じてロジックを実行する仕組みを説明します。 |
| 10 | + |
| 11 | +最初の関数 (アクション) は、HTTP POST リクエストにマッピングされています。このアクションは、入力された猫の名前と色のパラメーターをデータベースに挿入します。2 番目のアクションは PUT リクエストにマッピングされていて、既存の猫の名前と色のフィールドを更新します。3 番目のアクションは GET リクエストにマッピングされていて、特定の猫のデータを返します。4 番目のアクションは、特定の猫のデータを削除します。 |
| 12 | + |
| 13 | +IBM Cloud 上の Node.js ランタイムには、NPM モジュールの組み込みホワイトリストが用意されています。このデモでは高度な拡張性にも焦点を当て、MySQL クライアントなどの他の Node.js 依存関係をカスタム・アクションと一緒に ZIP ファイルにパッケージ化する方法を説明します。 |
| 14 | + |
| 15 | +## Flow |
| 16 | + |
| 17 | + |
| 18 | + |
| 19 | +1. API クライアントが REST API に HTTP POST リクエストを送信します。 |
| 20 | +2. API ゲートウェイがリクエストを受け取り、それを OpenWhisk アクションに転送します。 |
| 21 | +3. OpenWhisk アクションがリクエスト本文のパラメーターを抽出し、NPM MySQL クライアントを使用して SQL INSERT を作成します。 |
| 22 | +4. 猫のデータがデータベースに保管されます。 |
| 23 | + |
| 24 | +## 含まれるコンポーネント |
| 25 | + |
| 26 | +- IBM Cloud Functions (powered by Apache OpenWhisk) |
| 27 | +- ClearDB or Compose (MySQL) |
| 28 | + |
| 29 | +## 前提条件 |
| 30 | + |
| 31 | +OpenWhisk プログラミングモデルの基本的な理解が必要です。そうでない場合は、アクション、トリガー、ルールの [デモ](https://github.com/IBM/openwhisk-action-trigger-rule) を最初に試みてください。 |
| 32 | + |
| 33 | +また、IBM Cloudアカウントを取得し、最新の [OpenWhiskコマンドライン・ツール(`wsk`)](https://github.com/IBM/openwhisk-action-trigger-rule/blob/master/docs/OPENWHISK.md) がインストールされ、PATH に追加されている必要があります。 |
| 34 | + |
| 35 | +この一通り動作するサンプルの代わりに、このサンプルより [より基本的な要素を理解するためのバージョン](https://github.com/IBM/openwhisk-rest-api-trigger) を参考にすることもできます。 |
| 36 | + |
| 37 | +## 手順 |
| 38 | + |
| 39 | +1. [MySQL の準備](#1-provision-mysql) |
| 40 | +2. [OpenWhisk アクションとマッピングを作成する](#2-create-openwhisk-actions-and-mappings) |
| 41 | +3. [APIエンドポイントをテストする](#3-test-api-endpoints) |
| 42 | +4. [アクションとマッピングを削除する](#4-delete-actions-and-mappings) |
| 43 | +5. [こんどは手動でデプロイする](#5-recreate-deployment-manually) |
| 44 | + |
| 45 | +<a name="1-provision-mysql"></a> |
| 46 | +# 1. MySQL の準備 |
| 47 | + |
| 48 | +IBM Cloudにログインし、[ClearDB](https://console.ng.bluemix.net/catalog/services/cleardb-mysql-database/) または [Compose for MySQL](https://console.ng.bluemix.net/catalog/services/compose-for-mysql/) データベースインスタンスを準備 (プロビジョニング) します。 |
| 49 | +ClearDB には簡単なテストのためのフリーの段階 (tier) がありますが、Compose にはより大きなワークロードの段階があります。 |
| 50 | + |
| 51 | +* [ClearDB](https://console.ng.bluemix.net/catalog/services/cleardb-mysql-database/) の場合は、ClearDB ダッシュボードにログインし、作成されたデフォルトのデータベースを選択します。 |
| 52 | +`Endpoint Information` でユーザー、パスワード、およびホスト情報を取得します。 |
| 53 | + |
| 54 | +* [Compose for MySQL](https://console.ng.bluemix.net/catalog/services/compose-for-mysql/) の場合は、IBM Cloud コンソールの `Service Credentials` タブから情報を入手してください。 |
| 55 | + |
| 56 | +`template.local.env` を `local.env` という名前の新しいファイルにコピーし、MySQL インスタンスの `MYSQL_HOSTNAME`、`MYSQL_USERNAME`、`MYSQL_PASSWORD`、`MYSQL_DATABASE` の値を書き込んでください。 |
| 57 | + |
| 58 | +> 訳者注: 2018年7月現在、ClearDB サービスは利用できないようですが、参考のためにテキストは翻訳します |
| 59 | + |
| 60 | +<a name="2-create-openwhisk-actions-and-mappings"></a> |
| 61 | +# 2. OpenWhisk アクションとマッピングを作成する |
| 62 | + |
| 63 | +`deploy.sh` は便利なスクリプトで、`local.env` から環境変数を読み込み、あなたのために OpenWhisk アクションと API マッピングを作成します。 |
| 64 | +後でこれらのコマンドを自分で実行します。 |
| 65 | + |
| 66 | +```bash |
| 67 | +./deploy.sh --install |
| 68 | +``` |
| 69 | + |
| 70 | +> **注**: エラーメッセージが表示された場合は、後の [トラブルシューティング](#troubleshooting) セクションを参照してください。 |
| 71 | +[別のデプロイ方法](#alternative-deployment-methods) を参照することもできます。 |
| 72 | + |
| 73 | +<a name="3-test-api-endpoints"></a> |
| 74 | +# 3. APIエンドポイントをテストする |
| 75 | + |
| 76 | +`/v1/cat` エンドポイントに対して、エンティティを作成、取得、更新、削除する HTTP API クライアントをシミュレートする4つのヘルパースクリプトがあります。 |
| 77 | + |
| 78 | +```bash |
| 79 | +# エンティティの作成テスト |
| 80 | +# POST /v1/cat {"name": "Tarball", "color": "Black"} |
| 81 | +client/cat-post.sh Tarball Black |
| 82 | + |
| 83 | +# エンティティの取得テスト |
| 84 | +# GET /v1/cat?id=1 |
| 85 | +client/cat-get.sh 1 # Or whatever integer ID was returned by the command above |
| 86 | + |
| 87 | +# エンティティの更新テスト |
| 88 | +# PUT /v1/cat {"id": 1, "name": "Tarball", "color": "Gray"} |
| 89 | +client/cat-put.sh 1 Tarball Gray |
| 90 | + |
| 91 | +# エンティティの削除テスト |
| 92 | +# DELETE /v1/cat?id=1 |
| 93 | +client/cat-delete.sh 1 |
| 94 | +``` |
| 95 | + |
| 96 | +<a name="4-delete-actions-and-mappings"></a> |
| 97 | +# 4. アクションとマッピングを削除する |
| 98 | + |
| 99 | +`deploy.sh` をもう一度使って、OpenWhiskのアクションとマッピングを削除してください。 |
| 100 | +次のセクションではそれらをステップバイステップで再作成します。 |
| 101 | + |
| 102 | +```bash |
| 103 | +./deploy.sh --uninstall |
| 104 | +``` |
| 105 | + |
| 106 | +<a name="5-recreate-deployment-manually"></a> |
| 107 | +# 5. こんどは手動でデプロイする |
| 108 | + |
| 109 | +このセクションでは、`deploy.sh` スクリプトの実行内容を詳しく見て、OpenWhiskのトリガー、アクション、ルール、およびパッケージをより詳しく扱う方法を理解していきます。 |
| 110 | + |
| 111 | +## 5.1 猫データを変更するための OpenWhisk アクションの作成 |
| 112 | + |
| 113 | +猫のデータを管理するアクションを API の各メソッド(POST、PUT、GET、DELETE)ごとに1つずつ、合計で4つ作成します。 |
| 114 | +アクションのコードは `/actions` にあります。 |
| 115 | +最初に猫のレコードを作成するアクションから始めましょう。 |
| 116 | + |
| 117 | +> **注**: OpenWhisk Node.jsランタイム環境で使用できる組み込みパッケージの [詳細はこちら](https://github.com/openwhisk/openwhisk/blob/master/docs/reference.md?cm_mc_uid=33591682128714865890263&cm_mc_sid_50200000=わ1487347815#javascript-runtime-environments)。 |
| 118 | +追加パッケージが必要な場合は、アクションファイルとともに ZIP ファイルにまとめてアップロードすることができます。 |
| 119 | +単一ファイルと ZIP 圧縮アーカイブの違いの詳細については、[Getting Started Guide](https://console.ng.bluemix.net/docs/openwhisk/openwhisk_actions.html#openwhisk_js_packaged_action) を参照してください。 |
| 120 | + |
| 121 | +### 5.1.1 猫パッケージ |
| 122 | + |
| 123 | +すべてのアクションは MySQL データベースサービスに依存しているため、パッケージレベルで一度、資格情報を設定すると便利です。 |
| 124 | +これにより、パッケージ内のすべてのアクションで資格情報を使用できるようになります。 |
| 125 | +したがって、作成時および実行時にアクションごとに定義する必要はありません。 |
| 126 | + |
| 127 | +```bash |
| 128 | +source local.env |
| 129 | +wsk package create cat \ |
| 130 | + --param "MYSQL_HOSTNAME" $MYSQL_HOSTNAME \ |
| 131 | + --param "MYSQL_USERNAME" $MYSQL_USERNAME \ |
| 132 | + --param "MYSQL_PASSWORD" $MYSQL_PASSWORD \ |
| 133 | + --param "MYSQL_DATABASE" $MYSQL_DATABASE |
| 134 | +``` |
| 135 | + |
| 136 | +### 5.1.2 猫の作成アクション |
| 137 | + |
| 138 | +POSTアクションのJavaScriptコードは、 [`/actions/cat-post-action/index.js`](actions/cat-post-action/index.js) にあります。 |
| 139 | +この関数は、データベースに接続するために必要な `mysql` クライアント npm パッケージに依存します。 |
| 140 | +`npm install` ([`package.json`](actions/cat-post-action/package.json) を解析する) を使ってパッケージをインストールし、アプリケーションとその依存関係の両方を含む ZIP ファイルを作成します。 |
| 141 | + |
| 142 | +```bash |
| 143 | +cd actions/cat-post-action |
| 144 | +npm install |
| 145 | +zip -rq action.zip * |
| 146 | +``` |
| 147 | + |
| 148 | +次に、OpenWhisk CLI を使用して `action.zip` からアクションを作成 (create) します。 |
| 149 | + |
| 150 | +```bash |
| 151 | +# Create |
| 152 | +wsk action create cat/cat-post \ |
| 153 | + --kind nodejs:6 action.zip \ |
| 154 | + --web true |
| 155 | +``` |
| 156 | + |
| 157 | +次に、テストする `wsk` CLIを使って手動でアクションを起動 (invoke) します。 |
| 158 | + |
| 159 | +```bash |
| 160 | +# Test |
| 161 | +wsk action invoke \ |
| 162 | + --blocking \ |
| 163 | + --param name Tarball \ |
| 164 | + --param color Black \ |
| 165 | + cat/cat-post |
| 166 | +``` |
| 167 | + |
| 168 | +> 訳者注: 上記のアクションでデータベースに、「名前が Tarball で、色が黒」である猫のレコードが新規作成されました。 |
| 169 | + |
| 170 | +上記の手順を繰り返して、対応する GET、PUT、DELETE アクションを作成してテストしていきます。 |
| 171 | + |
| 172 | + |
| 173 | +> **注**: 上記の POST アクション結果から返された実際の ID を反映させるために、あなたのテストでは `id 1` を置き換えてください。 |
| 174 | + |
| 175 | +### 5.1.3 猫の参照アクション |
| 176 | + |
| 177 | +GET アクションを作成してテストします。 |
| 178 | + |
| 179 | +```bash |
| 180 | +# Create |
| 181 | +cd ../../actions/cat-get-action |
| 182 | +npm install |
| 183 | +zip -rq action.zip * |
| 184 | +wsk action create cat/cat-get \ |
| 185 | + --kind nodejs:6 action.zip \ |
| 186 | + --web true |
| 187 | + |
| 188 | +# Test |
| 189 | +wsk action invoke \ |
| 190 | + --blocking \ |
| 191 | + --param id 1 \ |
| 192 | + cat/cat-get |
| 193 | +``` |
| 194 | + |
| 195 | +> 訳者注: このアクションで、さきほど作成された「名前が Tarball で、色が黒」である猫のレコードが読み取られ表示されるはずです。 |
| 196 | + |
| 197 | +### 5.1.4 猫の更新アクション |
| 198 | + |
| 199 | +PUT アクションを作成してテストします。 |
| 200 | + |
| 201 | +```bash |
| 202 | +# Create |
| 203 | +cd ../../actions/cat-put-action |
| 204 | +npm install |
| 205 | +zip -rq action.zip * |
| 206 | +wsk action create cat/cat-put \ |
| 207 | + --kind nodejs:6 action.zip \ |
| 208 | + --web true |
| 209 | + |
| 210 | +# Test |
| 211 | +wsk action invoke \ |
| 212 | + --blocking \ |
| 213 | + --param name Tarball \ |
| 214 | + --param color Gray \ |
| 215 | + --param id 1 \ |
| 216 | + cat/cat-put |
| 217 | + |
| 218 | +wsk action invoke \ |
| 219 | + --blocking \ |
| 220 | + --param id 1 \ |
| 221 | + cat/cat-get |
| 222 | +``` |
| 223 | + |
| 224 | +> 訳者注: このアクションで、さきほど作成・参照された「名前が Tarball で、色が黒」である猫のレコードが、「名前が Tarball で、色が灰色」に書き換えられました。 |
| 225 | + |
| 226 | +### 5.1.5 猫の削除アクション |
| 227 | + |
| 228 | +DELETE アクションを作成してテストします。 |
| 229 | + |
| 230 | +```bash |
| 231 | +# Create |
| 232 | +cd ../../actions/cat-delete-action |
| 233 | +npm install |
| 234 | +zip -rq action.zip * |
| 235 | +wsk action create cat/cat-delete \ |
| 236 | + --kind nodejs:6 action.zip \ |
| 237 | + --web true |
| 238 | + |
| 239 | +# Test |
| 240 | +wsk action invoke \ |
| 241 | + --blocking \ |
| 242 | + --param id 1 \ |
| 243 | + cat/cat-delete |
| 244 | + |
| 245 | +wsk action invoke \ |
| 246 | + --blocking \ |
| 247 | + --param id 1 \ |
| 248 | + cat/cat-get |
| 249 | +``` |
| 250 | + |
| 251 | +> 訳者注: このアクションで、さきほど作成・参照・更新された「名前が Tarball で、色が灰色」である猫のレコードが、削除されました。 |
| 252 | + |
| 253 | +## 5.2 REST APIエンドポイントを作成する |
| 254 | + |
| 255 | +次に、リソースエンドポイント (`/cat`) を `GET`、`DELETE`、`PUT`、`POST` HTTP メソッドにマップし、対応する OpenWhisk アクションに関連づけて、クライアントスクリプトを使ってテストします。 |
| 256 | + |
| 257 | +```bash |
| 258 | +# Create |
| 259 | +wsk api create -n "Cats API" /v1 /cat post cat/cat-post |
| 260 | +wsk api create /v1 /cat put cat/cat-put |
| 261 | +wsk api create /v1 /cat get cat/cat-get |
| 262 | +wsk api create /v1 /cat delete cat/cat-delete |
| 263 | + |
| 264 | +# Test |
| 265 | + |
| 266 | +# POST /v1/cat {"name": "Tarball", "color": "Black"} |
| 267 | +client/cat-post.sh Tarball Black |
| 268 | + |
| 269 | +# GET /v1/cat?id=1 |
| 270 | +client/cat-get.sh 1 # Replace 1 with the id returned from the POST action above |
| 271 | + |
| 272 | +# PUT /v1/cat {"id": 1, "name": "Tarball", "color": "Gray"} |
| 273 | +client/cat-put.sh 1 Tarball Gray |
| 274 | + |
| 275 | +# DELETE /v1/cat?id=1 |
| 276 | +client/cat-delete.sh 1 |
| 277 | +``` |
| 278 | + |
| 279 | +## 5.3 クリーンアップ |
| 280 | + |
| 281 | +APIマッピングを解除し、アクションを削除します。 |
| 282 | + |
| 283 | +```bash |
| 284 | +wsk api delete /v1 |
| 285 | +wsk action delete cat/cat-post |
| 286 | +wsk action delete cat/cat-put |
| 287 | +wsk action delete cat/cat-get |
| 288 | +wsk action delete cat/cat-delete |
| 289 | +wsk package delete cat |
| 290 | +``` |
| 291 | + |
| 292 | +<a name="troubleshooting"></a> |
| 293 | +# トラブルシューティング |
| 294 | + |
| 295 | +まずは OpenWhisk アクティベーションログでエラーをチェックしてください。 |
| 296 | +`wsk activation poll` を使用してコマンドラインでログを出力するか、[IBM Cloudの監視コンソール](https://console.ng.bluemix.net/openwhisk/dashboard) で視覚的に細部を掘り下げてください。 |
| 297 | + |
| 298 | +エラー内容が不明確な場合は、[最新バージョンの `wsk` CLI](https://console.ng.bluemix.net/openwhisk/learn/cli) がインストールされていることを確認してください。 |
| 299 | +もし数週間以上経過している場合は、アップデートをダウンロードしてください。 |
| 300 | + |
| 301 | +```bash |
| 302 | +wsk property get --cliversion |
| 303 | +``` |
| 304 | + |
| 305 | +<a name="alternative-deployment-methods"></a> |
| 306 | +# 別のデプロイ方法 |
| 307 | + |
| 308 | +`deploy.sh` は将来、[`wskdeploy`](https://github.com/openwhisk/openwhisk-wskdeploy) に置き換えられます。 `wskdeploy` は、宣言されたトリガー、アクション、ルールを OpenWhisk にデプロイするためにマニフェスト (manifest) を使います。 |
| 309 | + |
| 310 | +次のボタンを使用して、このリポジトリーのコピーをクローンし、DevOps ツールチェーンの一部として IBM Cloud にデプロイすることもできます。 |
| 311 | +OpenWhisk と MySQL の資格情報を Delivery Pipeline アイコンの下に入力し、`Create` をクリックしてから、配信パイプラインの Deploy ステージを実行します。 |
| 312 | + |
| 313 | +[](https://bluemix.net/deploy?repository=https://github.com/IBM/openwhisk-serverless-apis.git) |
| 314 | + |
| 315 | +# ライセンス |
| 316 | +[Apache 2.0](LICENSE) |
0 commit comments