Successfully reported this slideshow.
Your SlideShare is downloading. ×

20190731 Azure Functions x Line at Azure Tech Lab #4

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 35 Ad

20190731 Azure Functions x Line at Azure Tech Lab #4

Download to read offline

Azure Tech Lab #4 の登壇資料です。
Azure Functions と LINE を連携する一例をご紹介しました。
https://azure-tech-love.connpass.com/event/137321/

記載されている全ての情報は 2019年7月時点での情報です。

Azure Tech Lab #4 の登壇資料です。
Azure Functions と LINE を連携する一例をご紹介しました。
https://azure-tech-love.connpass.com/event/137321/

記載されている全ての情報は 2019年7月時点での情報です。

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Similar to 20190731 Azure Functions x Line at Azure Tech Lab #4 (20)

Advertisement

More from Issei Hiraoka (18)

Recently uploaded (20)

Advertisement

20190731 Azure Functions x Line at Azure Tech Lab #4

  1. 1. Azure Azure Functions x LINE Issei Hiraoka / @hoisjp Cloud Solution Architect – Microsoft Japan 2019/07/31 25min; Azure Tech Lab #4 https://azure-tech-love.connpass.com/event/137321/ Azure Serverless in Action
  2. 2. 平岡 一成 ひらおかいっせい 日本マイクロソフト株式会社 パートナー事業本部、パートナー技術統括本部 クラウドソリューションアーキテクト 担当領域 Azure Apps (Application Development) Web, API Server, PaaS, OSS, Container, Cognitive Services, NoSQL 経歴 • 2004年より、エンジニアとしてWebアプリケーション開発・運用プロジェクトに従事。 • 2012年に国内最大手EC事業会社に入社。サービスを支えるバックエンドAPIの開発・運用を行うグループマネー ジャを担当。大規模&高負荷システムの構築を得意とする。 • 2017年3月より現職。Azureパートナー向けの技術支援やPoC支援などを担当し、現在に至る。 自己紹介 @hoisjp hoisjp
  3. 3. de:code 2019 CD07 AWS 技術者向け Azure サーバーレス 日本マイクロソフト株式会社 クラウドプラクティス技術本部 クラウドソリューションアーキテクト 平岡 一成 LinkedIn: hoisjp Twitter: @hoisjp https://www.microsoft.com/ja- jp/events/decode/2019session/detail.aspx?sid=CD07
  4. 4. アジェンダ 前半戦 Serverless on Azure • Azure Functions • トリガー、バインドの利用方法 • 2つのホスティングプラン 後半戦 Azure Functions x LINE 連携で学ぶ サーバーレスシナリオ • LINE への応答(シンプル) • Azure Bot Service - Line Channel • LINE への応答(非同期) • LINE Front-end Framework (a.k.a. LIFF) • LIFF starter for App Service
  5. 5. Serverless on Azure 前半戦
  6. 6. Microsoft Azure におけるサーバーレス コンポーネント Azure Functions Logic Apps Azure Storage Cosmos DB Azure Active Directory コンピューティング ワークフロー オーケストレーション ストレージ データベース セキュリティと アクセス制御 Event Grid API Management Azure Stream Analytics Azure Bot Service Visual Studio クラウド メッセージング API の管理 分析 Intelligence 開発者ツール
  7. 7. Azure Functions とは サーバーを準備せずにコードを記述・実行できるた め、プログラミングに集中できる コードを実行した分だけ課金されるため、コストを 抑えることができる Azure 上の様々なストレージに、少ないコードで読 み書きできる 業務要件に応じたスケーリングが可能 C# / F# / JavaScript / Java / Python などの言 語をサポートするため、開発者のこれまでのスキル を活かすことができる Azure Functions イベント ドリブン型のサーバーレス コンピューティング
  8. 8. サーバーレス アプリケーションの例 Web アプリケーション アーキテクチャ IoT バック エンド SaaS 統合 モバイル バック エンド シングル ページ アプリから Functions を呼び出し Functions でユーザー 情報 に基づき、広告を決定 数百万のデバイスが Stream Analytics にデータを送信 Azure Cosmos DB に データを書き込み Functions で データを変換・構造化 OneDrive に Excel ファイルを 保存 Functions で Microsoft Graph API を使いコンテンツを分析 グラフを新規シート に作成 写真を撮ったときに Functions を呼び出し 画像を BLOB に保存 画像をモバイルに合わ せたサイズに変換 ページが完成
  9. 9. Azure Functions 入門
  10. 10. Azure Functions のコンセプト トリガーとバインディングを使ってAzure やその他の サービスで発生したイベントに応答するコードを記述 コードの実行を発火させる データの入出力用コードを単純化する機能
  11. 11. バインディングを用いたプログラミングモデル 関数アプリ 関数 関数 トリガーとバインドの定義 JavaScriptコード 関数アプリの構成 バインディング 拡張機能定義
  12. 12. { "disabled": false, "bindings": [ { "queueName": "myqueue-items", "connection": "StrgConnAppSetting", "name": "myQueueItem", "type": "queueTrigger", "direction": "in" }, // … { "name": "myInputBlob", "type": "blob", "path": “work/{queueTrigger}", "connection": "StrgConnAppSetting", "direction": "in" }, { "name": "myOutputBlob", "type": "blob", "path": “work/{queueTrigger}-Copy", "connection": "StrgConnAppSetting", "direction": "out“ } ] } function.json トリガーとバインドの定義
  13. 13. module.exports = function(context, myQueueItem, myInputItem, myOutputItem) { // ログ出力 context.log('Node.js Queue trigger function processed’, context.bindings.myQueueItem); // Blob の操作 context.bindings.myOutputBlob = context.bindings.myInputBlob; // 終了 context.done(); }; index.js JavaScript コード
  14. 14. 2. 複数のホスティングプラン 従量課金プラン App Service プラン 実行時にリソースが自動で割 り当てられる 専用環境で実行される • スケーリング:自動で無制限 • VNET 接続 不可 • 実行時間:最大10分 • コールドスタートあり • 料金:リソースの使用量と 実行回数に基づき計算 • スケーリング:ユーザが制御 数指定 or メトリックスベース • VNET 接続 可能 • 実行時間:最大無制限 • 常時接続可(Always on) • 料金:固定 (ユーザがコントロール可能)
  15. 15. アーキテクチャ Azure App Service と WebJobs が基盤 参考:Ignite 2018 セッション Azure Functions Internals App Service Dynamic Runtime Hosting, CI, Deployment Slots, Remote Debugging, etc. WebJobs Core Programing model, common abstractions WebJobs Extensions Trigger, input and output bindings Azure Functions Runtime (WebJobs Script) Dynamic Compilation, Language abstractions, etc. Language Runtime V1 (C#, Node.js, F#, PHP, Python, etc.) / V2 (C#, Node.js, Java) Code Config 配布用
  16. 16. サポートされるプログラミング言語とバージョン 言語 V1 V2 C# GA (.NET Framework 4.7) GA (.NET Core 2) JavaScript GA (Node 6) GA (Node 8 / Node 10) F# GA (.NET Framework 4.7) GA (.NET Core 2) Java - GA (Java 8) Python 試験段階 プレビュー (Python 3.6) TypeScript 試験段階 GA (JavaScript へのトランスパイリングによ る) PHP 試験段階 - バッチ (.cmd / .bat) 試験段階 - Bash 試験段階 - PowerShell 試験段階 プレビュー (PowerShell Core 6) V1 では、1つの関数アプリ内で複数の言語が利用できました。 V2 では、1 つの関数アプリ内で 1 つの言語という制約があります。 配布用
  17. 17. 言語ワーカーの実装は GitHub 上に公開 つまり、Issue や Pull Request の状況を確認できる 同様の課題が起きていないかわかる安心感 言語 URL JavaScript https://github.com/Azure/azure-functions-nodejs-worker Java https://github.com/Azure/azure-functions-java-worker Python https://github.com/Azure/azure-functions-python-worker PowerShell https://github.com/Azure/azure-functions-powershell-worker 配布用
  18. 18. Azure Functions x LINE 後半戦
  19. 19. イベント/メッセージングを扱うコンポーネントが多い 正しく使い分ける知識が必要 ✔️
  20. 20. イベント/メッセージングサービスの使い分け ポイントを以下に抜粋 Azure Event Grid、Event Hubs、Service Bus Storage キューと Service Bus キューの比較
  21. 21. イベント/メッセージングサービスの使い分け(料金) 料金単価 5000万操作あたり Queue Storage General Purpose v1 (トランザクション最適) キュー操作 (10,000 回あたり) LRS、GRS、RA-GRS 共通で ¥0.0404 ¥201.60 Queue Storage General Purpose v2 (ストレージ最適) キュー操作 (10,000 回あたり) LRS、GRS、RA-GRS 共通で ¥0.448 ¥2,240.00 Service Bus (Basic) 時間料金:0 100万回操作あたり:¥5.60 ¥280.00 Service Bus (Standard) 時間料金 730時間:¥1,098.94 ¥89.600/100 万操作 ¥1,098.94 + 操作分 = ¥4,414.14 Event Grid 100万操作単位:¥67.20 ¥3,353.28
  22. 22. Event Grid - フルマネージド イベントルーティングサービス Event Grid の概念 •イベント ソース • イベントの発生場所 •イベント ハンドラー • イベントの送信先 •トピック • 発行元がイベントを送信する エンドポイント •イベント サブスクリプション • イベントをルーティングする エンドポイント Media Service Blob Storage Azure Subscription Resource Group Event Hubs IoT Hub Service Bus カスタム トピック Logic Apps Azure Functions Azure Automation Webhook Queue Storage ハイブリッド 接続 Event Hubs イベント ソース イベント ハンドラー Event Grid トピック イベント サブスクリプション https://docs.microsoft.com/ja-jp/azure/event-grid/overview
  23. 23. イベント/メッセージングサービスの使い分け バインディング視点で見ると、(ドキュメント) Type V1 V2 トリガー 入力バインド 出力バインド Event Grid ✔️ ✔️ ✔️ Queue Storage ✔️ ✔️ ✔️ ✔️ Service Bus ✔️ ✔️ ✔️ ✔️ • Event Grid に出力バインドがサポートされていないので、 エンキューはライブラリが必要 • Azure CLI、PowerShell、REST、.NET、Java、Python、Node.js
  24. 24. LINE Messaging API 何かの処理 e.g. QnA Maker, Cognitive Service, ML model, etc LINE への応答(シンプル) 一つの Functions で、1. Webhook を受け取る、2. 応答メッセージを送る これでは課題がある。 Good? Yeah! HTTP POST HTTP POST POST https://api.line.me/v2/bot/message/reply { "replyToken":"nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", "messages": [ {"type":"text", "text":"Yeah!" } ] } 待たせてしまう
  25. 25. Azure Bot Service - Line Channel https://docs.microsoft.com/ja-jp/azure/bot-service/bot-service-channel-connect-line?view=azure-bot-service-4.0 何かの処理 e.g. QnA Maker, Cognitive Service, ML model, etc LINE Messaging API Good? Yeah! HTTP POST HTTP POST Azure Bot Service HTTP POST https://api.line.me/v2/bot/message/reply { "replyToken":"nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", "messages": [ {"type":"text", "text":"Yeah!" } ] } Yeah! Good? Webサーバの ように応答
  26. 26. LINE への応答(なるべく非同期) Event Grid と Service Bus / Queue を挟んで、まずは LINE へすぐに応答する Good? Yeah! HTTP POST EventGridClientHTTP POST 即レスポンス! 後から応答メッセージ LINE Messaging API コードサンプル:https://github.com/hoisjp/azfunc-line-sample
  27. 27. LINE Front-end Framework (a.k.a. LIFF) 通常のブラウザから遷移しても・・・ e.g. https://ishiraok-liff-starter.azurewebsites.net LINE app から表示すると・・・ e.g. line://app/1598355234-Lvd72yp5 LINE app のブラウザ から コンテキスト情報を 取得することができる
  28. 28. LIFF のバックエンドは何でもよい。当然 Azure でもよい。 line-liff-starter 1. App Service (Free Plan) に ワンクリックでデプロイできるようにサンプルを用意 https://github.com/hoisjp/line-liff-starter forked from line/line-liff-starter 2. または、静的ページをBlobでホスト 静的HTMLページ == HTTP ==> Azure Functions さらなる情報はこちらを参考に。 Qiita: LINE の LIFF 開発超入門 : LIFF SDK を使った Web アプリの開発
  29. 29. LINE 連携 参考ドキュメント Azure Bot Service :ボットを LINE に接続する https://docs.microsoft.com/ja-jp/azure/bot-service/bot-service-channel-connect- line?view=azure-bot-service-4.0 Messaging API リファレンス https://developers.line.biz/ja/reference/messaging-api/ LIFF API リファレンス https://developers.line.biz/ja/reference/liff/
  30. 30. NEW! コードサンプルが探しやすくなりました! 例:https://docs.microsoft.com/ja-jp/samples/browse/?products=azure-event-grid • ワンクリックで Azure へデプロイ可能に • もちろんそのままダウンロードも可能 • 直接GitHubのプロジェクトへ移動できるように • インスタントサーチ(+製品と言語で)
  31. 31. 例えば
  32. 32. まとめ
  33. 33. まとめ 前半戦 Serverless on Azure • Azure Functions • トリガー、バインドの利用方法 • 2つのホスティングプラン 後半戦 Azure Functions x LINE 連携で学ぶ サーバーレスシナリオ • LINE への応答(シンプル) • Azure Bot Service - Line Channel • LINE への応答(非同期) • LINE Front-end Framework (a.k.a. LIFF) • LIFF starter for App Service
  34. 34. Microsoft Learn Azure Functions のコースが追加されました! https://docs.microsoft.com/ja-jp/learn/ • アカウント不要で 無料のサンドボックスを利用 サーバーレス アプリケーションの作成 • Azure Functions を使用したサーバーレス ロジック の作成 • トリガーを使用して Azure 関数を実行する • 入力バインディングと出力バインディングを使用して Azure 関数を連結する
  35. 35. ◼ 本書に記載した情報は、本書各項目に関する発行日現在の Microsoft の見解を表明するものです。Microsoftは絶えず変化する市場に対応しなければならないため、 ここに記載した情報に対していかなる責務を負うものではなく、提示された情報の信憑性については保証できません。 ◼ 本書は情報提供のみを目的としています。 Microsoft は、明示的または暗示的を問わず、本書にいかなる保証も与えるものではありません。 ◼ すべての当該著作権法を遵守することはお客様の責務です。Microsoftの書面による明確な許可なく、本書の如何なる部分についても、転載や検索システムへの格納または挿入を行うことは、どのような形式または手段(電子的、機械的、複 写、レコーディング、その他)、および目的であっても禁じられています。 これらは著作権保護された権利を制限するものではありません。 ◼ Microsoftは、本書の内容を保護する特許、特許出願書、商標、著作権、またはその他の知的財産権を保有する場合があります。Microsoftから書面によるライセンス契約が明確に供給される場合を除いて、本書の提供はこれらの特許、商 標、著作権、またはその他の知的財産へのライセンスを与えるものではありません。 © 2019 Microsoft Corporation. All rights reserved. Microsoft, Windows, その他本文中に登場した各製品名は、Microsoft Corporation の米国およびその他の国における登録商標または商標です。 その他、記載されている会社名および製品名は、一般に各社の商標です。

×