Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Azure functions workshop_v1

355 views

Published on

Azure Functions Basic

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Azure functions workshop_v1

  1. 1. Microsoft Cloud Workshop
  2. 2. https://1drv.ms/p/s!Agfl5oa3EWv3go8O8lU0ZSKPfgh7bA
  3. 3. ...?
  4. 4. Azure Functions イベント・データ駆動の関数実行 サービス
  5. 5. Azureポータル AzureFunctionsポータル App Service Azure Storage Web Apps Azure Functions Runtime (WebJobs.Script.Host) Input Bindings Triggers Output Bindings FunctionFunctionFunction
  6. 6. 種別 サービス Triggers Input Output スケジュール(Timer) Azure Functions ✅ HTTP (REST/Webhooks) Azure Functions ✅ ✅ Blob ストレージ Azure Storage ✅ ✅ ✅ キュー Azure Storage ✅ ✅ テーブル Azure Storage ✅ ✅ テーブル Azure Mobile Apps Easy Tables ✅ ✅ NoSQL Database Azure Cosmos DB ✅ ✅ ✅ ストリーム / イベント Azure Event Hubs ✅ ✅ Push 通知 Azure Notification Hubs ✅ * * HTTP Output Bindings には HTTP Triggers が必要
  7. 7. 種別 サービス Triggers Input Output キュー / トピック Azure Service Bus Queue / Topic ✅ ✅ SaaS ファイル Box ✅ ✅ ✅ SaaS ファイル Dropbox ✅ ✅ ✅ SaaS ファイル OneDrive ✅ ✅ ✅ SaaS ファイル OneDrive for Business ✅ ✅ SaaS ファイル FTP ✅ ✅ SaaS ファイル SFTP ✅ ✅ SaaS ファイル Google Drive ✅ ✅ SendGrid email SendGrid ✅
  8. 8. 種別 サービス Triggers Input Output SMS テキスト Twilio ✅ Excel テーブル Microsoft Graph ✅ ✅ OneDrive ファイル Microsoft Graph ✅ ✅ Outlook メール Microsoft Graph ✅ Microsoft Graph イベント Microsoft Graph ✅ ✅ ✅ 認証トークン Microsoft Graph ✅ Microsoft Graph API サポートなど一部バインディングは Preview
  9. 9. Azure Functions /proxy1 /proxy2 /proxy3 http[s]://<otherfunc>/api/func1 http[s]://<webapps>/api/api1 http[s]://<othersite>/hook1 Request / Response 上書き処理
  10. 10. Func1 Func2 Func3 関数チェーン 非同期 HTTP APIファインアウト/ファインイン Start GetStatus DoWork Func2 Func1 Func3 ステートフル シングルトン 人による操作 承認要求 エスカレーション 承認
  11. 11. ローカルでのデバッグも可 (Azure Functions CLI を使用) Azure Functions ポータル (Web ブラウザーからの開発) Visual Studio (C#, Node.js はインテリセンスをサポート)
  12. 12. Workshopシナリオ ある企業の従業員情報(氏名、顔写真)を登録するためのコンポーネン トをAzure Function を用いて作成します。フローとしては、下記の図を 想定しています。
  13. 13. Workshop 手順 次の順番で実装を進めていきます。 ① HTTP Triggersによる氏名登録関数の作成 ② Azure Table Storage への Output Bindings を使用した情報保存 ③ Azure Queue Storage への Output Bindings を使用したイメージ情報 保存 ④ Azure Blob Storage への イメージ保存 ⑤ ImageResizer Triggers を使用した画像トリミング
  14. 14. ⓪事前準備 ⓪-1. Azure アカウント(無料アカウントでOK) ⓪-2. Function App作成 1. Azure Portalにログイン 2. Function App選択 3. Function App作成 • アプリ名:一意の名前 • サブスクリプション • リソースグループ • OS:Windows • ホスティングプラン:従量課金 • 場所:東日本 • ストレージアカウント:一意の名前位 • Application Insights:オフ
  15. 15. ⓪-3. Function 作成 1. 関数 + をクリック 2. Webhook + API、Csharpを選択 3. この関数を作成する ⓪事前準備
  16. 16. ⓪-4. Function テスト 1.「</>関数URLの取得」クリック 2.URLをコピー &name=<yourname> 4.ログを確認 ⓪事前準備
  17. 17. Workshop 手順 次の順番で実装を進めていきます。 ① HTTP Triggersによる氏名登録関数の作成 ② Azure Table Storage への Output Bindings を使用した情報保存 ③ Azure Queue Storage への Output Bindings を使用したイメージ情報 保存 ④ Azure Blob Storage への イメージ保存 ⑤ ImageResizer Triggers を使用した画像トリミング
  18. 18. ①HTTP Triggersによる氏名登録関数の作 成
  19. 19. ①-1. 新規関数作成 • 言語:C# • 名前:RegisterUser • 承認レベル:Anonymous
  20. 20. ①-2. 関数(run.csx)コード入力 using System.Net; public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log) { string firstname=null,lastname = null; dynamic data = await req.Content.ReadAsAsync<object>(); firstname = firstname ?? data?.firstname; lastname = data?.lastname; return (lastname + firstname) == null ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body") : req.CreateResponse(HttpStatusCode.OK, "Hello " + firstname + " " + lastname); }
  21. 21. ①-3. 関数実行(テスト) 要求本文に下記を追加して、実行 { "firstname" : "xxxxxx", "lastname" : "xxxxxx" }
  22. 22. Workshop 手順 次の順番で実装を進めていきます。 ① HTTP Triggersによる氏名登録関数の作成 ② Azure Table Storage への Output Bindings を使用した情報保存 ③ Azure Queue Storage への Output Bindings を使用したイメージ情報 保存 ④ Azure Blob Storage への イメージ保存 ⑤ ImageResizer Triggers を使用した画像トリミング
  23. 23. ② Azure Table Storage への Output Bindings を使用した情報保存
  24. 24. ②-1. Azure Storage Explorer の準備 1.Azure Storage Explorer のダウンロード、インストール http://storageexplorer.com/ 2.Azureアカウントを追加、 Azure に接続
  25. 25. ②-2. 関数をAzure Table Storageと統合(1) 1.RegisterUser関数の下の「統合」をクリック 2.Outputsの「+ New Output」をクリック 3.「Azure Table Storage」を選択
  26. 26. ②-2. 関数をAzure Table Storageと統合(2) • テーブルパラメータ名:objUserProfileTable • テーブル名: tblUserProfile • ストレージアカウント接続: 事前準備の時に作成したストレージアカウント 選択
  27. 27. ②-3. 関数(run.csx)コード入力 #r "Microsoft.WindowsAzure.Storage" using System.Net; using Microsoft.WindowsAzure.Storage.Table; public static async Task<HttpResponseMessage> Run(HttpRequestMessage req,TraceWriter log, CloudTable objUserProfileTable) { dynamic data = await req.Content.ReadAsAsync<object>(); string firstname= data.firstname; string lastname=data.lastname; UserProfile objUserProfile = new UserProfile(firstname,lastname); TableOperation objTblOperationInsert = TableOperation.Insert(objUserProfile); objUserProfileTable.Execute(objTblOperationInsert); return req.CreateResponse(HttpStatusCode.OK,"Thank you for Registering.."); } public class UserProfile : TableEntity { public UserProfile(string firstName,string lastName) { this.PartitionKey = "p1"; this.RowKey = Guid.NewGuid().ToString(); this.FirstName = firstName; this.LastName = lastName; } public UserProfile() { } public string FirstName { get; set; } public string LastName { get; set; } }
  28. 28. ②-4. 関数実行(テスト) 要求本文に下記を追加して、実行 { "firstname" : "xxxxxx", "lastname" : "xxxxxx" }
  29. 29. ②-5. Storage Explorer 確認 Azure Table Storage に、氏名が保存されているのを確認する
  30. 30. Workshop 手順 次の順番で実装を進めていきます。 ① HTTP Triggersによる氏名登録関数の作成 ② Azure Table Storage への Output Bindings を使用した情報保存 ③ Azure Queue Storage への Output Bindings を使用したイメージ情 報保存 ④ Azure Blob Storage への イメージ保存 ⑤ ImageResizer Triggers を使用した画像トリミング
  31. 31. ③Azure Queue Storage への Output Bindings を使用したイメージ情報 保存
  32. 32. ③-1. 関数をAzure Queue Storageと統合(1) 1.RegisterUser関数の下の「統合」をクリック 2.Outputsの「+ New Output」をクリック 3.「Azure Queue Storage」を選択
  33. 33. ③-1. 関数をAzure Queue Storageと統合(2) • メッセージパラメータ名: objUserProfileQueueItem • キュー名: userprofileimagequeue • ストレージアカウント接続: 事前準備の時に作成したストレージアカウント 選択
  34. 34. ③-2. ライブラリ(Newtonsoft.JSON)を 登録JSONデータをパースするためにライブラリ(Newtonsoft.JSON)を設定 project.json ファイルを作成し、下記を記述し保存
  35. 35. ③-3. 関数(run.csx)コード入力 #r "Microsoft.WindowsAzure.Storage" using System.Net; using Microsoft.WindowsAzure.Storage.Table; using Newtonsoft.Json; public static void Run(HttpRequestMessage req, TraceWriter log, CloudTable objUserProfileTable, out string objUserProfileQueueItem) { var inputs = req.Content.ReadAsStringAsync().Result; dynamic inputJson = JsonConvert.DeserializeObject<dynamic>(inputs); string firstname= inputJson.firstname; string lastname=inputJson.lastname; string profilePicUrl = inputJson.ProfilePicUrl; objUserProfileQueueItem = profilePicUrl; UserProfile objUserProfile = new UserProfile(firstname, lastname, profilePicUrl); TableOperation objTblOperationInsert = TableOperation.Insert(objUserProfile); objUserProfileTable.Execute(objTblOperationInsert); } public class UserProfile : TableEntity { public UserProfile(string firstname, string lastname, string profilePicUrl) { this.PartitionKey = "p1"; this.RowKey = Guid.NewGuid().ToString(); this.FirstName = firstname; this.LastName = lastname; this.ProfilePicUrl = profilePicUrl; } public UserProfile() { } public string FirstName { get; set; } public string LastName { get; set; } public string ProfilePicUrl {get; set;} }
  36. 36. ③-4. 関数実行(テスト) 要求本文に下記を追加して、実行 https://japan.zdnet.com/storage/2015/11/20/fe7bebc34f92245fa87ba60667dcaa13/watanabesan.JPG
  37. 37. ③-5. Storage Explorer 確認 Azure Queue Storageに、画像のURL、Azure Table Storage に氏名と画像URLが保存されているのを確認 する
  38. 38. Workshop 手順 次の順番で実装を進めていきます。 ① HTTP Triggersによる氏名登録関数の作成 ② Azure Table Storage への Output Bindings を使用した情報保存 ③ Azure Queue Storage への Output Bindings を使用したイメージ情報 保存 ④ Azure Blob Storage への イメージ保存 ⑤ ImageResizer Triggers を使用した画像トリミング
  39. 39. ④ Azure Blob Storage へのイメージ保存
  40. 40. ④-1. テンプレートから新規関数作成 • 関数 “+” をクリック、Queue trigger (C#)テンプレートを選択 • 言語: C# • 名前: CreateProfilePictures • キュー名: userprofileimagequeue • ストレージアカウント:事前準備の時に作成したストレージアカウント選択
  41. 41. ④-2. 関数をAzure Blob Storageと統合(1) 1.CreateProfilePictures関数の下の「統合」をク リック 2.Outputsの「+ New Output」をクリック 3.「Azure Blobストレージ」を選択
  42. 42. ④-2. 関数をAzure Blog Storageと統合(2) • Blobパラメータ名: outputBlob • パス: userprofileimagecontainer/{rand-guid} • ストレージアカウント接続: 事前準備の時に作成したストレージアカウント 選択
  43. 43. ④-3. 関数(run.csx)コード入力 using System; public static void Run(Stream outputBlob, string myQueueItem, TraceWriter log) { byte[] imageData = null; using (var wc = new System.Net.WebClient()) { imageData = wc.DownloadData(myQueueItem); } outputBlob.WriteAsync(imageData,0,imageData.Length); }
  44. 44. ④-4. 関数実行(テスト) テストは、RegisterUser関数を実行します。。要求本文に下記を追加して、実行 https://japan.zdnet.com/storage/2015/11/20/fe7bebc34f92245fa87ba60667dcaa13/watanabesan.JPG
  45. 45. ④-5. Storage Explorer 確認 Blobに、画像データが保存されているのを確認する。 画像データをダウンロードして、ペイントで表示
  46. 46. Workshop 手順 次の順番で実装を進めていきます。 ① HTTP Triggersによる氏名登録関数の作成 ② Azure Table Storage への Output Bindings を使用した情報保存 ③ Azure Queue Storage への Output Bindings を使用したイメージ情報 保存 ④ Azure Blob Storage への イメージ保存 ⑤ ImageResizer Triggers を使用した画像トリミング
  47. 47. ⑤ ImageResizer Triggers を使用した 画像トリミング
  48. 48. ⑤-1. テンプレートから新規関数作成 • 関数 “+” をクリック、Image resizer (C#)テンプレートを選択 • 言語: C# • 名前: CropProfilePictures • Azure BLOBストレージ triggerパス:userprofileimagecontainer/{name} • Azure BLOBストレージ outputパス:userprofileimagecontainer-sm/{name} • Azure BLOBストレージ outputパス:userprofileimagecontainer-md/{name} • ストレージアカウント:事前準備の時に作成したストレージアカウント選択
  49. 49. ⑤-2. 関数(run.csx)コード入力 using ImageResizer; public static void Run(Stream image, Stream imageSmall, Stream imageMedium) { var imageBuilder = ImageResizer.ImageBuilder.Current; var size = imageDimensionsTable[ImageSize.Small]; imageBuilder.Build(image, imageSmall, new ResizeSettings(size.Item1, size.Item2, FitMode.Max, null), false); image.Position = 0; size = imageDimensionsTable[ImageSize.Medium]; imageBuilder.Build(image, imageMedium, new ResizeSettings(size.Item1, size.Item2, FitMode.Max, null), false); } public enum ImageSize { Small, Medium } private static Dictionary<ImageSize, Tuple<int, int>> imageDimensionsTable = new Dictionary<ImageSize, Tuple<int, int>>() { { ImageSize.Small, Tuple.Create(100, 100) }, { ImageSize.Medium, Tuple.Create(200, 200) } };
  50. 50. ⑤-3. 関数実行(テスト) テストは、RegisterUser関数を実行します。。要求本文に下記を追加して、実行 https://japan.zdnet.com/storage/2015/11/20/fe7bebc34f92245fa87ba60667dcaa13/watanabesan.JPG
  51. 51. ⑤-4. Storage Explorer 確認 Blobに、画像データが保存されているのを確認する。 画像データをダウンロードして、画像のリサイズ(縮小)を確認。

×