Slide 1

Slide 1 text

http://ibm.biz/dojo20200909 本⽇の資料

Slide 2

Slide 2 text

アカウントの登録 アカウントの登録 登録にはe-Mail アドレスが必要です。 使⽤するアカウントはライトアカウントです。 ハンズオンで次のサービスを利⽤します。 Cloud Functions 既に作成ずみのアプリがあり削除できない⽅は 新しいアカウントを取得してください。 次のサービスも利⽤します。作成済みの⽅は再利⽤ができます。 Watson Studio (Visual Recognition) こちらのURLからアクセスをお願いします。 https://ibm.biz/BdqJ2X

Slide 3

Slide 3 text

このセッションではSli.doによるライブ投票を⾏います。

Slide 4

Slide 4 text

Taiji Hagino IBM Developer Advocacy Tokyo Team Sr. Developer Advocate IBM Champion Regional Director @taiponrock IBM Developer Dojo Serverless/IBM Cloud Functions ⼊⾨編

Slide 5

Slide 5 text

Taiji (Eddie) Hagino Sr. Developer Advocate IBM Champion Program Regional Director IBM Lecturer Tsukuba University @taiponrock Please follow me! Node-RED/Node.js, Swift, Hyperledger Fabric, Functions Books: Node-RED beginner book, Node-RED Experience Handbook, DevRel Q&A Articles: I/O Magazine (Node-RED programming)

Slide 6

Slide 6 text

Tokyo Leader Akira ONISHI IBM Developer Advocate Tokyo Team Tokyo Team is a part of Worldwide Developer Advocate Teams! https://developer.ibm.com/cities/tokyo-jp/ Developer Advocates Noriko KATO Developer Advocates Kyoko NISHITO Developer Advocate Yasushi OSONOI Developer Advocates Aya TOKURA Developer Advocates Taiji HAGINO

Slide 7

Slide 7 text

学習の⽬的とゴール ⽬的 Serverless/FaaSの概要について理解し、 IBM Cloud Functionsを使えるようになる ゴール IBM Cloud Functionsによるアプリケー ションの開発⽅法を理解する このコースを学ぶ⽅の想定スキル Webアプリケーション開発経験者の⽅ サーバーレス初⼼者・未経験の⽅

Slide 8

Slide 8 text

事前準備 1. IBM Cloudアカウント(無料)の取得 2. Webブラウザー Chrome または Firefoxの導⼊

Slide 9

Slide 9 text

Create IBM Cloud Account -> 無料 -> クレジットカード不要 -> だれでも使える -> いつまででも使える -> すぐに使える こちらのURLからアクセスをお願いします。 https://ibm.biz/BdqJ2X

Slide 10

Slide 10 text

10 ご注意 今回みなさまへご案内しているのは、クレジットカー ド不要の完全無償でご利⽤頂けるアカウントです。 こちらはライトアカウントと呼ばれ、使える機能に制 限があり、⼀部のサービスはご利⽤いただけません。 アカウント作成後、クレジットカードを登録すると PAYG(PayGo)という全ての機能がご利⽤頂けるアカウ ントへアップグレードできますが、こちらは従量課⾦ が発⽣するアカウントですので、ご利⽤の際にはご注 意下さい。

Slide 11

Slide 11 text

⽬次 1. サーバーレスとは 2. IBM Cloud Functionsについて 3. IBM Cloud Functionsの使い⽅ 4. ハンズオン

Slide 12

Slide 12 text

1. サーバーレスとは 2. IBM Cloud Functionsについて 3. IBM Cloud Functionsの使い⽅ 4. ハンズオン

Slide 13

Slide 13 text

14 14 サーバーレスの定義 サーバーレス・コンピューティ ング(Serverless computing)と は、クラウド・プロバイダーが アプリケーションに必要なマシ ン・リソースの割り当てを動的 に管理し、事前に購⼊されたこ とに基づく請求ではなく、各ア プリケーション要求を満たすた めに使⽤される個々のリソース 量に基づいた請求を⾏うような クラウド・コンピューティング の実⾏モデルである。 出典: フリー百科事典『ウィキペディア(Wikipedia)』

Slide 14

Slide 14 text

15 15 Networking Storage Servers Virtualization O/S Middleware Runtime Data Applications Networking Storage Servers Virtualization O/S Middleware Runtime Data Applications Networking Storage Servers Virtualization O/S Middleware Runtime Data Applications ベンダーが提供 ユーザーが準備 IaaS PaaS (Serverless含む) SaaS クラウドサービスの種類

Slide 15

Slide 15 text

16 16 PaaS FaaS (Serverless) PaaSとFaaS(サーバーレス)の違い Middleware Runtime(サービス作成) Data Applications Runtime(サービス提供) ベンダーが提供 ユーザーが準備 Middleware Runtime(関与不要) Data Applications

Slide 16

Slide 16 text

17 17 独⾃アプリを動かせるクラウドサービスの形態

Slide 17

Slide 17 text

18 通常のPaaSでは

Slide 18

Slide 18 text

19 Hardware Firmware OS プログラム⾔語毎のruntime (virtual machine) プログラム DBなどの ミドルウェア CPU メモリ ストレージ ネットワークI/O OS ランタイム可動時間 (使⽤メモリ量) 従量課⾦要素 サーバーリソース →

Slide 19

Slide 19 text

20 サーバーレスでは

Slide 20

Slide 20 text

21 Hardware Firmware OS プログラム⾔語毎のruntime (virtual machine) プログラム DBなどの ミドルウェア アプリが呼び出された回数 実⾏している時間 従量課⾦要素 サーバーリソースのことは考えなくて良い=サーバーレス

Slide 21

Slide 21 text

22 22 FaaS(サーバーレス)の特徴 ü コードを書き、それを連携させるだけで⼀連の 処理を実⾏できる ü 実⾏に必要なサーバーはクラウドサービスプロ バイダー側で⾃動的に割り当てる。またスケー ルアップ(アウト)も必要に応じて⾃動的に対 処する ü 実⾏が終了すると⾃動的にインスタンスが消去 される。従って、課⾦はコードが動いていた時 間だけになる ü さまざまなサービスがコードを起動するトリ ガーとして⽤意されている。それを利⽤して定 期的、あるいは何らかのイベントを起点にサー ビスを起動できる

Slide 22

Slide 22 text

23 FaaS(サーバーレス)の注意点 ü 実⾏環境はベンダー管理なので個別にチューニ ングの余地が無い ü 提供ベンダーに依存するが、対応しているプロ グラミング⾔語が限定的 ü 原則設計思想がFunction/Action、つまり個の関 数の集合体となるので、コールバックの処理に 対する考慮が必要

Slide 23

Slide 23 text

1. サーバーレスとは 2. IBM Cloud Functionsについて 3. IBM Cloud Functionsの使い⽅ 4. ハンズオン

Slide 24

Slide 24 text

25 25 meets

Slide 25

Slide 25 text

26 © 2018 IBM Corporation IBM Cloud FunctionsはIBMが提供するFaaS (Serverless)のサービスです。 IBM Cloudの特徴の⼀つとして、できるだけオープンな技術で基盤を作り、ユーザーがベンダーロック インされない環境として利⽤できるようにしている点があります。 IBM Cloud Functionsではオープンソースの「Apache OpenWhisk」(https://openwhisk.apache.org/) を使っています。よって、Apache OpenWhiskと同じ操作で⾃分が所望するサービスを作成できます。 IBM Cloud Functionsの概要

Slide 26

Slide 26 text

27 IBM Cloud www getXXXinfo Create Action • Action(Function)を直接クラウド上に作成するだけ • 実⾏環境とか気にしなくてOK makeXXXfile convertXXXdata PHP, Node.js, Python, Swift Call Action IBM Cloud Functionsのイメージ

Slide 27

Slide 27 text

29 29 IBM Cloud Functions (OpenWhisk) 従来型開発との⽐較

Slide 28

Slide 28 text

Cloud Functions の⽤語

Slide 29

Slide 29 text

Namespace/ネームスペース 名前空間は、アクションやトリガーなどの Cloud Functions エンティティーを ⼊れるものであり、リソース・グループに属しています。 名前空間に対するアクセス権限をユーザーに付与すると、そのユーザーが Cloud Functions エンティティーにアクセスできるようになります。

Slide 30

Slide 30 text

Action/アクション アクションは、1 つの特定のタスクを実⾏する 1 ⽚のコードです。 アクション は、任意の⾔語で書くことができます。例えば、JavaScript や Swift コードの ⼩さなスニペットにしたり、Docker コンテナーに組み込まれたカスタム・バイ ナリー・コードにしたりできます。 ユーザーは、ソース・コードまたは Docker イメージとして Cloud Functions にアクションを提供します。 アクションは、Cloud Functions API、CLI、または iOS SDK を使⽤して直接呼 び出されたときに処理を実⾏します。 また、アクションは、IBM Cloud サービ スおよびサード・パーティー・サービスからのイベントに、トリガーを使⽤し て⾃動的に応答することもできます。

Slide 31

Slide 31 text

Sequence/シーケンス ⼀連のアクションをチェーニングして、コードを記述することなく、シーケン スにまとめることができます。 シーケンスは、順番に呼び出されるアクション のチェーンであり、1 つのアクションの出⼒が次のアクションへの⼊⼒として 渡されます。 シーケンスを作成すれば、既存のアクションを組み合わせて、素 早く簡単に再利⽤できます。 シーケンスは、アクションと同様に、REST API から呼び出したり、イベントに応答して⾃動的に呼び出したりできます。

Slide 32

Slide 32 text

Event/イベント イベントの例には、データベース・レコードへの変更、IoT センサーによる⼀ 定の気温を超えたことの感知、GitHub リポジトリーへの新規コードのコミット、 Web アプリまたはモバイル・アプリからの単純な HTTP 要求などがあります。 外部および内部イベント・ソースからのイベントは、トリガーを介して送信さ れ、ルールによってアクションがそうしたイベントに反応できます。

Slide 33

Slide 33 text

Trigger/トリガー トリガーは、ある種のイベントに対して指定されたチャネルです。 トリガーと は、ユーザーから起動されるか、イベント・ソースによって起動されるかに関 わらず、特定のタイプのイベントに対応するための宣⾔です。

Slide 34

Slide 34 text

Rule/ルール ルールは、トリガーをアクションと関連付けます。 トリガーが起動するたびに、 ルールはトリガー・イベントを⼊⼒として使⽤し、関連付けられているアク ションを呼び出します。 適切なルール・セットを使⽤して、1 つのトリガーの イベントで複数のアクションを呼び出すことも、複数のトリガーのイベントに 対して 1 つのアクションを応答として呼び出すこともできます。

Slide 35

Slide 35 text

39 39 IBM Cloud services

Slide 36

Slide 36 text

Quiz

Slide 37

Slide 37 text

1. Functionとはなんですか︖ A. アクションのこと。 B. 外部APIを呼び出すコードの⽂字列。 C. ⼀連のタスクを実⾏する⼀連のアクション、ルール、 およびトリガー。 D. 上記のどれでもない。

Slide 38

Slide 38 text

1. Functionとはなんですか︖ A. アクションのこと。 B. 外部APIを呼び出すコードの⽂字列。 C. ⼀連のタスクを実⾏する⼀連のアクション、ルール、 およびトリガー。 D. 上記のどれでもない。

Slide 39

Slide 39 text

2. シーケンスとはなんですか︖ A. 任意の順序で呼び出すことができる共有パッケージ 内のアクションのグループ。 B. 順番に呼び出される⼀連のアクション。1つのアク ションの出⼒が次のアクションに渡される。 C. アクションをトリガーするために使⽤される⼀連の イベント。 D. 上記のどれでもない。

Slide 40

Slide 40 text

2. シーケンスとはなんですか︖ A. 任意の順序で呼び出すことができる共有パッケージ 内のアクションのグループ。 B. 順番に呼び出される⼀連のアクション。1つのアク ションの出⼒が次のアクションに渡される。 C. アクションをトリガーするために使⽤される⼀連の イベント。 D. 上記のどれでもない。

Slide 41

Slide 41 text

3. ネームスペース(名前空間)とはな んですか︖ A. リソースグループに属するアクションやトリガーな どのCloud Functionsエンティティのグループ。 B. アクションのトリガーのソース。例︓データベース の変更。 C. 別のIBM Cloudサービスとの統合。 D. 上記のどれでもない。

Slide 42

Slide 42 text

3. ネームスペース(名前空間)とはな んですか︖ A. リソースグループに属するアクションやトリガーな どのCloud Functionsエンティティのグループ。 B. アクションのトリガーのソース。例︓データベース の変更。 C. 別のIBM Cloudサービスとの統合。 D. 上記のどれでもない。

Slide 43

Slide 43 text

4. イベントの例として適切なものはど れですか︖ A. GitHubへのコミット。 B. アクションの呼び出し。 C. 特定のタスクを実⾏するコード。 D. 上記のどれでもない。

Slide 44

Slide 44 text

4. イベントの例として適切なものはど れですか︖ A. GitHubへのコミット。 B. アクションの呼び出し。 C. 特定のタスクを実⾏するコード。 D. 上記のどれでもない。

Slide 45

Slide 45 text

5. トリガーとはなんですか︖ A. アクションに関連付けたルール。 B. アクションの結果。 C. イベントへ関連させた反応。 D. 上記のどれでもない。

Slide 46

Slide 46 text

5. トリガーとはなんですか︖ A. アクションに関連付けたルール。 B. アクションの結果。 C. イベントへ関連させた反応。 D. 上記のどれでもない。

Slide 47

Slide 47 text

58 58

Slide 48

Slide 48 text

59 59

Slide 49

Slide 49 text

1. サーバーレスとは 2. IBM Cloud Functionsについて 3. IBM Cloud Functionsの使い⽅ 4. ハンズオン

Slide 50

Slide 50 text

65 © 2018 IBM Corporation IBM Cloudへログイン IBM Cloud へログインし、メニューからFunctionsを選択します。

Slide 51

Slide 51 text

66 © 2018 IBM Corporation Functionsの開始画⾯ Functionsのダッシュボードから各操作を実施します。

Slide 52

Slide 52 text

67 © 2018 IBM Corporation Functionsの6つのメニュー

Slide 53

Slide 53 text

68 © 2018 IBM Corporation Functionsでアプリを作成 IBM Cloud Functionsでのサーバーレスアプリの開発は、⼆つのステップに分かれます。 (1)アクションの作成 (2)トリガーやAPIによる呼び出しの設定 まず、実⾏させたい処理に合わせてコードを記述します。 このコードは「アクション」としてIBM Cloud Functionsに登録します。 次に、登録したコードを呼び出す条件を設定します。 外部のイベントやHTTPリクエストを条件とすることで、アクションの実⾏を⾃動化できます。 なお、IBM Cloud Functionsのアプリは「GUI」「CLI」どちらのユーザーインタフェースを利⽤して も開発できますが、ここでは、GUIを⽤いた開発の⽅法を解説します。 Functionsの開始画⾯中央にある「作成の開始」ボタンをクリックして始めます。

Slide 54

Slide 54 text

69 © 2018 IBM Corporation アクションの作成 「アクションの作成」リンクをクリックします。開いた画⾯で「アクション名」に任意 の 名 前 (こ こ で は「Hello Dojo」)を ⼊ ⼒ し ま す。「パ ッケージを囲む」はそのままにして、「ラン タイム」で開発する⾔語やバージョン(ここでは「Node.js 10」)を選び、「作成」をクリックし ます。

Slide 55

Slide 55 text

70 © 2018 IBM Corporation アクションの作成 画⾯中央のエディタでコードを編集できます。 コードを編集してアクションを開発するときに、気を付けなければならない点が三つあります。 1. アクションが呼び出されると、まず「main」関数が実⾏されるため、main関数が必須 2. アクションへの⼊⼒および出⼒はともに「JSON」形式。データ構造は⾃由に指定できる 3. IBM Cloud Functionsではアクションが呼び出されるたびにインスタンスが作成され、処理が 完了するとインスタンスは破棄される。よって、アプリはステートレスに記述する ずはコードを書き換えずに、 このアクションを動かしてみ ましょう。右上の「起動」を クリックすると、アクション を実⾏できます。

Slide 56

Slide 56 text

71 © 2018 IBM Corporation アクションの作成 右側に結果のウィンドウが表⽰され、「Hello World」のメッセージが確認できます。

Slide 57

Slide 57 text

72 © 2018 IBM Corporation アクションの更新 次にコードを書き換えてみましょう。 アクションが呼び出されたときに「パラメーター」を渡すことも可能です。 次のように、コードを書き換えて「保存」ボタンをクリックします。 「name」というパラメーターが渡された場合に、出⼒を変更するようなコードを追加しています。 function main(params) { if (params.name) { return { message: 'Hello ' + params.name }; } return { message: 'Hello Dojo' }; }

Slide 58

Slide 58 text

73 © 2018 IBM Corporation アクションの更新 アクションに渡すパラメーターを設定します。 右上の「⼊⼒の変更」をクリックし、次のようにJSON形式でパラメーターを⼊⼒します。 「Taiji」の部分は各⾃好きな名前に置き換えてください。 「適⽤」ボタンをクリックし、再度「起動」ボタンをクリックします。 パラメーターが反映され、結果のメッセージが変わりました。 { "name" : ”Taiji"}

Slide 59

Slide 59 text

74 © 2018 IBM Corporation アクションをつなげるシーケンス アクションにパラメーターを渡せる特徴を使って、アクションを複数つなげることも可能です。 複数のアクションをつなげたものを「シーケンス」と呼びます。 シーケンスもIBM Cloud Functions内では、アクションの⼀つとして扱われます。

Slide 60

Slide 60 text

75 © 2018 IBM Corporation トリガーの作成 アクションの呼び出し⽅法を設定します。 まず「トリガー」を作成します。トリガーは、アクションを実⾏するための条件です。トリガー を使うと、イベントドリブン(逐次駆動)でアクションを呼び出せます。

Slide 61

Slide 61 text

76 © 2018 IBM Corporation トリガーの作成 次にタイマーを設定します。 ここでは「UTC分」の右側にあるプルダウンから「2分毎」を選択します。 「作成ボタン」をクリックするとトリガーが作成されます。

Slide 62

Slide 62 text

77 © 2018 IBM Corporation トリガーとアクションの関連付け トリガーとアクションをひも付けるために「ルール」を作成します。 画⾯右上にある「追加」をクリックし、接続するアクションを設定します。 「既存の(数字)の選択」を選んで、プルダウンメニューから、先 ほ ど 作 成 し た「Hello Dojo」ア ク シ ョ ン(Default Package/Hello Dojo)を選択します。「追加」ボタンをクリックす ると、2分ごとに「Hello World」アクションが実⾏されるようになります。

Slide 63

Slide 63 text

78 © 2018 IBM Corporation 定義済みのアクション IBM Cloud Functionsには事前定義済みのアクションも⽤意されています。 例えば、「IoT Gateway」アクションを使⽤すれば、Raspberry PiのようなIoTデバイスとの連携 もできます。

Slide 64

Slide 64 text

79 © 2018 IBM Corporation アクションのAPI呼び出し IBM Cloud Functionsで作ったアクションを外部サービスとWebhookで連携したい、あるいは⾃社 アプリのバックエンドサービスとして利⽤したいなど、アクションを「HTTPリクエスト」で呼び 出したいケースはよくあるでしょう。 IBM Cloud Functionsでは、アクションをAPI化する⽅法が複数提供されています。 作成したトリガーの画⾯メニューから「エンドポイント」を選択

Slide 65

Slide 65 text

80 © 2018 IBM Corporation より細かなAPI設定 例えばレート制限やOAuth認証といった機能を実現したい場合は、APIゲートウエイの機能を利⽤ します。IBM Cloud Functionsではゲートウエイ機能を無料で使えるのも⼤きな特徴です。 APIを限られた利⽤者や企業に公開したい場合は、この機能を使うのがよいでしょう。 作成したトリガーの画⾯メニューから「エンドポイント」を選択

Slide 66

Slide 66 text

81 © 2018 IBM Corporation 認証不要でのアクション呼び出し ⾃社のWebアプリのバックエンド処理で使⽤する場合は、認証なしで呼び出して容易に実装した いこともあるでしょう。そのようなケースでは、「Webアクション」が利⽤できます。 作成したアクションの画⾯メニューから「エンドポイント」を選択しWebアクションを有効化する

Slide 67

Slide 67 text

82 © 2018 IBM Corporation Action内から外部Web APIを呼び出してみる もちろん、Cloud FunctionsのActionの処理の中で外部のWeb APIを呼び出すこともできます。 以下のコードをアクションに定義して実⾏してみましょう。 ※ APIのURLは私のAPIキーを使ったものなので今後使えなくなります。 let rp = require('request-promise') function main(params) { const options = { uri: "https://api.openweathermap.org/data/2.5/weather?q=tokyo&appid=f86e0635d558583d401a67b38b3a6c1d", json: true } return rp(options) .then(res => { return { response: res } }) }

Slide 68

Slide 68 text

83 © 2018 IBM Corporation 実⾏されたアクションの確認 Functions画⾯のモニターメニューから実⾏されたアクションを確認することができます。

Slide 69

Slide 69 text

1. サーバーレスとは 2. IBM Cloud Functionsについて 3. IBM Cloud Functionsの使い⽅ 4. ハンズオン

Slide 70

Slide 70 text

ハンズオン 1. 画像仕分けサービスの作成 https://github.com/IBMDeveloperTokyo/functions-image- automatic-sorting

Slide 71

Slide 71 text

参考リンク 1. IBM Cloud Functions⼊⾨ https://cloud.ibm.com/docs/openwhisk?topic=cloud- functions-getting-started&locale=ja 2. Knativeとは何か https://developer.ibm.com/jp/new-builders/knative/ 3. Knativeチュートリアル http://ibm.biz/knative-tut-01

Slide 72

Slide 72 text

アンケート こちらからアンケートへのご回答をお願いします︕

Slide 73

Slide 73 text

免責事項 88 IBM Developer Dojoは開発者の⽅を対象に、IBM Cloudを主とした技術情報をお伝えする⽬的で開催しています。 講師や運営スタッフにより、開催毎に最適と判断した内容でお届けしています。 現在、ハンズオンを伴う講義はお客様の費⽤負担がない環境と⼿順でご案内しています。講義終了後、不要に なりました制作物はお客様ご⾃⾝で削除をお願いいたします。クレジットカードの登録が伴わない場合、費⽤は ⼀切発⽣致しませんが、ご登録いただいたお客様はご注意ください。 講師陣はみなさまの利⽤状況を個別に確認することはできません。 ご理解とご協⼒をお願いいたします。 利⽤したサービスの削除⽅法については講義の中でご案内します。 ご不明な点がございましたら、当⽇確認をお願いいたします。 講義終了後、 IBM Developer Dojoに関するお問い合わせは「Slack」にお願いします。それ以外のIBM Cloudの お問い合わせにつきましては、弊社サポートセンターまで、次のいづれかの⽅法でお問い合わせください。 IBM Cloudダッシュボードの「サポート」メニューから「Case」を作成し、英語でご記⼊ください IBM Cloudサポートセンター「相談する」ボタンからチャットまたは電話でご連絡ください https://www.ibm.com/jp-ja/cloud/support ご参加ありがとうございました。