More Related Content
Similar to Hybrid serverless architecture using open whisk ibm cloud functions and istio 20170906 (20)
More from Tsuyoshi Hirayama (20)
Hybrid serverless architecture using open whisk ibm cloud functions and istio 20170906
- 2. © 2017 IBM Corporation
自己紹介 平山 毅 (ひらやま つよし)
IBM Consulting Architect
WatsonとAnalyticsを融合した新生IBMクラウド事業本部で技術面をリー
ドしています。最近は次世代コンピューティングのプロジェクトにも従事しています。
また、IBMerながら、実はAWS Lambdaにも詳しい。
日経コンピューター様記事
http://itpro.nikkeibp.co.jp/atcl/column/14/34
6926/011000761/
日経SYSTEMS様記事
http://itpro.nikkeibp.co.jp/atcl/column/14/346
926/022400852/
【共著】
- 3. © 2017 IBM Corporation
Which is OpenWhisk or IBM Cloud Functions ?
何が変わったの︖ (現時点)
As a Software (OpenSource)
コマンドラインがcloud functions に︕
> bx plugin install cloud-functions -r Bluemix
> bx plugin list cloud-functions
Plugin Name Version
Cloud-Functions 1.0.0
実はAPIはOpenWhiskそのまま︕
https://openwhisk.ng.bluemix.net/api/v1
IBM Cloud Functions
As a Service (IBM Cloud)
Dockerコンテナで提供
Kubernetesベースの
マイクロサービス環境に最適のデプロイ
- 4. © 2017 IBM Corporation
What is Istio ?
マイクロサービス
アプリケーション層
マイクロサービス
フロント層
マイクロサービス
DB/Integration層
冗⻑性設定の
コントロール
プレーンへの追加
Istio の アーキテクチャー
非機能要件をコードに実装
IBM、Google、Lyftで共同開発したOSSマイクロサービスプラットフォーム
+ + Kubernetes
- 5. © 2017 IBM Corporation
Istio = Traffic + Policy
OpenWhiskの実⾏環境として最適になる(予定)
https://istio.io/ より抜粋
- 6. © 2017 IBM Corporation
Lambda Function (API -> Lambda -> DynamoDB のNode.js)
'use strict';
console.log('Loading function');
const doc = require('dynamodb-doc');
const dynamo = new doc.DynamoDB();
exports.handler = (event, context, callback) => {
//console.log('Received event:', JSON.stringify(event, null, 2));
const done = (err, res) => callback(null, {
statusCode: err ? '400' : '200',
body: err ? err.message : JSON.stringify(res),
headers: {
'Content-Type': 'application/json',
},
});
switch (event.httpMethod) {
case 'DELETE':
dynamo.deleteItem(JSON.parse(event.body), done);
break;
case 'GET':
dynamo.scan({ TableName: event.queryStringParameters.TableName }, done);
break;
case 'POST':
dynamo.putItem(JSON.parse(event.body), done);
break;
case 'PUT':
dynamo.updateItem(JSON.parse(event.body), done);
break;
default:
done(new Error(`Unsupported method "${event.httpMethod}"`));
}
};
Event
Context
Callback
AWS Lambdaと各AWSサービスとの連携設定
Callback で取得部分
パッケージ的位置付けの宣言
(この例ではDynamoDB)
Event 定義の部分
HTTPメソッドをベースに
DynamoDBのAPIを
Switch分岐で定義
以下よりソースコードを抜粋
- 7. © 2017 IBM Corporation
OpenWhisk Action (API -> OpenWhisk -> MySQL のNode.js GET)
以下よりソースコードを抜粋
https://github.com/IBM/openwhisk-serverless-apis
function myAction(params) {
return new Promise(function(resolve, reject) {
console.log('Connecting to MySQL database');
var mysql = require('promise-mysql');
var connection;
mysql.createConnection({
host: params.MYSQL_HOSTNAME,
user: params.MYSQL_USERNAME,
password: params.MYSQL_PASSWORD,
database: params.MYSQL_DATABASE
}).then(function(conn) {
connection = conn;
console.log('Querying');
var queryText = 'SELECT * FROM cats WHERE id=?';
var result = connection.query(queryText, [params.id]);
connection.end();
return result;
}).then(function(result) {
console.log(result);
if (result[0]) {
resolve({
statusCode: 200,
headers: {
'Content-Type': 'application/json'
},
body: result[0]
});
} else {
reject({
headers: {
'Content-Type': 'application/json'
},
statusCode: 404,
body: {
error: "Not found."
}
});
}
;
}).catch(function(error) {
if (connection && connection.end) connection.end();
console.log(error);
reject({
headers: {
'Content-Type': 'application/json'
},
statusCode: 500,
body: {
error: "Error."
}
});
});
});
}
exports.main = myAction
Params
パラメーター
変数の定義
Function定義
MySQLの
認証情報
MySQLのSQL分
Where句にパラ
メーターを適用
(GETに対応する
SELECT)
分岐︓正常終了時(HTTP 200) 分岐︓データが無い論理エラー(HTTP 404)
分岐︓対向のエラー(HTTP 500)
- 8. © 2017 IBM Corporation
OpenWhisk Good Point (Trigger、Rule、Sequence)
【参考】発表者平山のQiita「シーケンスのソースコード」
http://qiita.com/t3hirayama/items/21fbf39c42be5756b870
発表者平山のQiita「パッケージのソースコード」
http://qiita.com/t3hirayama/items/ad6927eb5310247407ac
こちらはAccenture様から発表
シーケンスはアクション経由
- 10. © 2017 IBM Corporation
API Gateway + OpenWhisk
Fintech APIの多くを構成するIBM API Connect ベースのAPI Gateway で自動的にOpenWhiskをAPI化可能。
API Connectの機能によって、SDKも自動生成され、マイクロサービス通信が即時に可能になる︕
【参考】発表者平山のQiita「APIからSDK化するサンプルコード」
http://qiita.com/t3hirayama/items/d09766d6882a66165c22
サーバレス向けの
APIリファレンス
が自動生成され、
SDKコードも自動
生成される。
- 11. DevOps Open Toolchain と OpenWhisk との融合
DevOps のプロセスを回すOpenToolchianに対応し、DevOpsサイクルで
Kubernetes(Docker)、CloudFoundry、と合わせて統合管理とデプロイ、
更にマイクロサービス統合管理まで可能に。
- 13. © 2017 IBM Corporation
Serverless Framework for OpenWhisk
https://serverless.com/これは、マルチクラウドとIBMサービスを将来利⽤するには、抑えておいた⽅がいい。
- 14. © 2017 IBM Corporation
OpenWhisk Functions Properties Example
# serverless.yml
service: myService
provider:
name: openwhisk
runtime: nodejs:6 # optional, default is nodejs:default
memorySize: 512 # optional, default is 256
timeout: 30 # optional, default is 60
functions:
hello:
handler: handler.hello # required, handler set in Apache OpenWhisk
name: some_custom_name # optional, default is ${service}_${function}
runtime: nodejs # optional overwrite, default is provider runtime
memory: 512 # optional overwrite, default is 256
timeout: 10 # optional overwrite, default is 60
https://serverless.com/framework/docs/providers/openwhisk/guide/functions/
- 15. © 2017 IBM Corporation
What is Hybrid Cloud ?
オンプレミスの
プライベートクラウド
IBM Cloud
パブリッククラウド
VMware SDDC (NSXで1つのL2ネットワークに)
Istio / Kubernetes Cluster / Teraform
Serverless
Function
Serverless
Function
Serverless
Function
Serverless
Function
レガシー資産
クラウド
サービス
①インフラの
ハイブリッド
②アプリの
ハイブリッド
- 17. © 2017 IBM Corporation
IBM Cloud Function の 導入事例
- 18. © 2017 IBM Corporation
Thank you
ご清聴ありがとうございました。
- 19. © 2017 IBM Corporation
この資料に含まれる情報は可能な限り正確を期しておりますが、日本アイ・ビー・エム株式会社の正式なレビューを受けておらず、当資料に記載
された内容に関して日本アイ・ビー・エムは何ら保証するものではありません。
ワー クショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独自の見解を反映したものです。それらは情
報提供の目的 のみで提供されており、いかなる参加者に対しても法律的またはその他の指導や助言を意図したものではなく、またそのような結
果を生むものでもありません。 本講演資料に含まれている情報については、完全性と正確性を期するよう努力しましたが、「現状のまま」提供さ
れ、明示または暗示にかかわらずいかなる保証 も伴わないものとします。本講演資料またはその他の資料の使用によって、あるいはその他の
関連によって、いかなる損害が生じた場合も、IBMは責任を負わ ないものとします。 本講演資料に含まれている内容は、IBMまたはそのサプライ
ヤーやライセンス交付者からいかなる保証または表明を引きだすことを意図したものでも、IBM ソフトウェアの使用を規定する適用ライセンス契
約の条項を変更することを意図したものでもなく、またそのような結果を生むものでもありません。
本 講演資料でIBM製品、プログラム、またはサービスに言及していても、IBMが営業活動を行っているすべての国でそれらが使用可能であること
を暗示するも のではありません。本講演資料で言及している製品リリース日付や製品機能は、市場機会またはその他の要因に基づいてIBM独
自の決定権をもっていつでも変 更できるものとし、いかなる方法においても将来の製品または機能が使用可能になると確約することを意図したも
のではありません。本講演資料に含まれている 内容は、参加者が開始する活動によって特定の販売、売上高の向上、またはその他の結果が生
じると述べる、または暗示することを意図したものでも、またその ような結果を生むものでもありません。 パフォーマンスは、管理された環境にお
いて標準的なIBMベンチマークを使用した測定と予測に基づいています。ユーザーが経験する実際のスループットやパ フォーマンスは、ユー
ザーのジョブ・ストリームにおけるマルチプログラミングの量、入出力構成、ストレージ構成、および処理されるワークロードなどの考慮 事項を含
む、数多くの要因に応じて変化します。したがって、個々のユーザーがここで述べられているものと同様の結果を得られると確約するものではあ
りませ ん。
記述されているすべてのお客様事例は、それらのお客様がどのようにIBM製品を使用したか、またそれらのお客様が達成した結果の実例として
示されたものです。実際の環境コストおよびパフォーマンス特性は、お客様ごとに異なる場合があります。
IBM, IBM ロゴ、ibm.com, は、世界の多くの国で登録されたInternational Business Machines Corporationの商標です。
他の製品名およびサービス名等は、それぞれIBMまたは各社の商標である場合があります。
現時点での IBM の商標リストについては、www.ibm.com/legal/copytrade.shtmlをご覧ください。