Slide 1

Slide 1 text

#serverlessfukuoka Azureのコアサーバーレス Azure Functions 2024/02/17 Serverless Meetup Fukuoka Yuta Matsumura © 2024 Yuta Matsumura.

Slide 2

Slide 2 text

#serverlessfukuoka 松村 優大 (MLBお兄さん) Currently working for © 2024 Yuta Matsumura. 株式会社オルターブース Chief Technical Architect Microsoft MVP for Developer Technologies Microsoft Top Partner Engineer Award C#, PHP, Azure, GitHub が好き #fukuten #devblogradio の中の人 @tsubakimoto_s

Slide 3

Slide 3 text

#serverlessfukuoka © 2024 Yuta Matsumura.

Slide 4

Slide 4 text

#serverlessfukuoka Microsoft Azure • Microsoft が提供するパブリッククラウドサービスです • https://azure.microsoft.com/ • 商用提供は 2010年2月 で、今年で14周年になります • 日本国内リージョンは 2014年2月 に開設しました • 200以上のサービスが提供されています © 2024 Yuta Matsumura.

Slide 5

Slide 5 text

#serverlessfukuoka オンプレミス ネットワーク ストレージ サーバー 仮想化 OS ミドルウェア ランタイム データ アプリケーション ユ ー ザ ー 管 理 IaaS ネットワーク ストレージ サーバー 仮想化 OS ミドルウェア ランタイム データ アプリケーション ユ ー ザ ー 管 理 ベ ン ダ ー 管 理 PaaS ネットワーク ストレージ サーバー 仮想化 OS ミドルウェア ランタイム データ アプリケーション ユ ー ザ ー 管 理 ベ ン ダ ー 管 理 SaaS ネットワーク ストレージ サーバー 仮想化 OS ミドルウェア ランタイム データ アプリケーション ベ ン ダ ー 管 理 © 2024 Yuta Matsumura.

Slide 6

Slide 6 text

#serverlessfukuoka 1. フルマネージドサービス • サーバーの“管理”が不要 2. 柔軟なスケーラビリティ • ゼロ~数万のスケール 3. 従量課金モデル • 実行に要した時間やリソースに対する課金 PaaS ネットワーク ストレージ サーバー 仮想化 OS ミドルウェア ランタイム データ アプリケーション ユ ー ザ ー 管 理 ベ ン ダ ー 管 理 © 2024 Yuta Matsumura.

Slide 7

Slide 7 text

#serverlessfukuoka Azure Serverless © 2023 Yuta Matsumura. Azure Kubernetes Service Azure Functions Azure Logic Apps Azure App Services Azure Container Apps © 2024 Yuta Matsumura.

Slide 8

Slide 8 text

#serverlessfukuoka © 2024 Yuta Matsumura.

Slide 9

Slide 9 text

#serverlessfukuoka © 2024 Yuta Matsumura. • 標準ランタイム • C#, Java, JavaScript, Python, PowerShell, TypeScript • カスタムハンドラー • Go, Rust, Deno など

Slide 10

Slide 10 text

#serverlessfukuoka イベントドリブン トリガー • 関数を実行する起点となる イベント バインド • 関数に別のリソースを接続する 方法 • データの出力先とすることも できる(複数可) © 2024 Yuta Matsumura.

Slide 11

Slide 11 text

#serverlessfukuoka public static class BlobFunction { [Function(nameof(BlobFunction))] [BlobOutput("sample/{name}-output.txt")] public static string Run( [BlobTrigger("sample/{name}")] string myTriggerItem, [BlobInput("sample/sample1.txt")] string myBlob, FunctionContext context) { return "blob-output content"; } } © 2024 Yuta Matsumura. Trigger Input binding Output binding 出力されるBlob

Slide 12

Slide 12 text

#serverlessfukuoka Architecture © 2024 Yuta Matsumura. App Service Front End ロードバ ランサー App Service Plan: Workerインスタンス Function App Function Host Language Worker 関数コード Request https://azure.github.io/jpazpaas/2023/08/24/azure-functions-words-relative-management.html

Slide 13

Slide 13 text

#serverlessfukuoka Azure Functions Core Tools • Azure Functions のローカル開発用 CLI • 関数作成、実行、テスト、デプロイなどを支援 • 現在は v4 の使用を推奨 © 2024 Yuta Matsumura. # via npm npm i -g azure-functions-core-tools@4 --unsafe-perm true # via winget winget install Microsoft.AzureFunctionsCoreTools # via homebrew brew tap azure/functions brew install azure-functions-core-tools@4

Slide 14

Slide 14 text

#serverlessfukuoka Deployment © 2024 Yuta Matsumura. GitHub Actions Azure Pipelines Visual Studio Visual Studio Code CLI

Slide 15

Slide 15 text

#serverlessfukuoka Patterns © 2024 Yuta Matsumura. https://learn.microsoft.com/ja-jp/azure/architecture/serverless-quest/reference-architectures

Slide 16

Slide 16 text

#serverlessfukuoka Durable Functions Azure Functions にステートフルな関数を実装することがで きる拡張機能 © 2024 Yuta Matsumura. https://learn.microsoft.com/ja-jp/azure/azure-functions/durable/

Slide 17

Slide 17 text

#serverlessfukuoka Flex Consumption plan • Azure Functionsの「痒い所に手が届く」新プラン • プライベートプレビュー中なので申込制です • 基本的にこのプランで いいんじゃない? © 2024 Yuta Matsumura. https://techcommunity.microsoft.com/t5/apps-on-azure-blog/announcing-azure-functions-flex-consumption-sign-up-for-the/ba-p/3983621

Slide 18

Slide 18 text

#serverlessfukuoka Azure Cosmos DB Change Feed © 2024 Yuta Matsumura.

Slide 19

Slide 19 text

#serverlessfukuoka Azure Cosmos DB Change feed • Azure Cosmos DB • グローバル分散型のマルチモデルデータベース • JSON Doc, PostgreSQL, Mongo DB, Cassandra, Gremlin, Table • Azure Cosmos DB のコンテナー(≒テーブル)に対する 変更をトリガーにして関数を実行する仕組み • 検知:アイテムの作成、アイテムの更新 © 2024 Yuta Matsumura. https://azure.microsoft.com/ja-jp/products/cosmos-db https://learn.microsoft.com/ja-jp/azure/cosmos-db/change-feed

Slide 20

Slide 20 text

#serverlessfukuoka [Function("Feed")] public void Run( [CosmosDBTrigger( databaseName: "ToDoList", containerName: "Items", Connection = "CosmosDbConnectionString", LeaseContainerName = "leases", CreateLeaseContainerIfNotExists = true)] IReadOnlyList input) { if (input != null && input.Count > 0) { _logger.LogInformation(input[0].id); _logger.LogInformation(input[0].description); } } © 2024 Yuta Matsumura. Cosmos DB binding 変更アイテムの情報

Slide 21

Slide 21 text

#serverlessfukuoka © 2024 Yuta Matsumura. https://learn.microsoft.com/ja-jp/azure/architecture/databases/idea/serverless-apps-using-cosmos-db

Slide 22

Slide 22 text

#serverlessfukuoka Azure Functions x OpenAI © 2024 Yuta Matsumura. New

Slide 23

Slide 23 text

#serverlessfukuoka Microsoft.Azure.WebJobs.Extensions.OpenAI • Azure Functions に OpenAI や Azure OpenAI Service のバイ ンドを実装する拡張機能 • バインドを通じて以下の機能を利用可能 • Text completions, Chat bots, Assistants • Embeddings generators, Semantic search • 実験的な(experimental)プロジェクト © 2024 Yuta Matsumura. https://github.com/Azure/azure-functions-openai-extension/ https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.OpenAI

Slide 24

Slide 24 text

#serverlessfukuoka public class WhoIs { [FunctionName(nameof(WhoIs))] public static IActionResult Run( [HttpTrigger( AuthorizationLevel.Function, Route = "whois/{name}")] HttpRequest req, [TextCompletion("Who is {name}?")] TextCompletionResponse response) { var content = response.Content; return new OkObjectResult(content); } } © 2024 Yuta Matsumura. OpenAI binding OpenAIの回答

Slide 25

Slide 25 text

#serverlessfukuoka © 2024 Yuta Matsumura. 大谷翔平は、メジャーリーグベースボール(MLB)のロサンゼルス・エンゼル スでプレーする日本のプロ野球投手、指名打者です。MLB史上、先発投手と レギュラーを兼任したのは1919年のベーブ・ルース以来となる。

Slide 26

Slide 26 text

#serverlessfukuoka © 2024 Yuta Matsumura. こんな構成をデプロイしたい

Slide 27

Slide 27 text

#serverlessfukuoka Azure Developer CLI (azd) • Azure 向けに構成された IaC (bicep) やアプリケーションに 関するワークフローを実行するためのコマンドライン • 「よくある構成」はテンプレート化されている © 2024 Yuta Matsumura. https://learn.microsoft.com/ja-jp/azure/developer/azure-developer-cli/overview コマンド 内容 azd init アプリケーションの初期化 azd provision Azure リソースのプロビジョニング (構成) azd deploy アプリケーションのデプロイ azd up azd provision & azd deploy

Slide 28

Slide 28 text

#serverlessfukuoka © 2024 Yuta Matsumura. https://azure.github.io/awesome-azd/

Slide 29

Slide 29 text

#serverlessfukuoka ご清聴ありがとうございました © 2024 Yuta Matsumura.