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
Vue.js + Azure Functions + Azure AD でサーバーレスWebア...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ShinichiAoyagi
September 01, 2018
Programming
0
3.5k
Vue.js + Azure Functions + Azure AD でサーバーレスWebアプリを作る
プログラミング生放送勉強会第53回@GMOインターネット(大阪)のセッション資料です。
Azure Functionsを中心にサーバーレスについて説明します。
ShinichiAoyagi
September 01, 2018
Tweet
Share
Other Decks in Programming
See All in Programming
Vuetify 3 → 4 何が変わった?差分と移行ポイント10分まとめ
koukimiura
0
190
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
440
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
210
The free-lunch guide to idea circularity
hollycummins
0
350
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
150
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
140
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
1.1k
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
500
RailsのValidatesをSwift Macrosで再現してみた
hokuron
0
130
Fundamentals of Software Engineering In the Age of AI
therealdanvega
2
290
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
400
How to stabilize UI tests using XCTest
akkeylab
0
140
Featured
See All Featured
Making Projects Easy
brettharned
120
6.6k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.8k
Producing Creativity
orderedlist
PRO
348
40k
Statistics for Hackers
jakevdp
799
230k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
The Curious Case for Waylosing
cassininazir
0
280
Odyssey Design
rkendrick25
PRO
2
560
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
240
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
Transcript
Vue.js + Azure Functions + Azure AD で サーバーレスWebアプリを作る プログラミング生放送勉強会
第53回@GMOインターネット(大阪) 2018/9/1 青柳臣一
自己紹介(1) 株式会社ディーバ http://divakk.co.jp/ 大阪市中央区(淀屋橋) 代表取締役 青柳臣一
[email protected]
C#好き マイクロソフトMVPの受賞経験あり 日本初のMS MVP 6名のうちの1人(2002年)、当時は唯一の.NET系MVP 2002,2003 .NET / 2004~2007 C# / 2008 ASP.NET(Silverlight) 書籍 WindowsPhoneビジネスアプリケーション開発ガイド(2015年12月 秀和システム) Xamarinネイティブによるモバイルアプリ開発 C#によるAndroid/iOS UI制御の基礎Xamarinで作るAndroid/iOSアプリ(2017年9月 翔泳社)
自己紹介(2) 株式会社ディーバ オリジナルソフト開発 給排水設備CAD / 給水監視システム
C# WPF 受託開発 C# ASP.NET MVC/WebAPI / ASP.NET Core / WPF / UWP / Xamarin.iOS,Android (依頼があればVB、Java、PHP、Ruby、Node.jsなどなど) フレックスタイム制(コアタイムなし) / 客先常駐なし / 服装自由 / 在宅 勤務OK https://bit.ly/2wu25LL
サーバーレス(1) Webサーバーがない ファンクションが動くサーバーはある AWS Lambda Google Cloud Functions
Azure Functions 最近はサーバーレスデータベースなんてのも AWS Aurora Serverless / Google Cloud Datastore / Azure Cosmos DB
サーバーレス(2) メリット 管理はクラウドベンダー任せ リソースを無駄にしない 必要なときに必要な分だけ動く デメリット
管理はクラウドベンダー任せ コストパフォーマンスは? 起動が遅い?
フロントエンド ぶっちゃけお好みで Vue.js React Angular Vue.js
Visual Studio 2017 15.8 + Node.js開発 https://docs.microsoft.com/ja-jp/visualstudio/javascript/create-application-with-vuejs
Azure Functions サポートされている言語 C# / JavaScript F#(1.x)
/ Java(2.x Preview) 1.xはPython、PHP、TypeScript(いずれも試験段階) プラットフォーム 1.xはWindows 2.xはクロスプラットフォーム(Windows / Linux / MacOS) ランタイムは.NET Core 従量課金プランとApp Serviceプラン
アップロードファイルを受け取るファンクション(1) Vue.js npmでaxiosを入れる コードはこんな感じ→ <input type="file" name="file" @change="onFileChange"> <button
type="button" @click="onUploadClick">アップロード</button> data: { filename: null }, methods: { onFileChange: function (e) { this.filename = e.target.files[0]; }, onUploadClick: function () { let formData = new FormData(); formData.append("file", this.filename); axios .post("http://localhost:7071/api/FileUploadFunction", formData) .then(function (response) { }) .catch(function (error) { }); } }
アップロードファイルを受け取るファンクション(2) FileUploadFunction.cs マルチパートのファイルを受け取るのは以下のような感じ CORS local.settings.json [FunctionName("FileUploadFunction")] public
static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequestMessage req, ILogger log) { // マルチパートの最初のパートを読み込む var provider = new MultipartMemoryStreamProvider(); await req.Content.ReadAsMultipartAsync(provider); var file = provider.Contents.First(); var fileInfo = file.Headers.ContentDisposition; var fileData = await file.ReadAsByteArrayAsync(); return (ActionResult)new OkObjectResult(“OK”); } "Host": { "CORS": "*" }
Azure Functionsの開発 Azureポータルで ブラウザーで一通りのことができる Visual Studioで
ローカルで実行できる(Azure Functions Core Tools) Visual Studio for Macで ローカルで実行できる Visual Studio Codeで Windows / macOS / Linux その他
トリガー ファンクションが呼ばれるきっかけ HTTP Timer GitHub WebHook
Cosmos DB BLOBストレージ Queue EventHub
バインド 外部の事象(入力と出力)とコードの結合を指定する function.json C#の属性 { "bindings": [ {
"authLevel": "anonymous", "name": "req", "type": "httpTrigger", "direction": "in", "methods": [ "get", "post" ] }, { "name": "$return", "type": "http", "direction": "out" } ], "disabled": false } public static class Function1 { [FunctionName("Function1")] public static IActionResult Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")]HttpRequest req, ILogger log) { ... } }
Azureストレージ(1) 要するにハードディスクのこと BLOB シンプルなファイルシステム 一番よく使う(安い) ファイル Windowsのファイルシステムみたいなもの
テーブル 表形式
Azureストレージ(2) Azureストレージエミュレーター ローカルでAzureストレージを使う (たぶん) Azure Functions Core
Toolsに入ってる Azureストレージエクスプローラー https://azure.microsoft.com/ja-jp/features/storage-explorer/ Windows / macOS / Linux (いつの間にかElectron製になってた)
Azureストレージ(3) Azureストレージへの接続 接続文字列方式 Azure … アプリケーション設定
ローカル … local.settings.json 注意: 接続文字列が入っているアプリケーション設定の名称を設定す る(接続文字列を直接書くのではない) デフォルトではAzureWebJobsStorage
BLOBトリガーでサムネイル作成(1) BLOBトリガー 指定されたBLOBストーリーコンテナーにファイルが追加/変更された ら呼ばれる NuGetにあるCoreCompat.System.Drawing.v2 .NET
Standard 2.0 / .NET Coreで使えるSystem.Drawing (System.Drawing.Commonは未サポートの例外が出る) あとは普通に作るだけ
BLOBトリガーでサムネイル作成(2) FunctionName("ThumbnailFunction")] public static async void Run([BlobTrigger("samples-workitems/{name}", Connection = "")]Stream
myBlob, string name, ILogger log) { var srcImage = Image.FromStream(myBlob); var dstImage = new Bitmap(200, 200); using (var g = Graphics.FromImage(dstImage)) { g.DrawImage(srcImage, new Rectangle(0, 0, 200, 200), 0, 0, srcImage.Width, srcImage.Height, GraphicsUnit.Pixel, new ImageAttributes()); } byte[] bytes; using (var mem = new MemoryStream()) { dstImage.Save(mem, ImageFormat.Jpeg); mem.Seek(0, SeekOrigin.Begin); bytes = mem.ToArray(); } // BLOBストレージに書き込む var storageAccount = CloudStorageAccount.Parse(Configuration["AzureWebJobsStorage"]); var client = storageAccount.CreateCloudBlobClient(); var container = client.GetContainerReference("thumbnail"); var blob = container.GetBlockBlobReference(name); await blob.UploadFromByteArrayAsync(bytes, 0, bytes.Length); } }
認証を追加する Azureポータルで認証を設定するだけ Azure ActiveDirectory(Azure AD) Twitter / Facebook
/ Googleなど けど、SPAからどうやるの? がんばる(まだよくわかってない) https://docs.microsoft.com/ja-jp/azure/active-directory/develop/active-directory-authentication-libraries
ご清聴ありがとうございました。