Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Serverless/IBM Cloud Functionsを学ぶ
Search
Taiji HAGINO
PRO
October 02, 2019
Technology
0
420
Serverless/IBM Cloud Functionsを学ぶ
本資料はIBM Developer Dojo Serverless/Functions編のものになります。
Taiji HAGINO
PRO
October 02, 2019
Tweet
Share
More Decks by Taiji HAGINO
See All by Taiji HAGINO
Automatic Creation of Azure Environment Configuration Diagrams! with Datadog Cloudcraft
taijihagino
PRO
0
20
VS Code の静的分析でリアルタイムのコードフィードバックを取得
taijihagino
PRO
0
52
Backstage of Enterprise Conference
taijihagino
PRO
1
140
どの種は何の花を咲かす?DevRelのターゲットオーディエンスを知ることの意味
taijihagino
PRO
2
210
Datadogの便利な使い方 - 意外と知らない?CoScreenとCloudcraft
taijihagino
PRO
1
1.3k
DatadogとPagerDutyで改善するシステム障害対応
taijihagino
PRO
0
450
ソフトウェアチームのパフォーマンスを向上させる鍵: パイプラインのオブザーバービリティ
taijihagino
PRO
1
100
エンドツーエンドの可視性を実現するクエスト
taijihagino
PRO
1
370
JDDUG (Japan Datadog User Group)始動の舞台裏
taijihagino
PRO
2
260
Other Decks in Technology
See All in Technology
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.7k
ドメイン名の終活について - JPAAWG 7th -
mikit
33
20k
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
3.2k
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
130
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
1
320
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.6k
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
Lambdaと地方とコミュニティ
miu_crescent
2
370
TypeScript、上達の瞬間
sadnessojisan
46
13k
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
170
Taming you application's environments
salaboy
0
190
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
2
320
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Being A Developer After 40
akosma
86
590k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
890
Scaling GitHub
holman
458
140k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
Navigating Team Friction
lara
183
14k
Side Projects
sachag
452
42k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Bash Introduction
62gerente
608
210k
For a Future-Friendly Web
brad_frost
175
9.4k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Visualization
eitanlees
145
15k
Transcript
Serverless/IBM Cloud Functionsを学ぶ Taiji HAGINO (@taiponrock) Developer Advocate, IBM Tokyo
City Team
Taiji HAGINO Sr. Developer Advocate, IBM Specialist in Node-RED/Node.js, Swift,
Hyperledger Fabric @taiponrock フォローはお気軽に︕ 共著: はじめてのNode-RED, DevRel Q&A 連載: ⽉間 I/O (Node-RED 実践プログラミング)
City Leader AKIRA ONISHI City Team TAIJI HAGINO KYOKO NISHITO
AYA TOKURA NORIKO KATO Program Manager TOSHIO YAMASHITA Client Team YASUSHI OSONOI JUNKI SAGAWA DEVELOPER ADVOCATE in TOKYO Tokyo Team is a part of Worldwide Developer Advocate Teams!
学習の⽬的とゴール ⽬的 Serverless/FaaSの概要について理解し、 IBM Cloud Functionsを使えるようになる ゴール IBM Cloud Functionsによるアプリケー
ションの開発⽅法を理解する このコースを学ぶ⽅の想定スキル Webアプリケーション開発経験者の⽅、 データベースの知識をお持ちの⽅
事前準備 1. IBM Cloudアカウント(無料)の取得 2. Webブラウザー Chrome または Firefoxの導⼊
⽬次 1. サーバーレスとは 2. IBM Cloud Functionsについて 3. IBM Cloud
Functionsの使い⽅ 4. ハンズオン
⽬次 1. サーバーレスとは 2. IBM Cloud Functionsについて 3. IBM Cloud
Functionsの使い⽅ 4. ハンズオン
9 9 サーバーレスの定義 サーバーレス・コンピューティ ング(Serverless computing) とは、クラウド・プロバイダー がアプリケーションに必要なマ シン・リソースの割り当てを動 的に管理し、事前に購⼊された
ことに基づく請求ではなく、各 アプリケーション要求を満たす ために使⽤される個々のリソー ス量に基づいた請求を⾏うよう なクラウド・コンピューティン グの実⾏モデルである。 出典: フリー百科事典『ウィキペディア(Wikipedia)』
10 10 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 クラウドサービスの種類
11 11 PaaS FaaS (Serverless) PaaSとFaaS(サーバーレス)の違い Middleware Runtime (サービス作成) Data
Applications Runtime (サービス提供) ベンダーが提供 ユーザーが準備 Middleware Runtime (関与不要) Data Applications
12 12 独⾃アプリを動かせるクラウドサービスの形態
13 通常のPaaSでは
14 Hardware Firmware OS プログラム⾔語毎のruntime (virtual machine) プログラム DBなどの ミドルウェア
CPU メモリ ストレージ ネットワークI/O OS ランタイム可動時間 (使⽤メモリ量) 従量課⾦要素 サーバーリソース →
15 サーバーレスでは
16 Hardware Firmware OS プログラム⾔語毎のruntime (virtual machine) プログラム DBなどの ミドルウェア
アプリが呼び出された回数 実⾏している時間 従量課⾦要素 サーバーリソースのことは考えなくて良い=サーバーレス
17 17 FaaS(サーバーレス)の特徴 ü コードを書き、それを連携させるだけで⼀連の 処理を実⾏できる ü 実⾏に必要なサーバーはクラウドサービスプロ バイダー側で⾃動的に割り当てる。またスケー ルアップ(アウト)も必要に応じて⾃動的に対
処する ü 実⾏が終了すると⾃動的にインスタンスが消去 される。従って、課⾦はコードが動いていた時 間だけになる ü さまざまなサービスがコードを起動するトリ ガーとして⽤意されている。それを利⽤して定 期的、あるいは何らかのイベントを起点にサー ビスを起動できる
18 FaaS(サーバーレス)の注意点 ü 実⾏環境はベンダー管理なので個別にチューニ ングの余地が無い ü 提供ベンダーに依存するが、対応しているプロ グラミング⾔語が限定的 ü 原則設計思想がFunction/Action、つまり個の
関数の集合体となるので、コールバックの処理 に対する考慮が必要
⽬次 1. サーバーレスとは 2. IBM Cloud Functionsについて 3. IBM Cloud
Functionsの使い⽅ 4. ハンズオン
20 20 meets
21 © 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の概要
22 IBM Cloud www getXXXinfo Create Action • Action(Function)を直接クラウド上に作成するだけ •
実行環境とか気にしなくてOK makeXXXfile convertXXXdata PHP, Node.js, Python, Swift Call Action IBM Cloud Functionsのイメージ
23 23
24 24
25 25 IBM Cloud services
26 26
27 27
28 28
29 29
30 30
31 31
32 32
33 33
34 34
35 35
36 36
37 © 2018 IBM Corporation FaaS(サーバーレス)を起動するためのトリガー IBM Cloud Functionsは、イベントドリブン(逐次駆動) でファンクションを起動できます。
起動のための「トリガー」は設定可能です。 例えば、ある特定の時間でデータベースの「Cloudant」が 更新されたときをトリガーとして指定できます。 まだ、設定できるトリガーはあまり多くありませんが、今 後増えていくでしょう。 ▪アクション同⼠をつなげて⼀つのAPIとして提供することも可能
⽬次 1. サーバーレスとは 2. IBM Cloud Functionsについて 3. IBM Cloud
Functionsの使い⽅ 4. ハンズオン
39 © 2018 IBM Corporation IBM Cloudへログイン IBM Cloud へログインし、メニューからFunctionsを選択します。
40 © 2018 IBM Corporation Functionsの開始画⾯ Functionsのダッシュボードから各操作を実施します。
41 © 2018 IBM Corporation Functionsの6つのメニュー
42 © 2018 IBM Corporation Functionsでアプリを作成 IBM Cloud Functionsでのサーバーレスアプリの開発は、⼆つのステップに分かれます。 (1)アクションの作成
(2)トリガーやAPIによる呼び出しの設定 まず、実⾏させたい処理に合わせてコードを記述します。 このコードは「アクション」としてIBM Cloud Functionsに登録します。 次に、登録したコードを呼び出す条件を設定します。 外部のイベントやHTTPリクエストを条件とすることで、アクションの実⾏を⾃動化できます。 なお、IBM Cloud Functionsのアプリは「GUI」「CLI」どちらのユーザーインタフェースを利⽤し ても開発できますが、ここでは、GUIを⽤いた開発の⽅法を解説します。 Functionsの開始画⾯中央にある「作成の開始」ボタンをクリックして始めます。
43 © 2018 IBM Corporation アクションの作成 「アクションの作成」リンクをクリックします。開いた画⾯で「アクション名」に任意 の 名 前
(こ こ で は「Hello Dojo」)を ⼊ ⼒ し ま す。「パ ッケージを囲む」はそのままにして、 「ランタイム」で開発する⾔語やバージョン(ここでは「Node.js 10」)を選び、「作成」をク リックします。
44 © 2018 IBM Corporation アクションの作成 画⾯中央のエディタでコードを編集できます。 コードを編集してアクションを開発するときに、気を付けなければならない点が三つあります。 1. アクションが呼び出されると、まず「main」関数が実⾏されるため、main関数が必須
2. アクションへの⼊⼒および出⼒はともに「JSON」形式。データ構造は⾃由に指定できる 3. IBM Cloud Functionsではアクションが呼び出されるたびにインスタンスが作成され、処理 が完了するとインスタンスは破棄される。よって、アプリはステートレスに記述する ずはコードを書き換えずに、 このアクションを動かしてみ ましょう。右上の「起動」を クリックすると、アクション を実⾏できます。
45 © 2018 IBM Corporation アクションの作成 右側に結果のウィンドウが表⽰され、「Hello World」のメッセージが確認できます。
46 © 2018 IBM Corporation アクションの更新 次にコードを書き換えてみましょう。 アクションが呼び出されたときに「パラメーター」を渡すことも可能です。 次のように、コードを書き換えて「保存」ボタンをクリックします。 「name」というパラメーターが渡された場合に、出⼒を変更するようなコードを追加しています。
function main(params) { if (params.name) { return { message: 'Hello ' + params.name }; } return { message: 'Hello Dojo' }; }
47 © 2018 IBM Corporation アクションの更新 アクションに渡すパラメーターを設定します。 右上の「⼊⼒の変更」をクリックし、次のようにJSON形式でパラメーターを⼊⼒します。 「Taiji」の部分は各⾃好きな名前に置き換えてください。 「適⽤」ボタンをクリックし、再度「起動」ボタンをクリックします。
パラメーターが反映され、結果のメッセージが変わりました。 { "name" : ”Taiji"}
48 © 2018 IBM Corporation アクションをつなげるシーケンス アクションにパラメーターを渡せる特徴を使って、アクションを複数つなげることも可能です。 複数のアクションをつなげたものを「シーケンス」と呼びます。 シーケンスもIBM Cloud
Functions内では、アクションの⼀つとして扱われます。
49 © 2018 IBM Corporation トリガーの作成 アクションの呼び出し⽅法を設定します。 まず「トリガー」を作成します。トリガーは、アクションを実⾏するための条件です。トリガー を使うと、イベントドリブン(逐次駆動)でアクションを呼び出せます。
50 © 2018 IBM Corporation トリガーの作成 次にタイマーを設定します。 ここでは「UTC分」の右側にあるプルダウンから「2分毎」を選択します。 「作成ボタン」をクリックするとトリガーが作成されます。
51 © 2018 IBM Corporation トリガーとアクションの関連付け トリガーとアクションをひも付けるために「ルール」を作成します。 画⾯右上にある「追加」をクリックし、接続するアクションを設定します。 「既存の(数字)の選択」を選んで、プルダウンメニューから、先 ほ
ど 作 成 し た「Hello Dojo」ア ク シ ョ ン(Default Package/Hello Dojo)を選択します。「追加」ボタンをクリッ クすると、2分ごとに「Hello World」アクションが実⾏されるようになります。
52 © 2018 IBM Corporation 定義済みのアクション IBM Cloud Functionsには事前定義済みのアクションも⽤意されています。 例えば、「IoT
Gateway」アクションを使⽤すれば、Raspberry PiのようなIoTデバイスとの連 携もできます。
53 © 2018 IBM Corporation アクションのAPI呼び出し IBM Cloud Functionsで作ったアクションを外部サービスとWebhookで連携したい、あるいは⾃ 社アプリのバックエンドサービスとして利⽤したいなど、アクションを「HTTPリクエスト」で呼
び出したいケースはよくあるでしょう。 IBM Cloud Functionsでは、アクションをAPI化する⽅法が複数提供されています。 作成したトリガーの画⾯メニューから「エンドポイント」を選択
54 © 2018 IBM Corporation より細かなAPI設定 例えばレート制限やOAuth認証といった機能を実現したい場合は、APIゲートウエイの機能を利⽤ します。IBM Cloud Functionsではゲートウエイ機能を無料で使えるのも⼤きな特徴です。
APIを限られた利⽤者や企業に公開したい場合は、この機能を使うのがよいでしょう。 作成したトリガーの画⾯メニューから「エンドポイント」を選択
55 © 2018 IBM Corporation 認証不要でのアクション呼び出し ⾃社のWebアプリのバックエンド処理で使⽤する場合は、認証なしで呼び出して容易に実装した いこともあるでしょう。そのようなケースでは、「Webアクション」が利⽤できます。 作成したアクションの画⾯メニューから「エンドポイント」を選択しWebアクションを有効化する
56 © 2018 IBM Corporation 実⾏されたアクションの確認 Functions画⾯のモニターメニューから実⾏されたアクションを確認することができます。
⽬次 1. サーバーレスとは 2. IBM Cloud Functionsについて 3. IBM Cloud
Functionsの使い⽅ 4. ハンズオン
Hands-on 1. 画像仕分けサービスの作成 https://ibm.biz/Dojo-Functions01 ※技術誌シェルスクリプトマガジンからの抜粋になります 2. Functionsを使ったiOSアプリケーションの作成 http://ibm.biz/functions-iosapp01
参考リンク 1. Knativeとは何か https://developer.ibm.com/jp/new-builders/knative/ 2. Knativeチュートリアル http://ibm.biz/knative-tut-01