サーバーレス アプリ: アーキテクチャ、パターン、および Azure の実装Serverless apps: Architecture, patterns, and Azure implementation

サーバーレス アプリの電子ブックのカバーを示すスクリーン ショット。

次の場所でダウンロードできます: https://aka.ms/serverless-ebookDOWNLOAD available at: https://aka.ms/serverless-ebook

発行者PUBLISHED BY

Microsoft 開発部門、.NET および Visual Studio 製品チームMicrosoft Developer Division, .NET, and Visual Studio product teams

A division of Microsoft CorporationA division of Microsoft Corporation

One Microsoft WayOne Microsoft Way

Redmond, Washington 98052-6399Redmond, Washington 98052-6399

Copyright © 2018 by Microsoft CorporationCopyright © 2018 by Microsoft Corporation

All rights reserved.All rights reserved. 本書のいかなる部分も、書面による発行者の許可なしに、いかなる形式または方法によっても、複製または伝送することを禁じます。No part of the contents of this book may be reproduced or transmitted in any form or by any means without the written permission of the publisher.

本書は "現状有姿" で提供され、著者の見解と意見を表しています。This book is provided "as-is" and expresses the author's views and opinions. URL および他の参照されているインターネットの Web サイトをはじめ、本書に記載されている見解、意見、および情報は、通知なく変更されることがあります。The views, opinions and information expressed in this book, including URL and other Internet website references, may change without notice.

ここに記載したいくつかの例は、説明のためだけに提供された架空のものです。Some examples depicted herein are provided for illustration only and are fictitious. 実在のものとの関連性または関係性は一切ありません。No real association or connection is intended or should be inferred.

https://www.microsoft.com の "商標" Web ページに記載されている Microsoft および商標は、Microsoft グループの商標です。Microsoft and the trademarks listed at https://www.microsoft.com on the "Trademarks" webpage are trademarks of the Microsoft group of companies.

Mac および macOS は Apple Inc. の商標です。Mac and macOS are trademarks of Apple Inc.

その他のすべてのマークおよびロゴは、該当する各社が所有しています。All other marks and logos are property of their respective owners.

作成者:Author:

Jeremy Likness 、シニア クラウド デベロッパー アドボケイト、APEX、Microsoft Corp.Jeremy Likness, Sr. Cloud Developer Advocate, APEX, Microsoft Corp.

共同作成者:Contributor:

Cecil Phillip 、クラウド デベロッパー アドボケイト II、APEX、Microsoft Corp.Cecil Phillip, Cloud Developer Advocate II, APEX, Microsoft Corp.

編集者:Editors:

Bill Wagner 、シニア コンテンツ開発者、APEX、Microsoft Corp.Bill Wagner, Senior Content Developer, APEX, Microsoft Corp.

Maira Wenzel 、シニア コンテンツ開発者、APEX、Microsoft Corp.Maira Wenzel, Senior Content Developer, APEX, Microsoft Corp.

参加者とレビュー担当者:Participants and reviewers:

Steve Smith 、所有者、Ardalis Services。Steve Smith, Owner, Ardalis Services.

はじめにIntroduction

サーバーレスとは、クラウド プラットフォームが純粋なクラウド ネイティブ コードの方向に進化したものです。Serverless is the evolution of cloud platforms in the direction of pure cloud native code. 開発者は、サーバーレスにより、インフラストラクチャを心配することなく、ビジネス ロジックに近づくことができます。Serverless brings developers closer to business logic while insulating them from infrastructure concerns. "サーバーがない" というよりはむしろ "サーバーが少ない" パターンです。It's a pattern that doesn't imply "no server" but rather, "less server." サーバーレス コードは、イベント ドリブンです。Serverless code is event-driven. コードは、従来の HTTP Web 要求からタイマーまたはファイルのアップロード結果など、すべてのものからトリガーできます。Code may be triggered by anything from a traditional HTTP web request to a timer or the result of uploading a file. サーバーレスの背後にあるインフラストラクチャを瞬時にスケーリングして、需要に柔軟に対応することにより、真に "使用したものを支払う" マイクロビリングが提供されます。The infrastructure behind serverless allows for instant scale to meet elastic demands and offers micro-billing to truly "pay for what you use." サーバーレスでは、新しい考え方やアプローチでアプリケーションを構築する必要があり、すべての問題へのソリューションとしては適していません。Serverless requires a new way of thinking and approach to building applications and isn't the right solution for every problem. 開発者は以下の決定をする必要があります。As a developer, you must decide:

  • サーバーレスの長所と短所とは何か?What are the pros and cons of serverless?
  • 独自のアプリケーションでなぜサーバーレスを検討する必要があるのか?Why should you consider serverless for your own applications?
  • サーバーレス コードをどのようにビルド、テスト、展開するのか?How can you build, test, deploy, and maintain your serverless code?
  • 既存のアプリケーションでサーバーレスにコードを移行するのにどの場所が適切であるか、およびこの移行を実現する最善の方法は何か?Where does it make sense to migrate code to serverless in existing applications, and what is the best way to accomplish this transformation?

このガイドについてAbout this guide

このガイドでは、サーバーレスを使用するアプリケーションをクラウド ネイティブで開発することに焦点を当てています。This guide focuses on cloud native development of applications that use serverless. このブックでは、サーバーレス アプリの開発の利点と、可能性のある欠点を明らかにし、サーバーレス アーキテクチャについて概説します。The book highlights the benefits and exposes the potential drawbacks of developing serverless apps and provides a survey of serverless architectures. サーバーレスの多くの使用例は、さまざまなサーバーレスの設計パターンを使用して示しています。Many examples of how serverless can be used are illustrated along with various serverless design patterns.

このガイドでは、Azure のサーバーレス プラットフォームの構成要素について説明しますが、特に Azure Functions を使用したサーバーレス実装について説明しています。This guide explains the components of the Azure serverless platform and focuses specifically on implementation of serverless using Azure Functions. トリガー、バインド方法、および Durable Functions を使用した状態に依存するサーバーレス アプリの実装方法について説明します。You'll learn about triggers and bindings as well as how to implement serverless apps that rely on state using durable functions. 最後に、プロジェクトにとってサーバーレスが正しいアプローチであるかどうかを判断するために、ビジネス例およびケース スタディで状況や視点を示しています。Finally, business examples and case studies will help provide context and a frame of reference to determine whether serverless is the right approach for your projects.

クラウド プラットフォームの進化Evolution of cloud platforms

サーバーレスとは、クラウド プラットフォームがいくつか繰り返されたものの累積です。Serverless is the culmination of several iterations of cloud platforms. この進化は、データ センターの物理メタルから始まって、Infrastructure as a Service (IaaS) および Platform as a Service (PaaS) へ進化しました。The evolution began with physical metal in the data center and progressed through Infrastructure as a Service (IaaS) and Platform as a Service (PaaS).

オンプレミスからサーバーレスへの進化

クラウド以前は、開発および運用の間には、認識可能な境界がありました。Before the cloud, a discernible boundary existed between development and operations. アプリケーションを展開するということは、次のようなさまざまな問題に回答するようなものでした。Deploying an application meant answering myriad questions like:

  • どのようなハードウェアをインストールする必要があるか?What hardware should be installed?
  • コンピューターへの物理アクセスのセキュリティはどのように確保するか?How is physical access to the machine secured?
  • データ センターには無停電電源装置 (UPS) は必要か?Does the data center require an Uninterruptible Power Supply (UPS)?
  • ストレージのバックアップはどこに送信するか?Where are storage backups sent?
  • 冗長電源は必要か?Should there be redundant power?

このような問題はこれ以外にもあり、莫大なオーバーヘッドがありました。The list goes on and the overhead was enormous. 多くの状況では、IT 部門は途方もない無駄への対応を強いられていました。In many situations, IT departments were forced to deal with incredible waste. この無駄とは、ディザスター リカバリー用のバックアップ マシンとしてのサーバーと、スケールアウトを可能にするスタンバイ サーバーを過度に配置していたことでした。幸いにも、仮想マシン (VM) を使用した仮想化テクノロジの導入 (Hyper-V など) で、Infrastructure as a Service (IaaS) が台頭しました。The waste was due to over-allocation of servers as backup machines for disaster recovery and standby servers to enable scale-out. Fortunately, the introduction of virtualization technology (like Hyper-V) with Virtual Machines (VMs) gave rise to Infrastructure as a Service (IaaS). 運用側は、仮想化されたインフラストラクチャで、サーバーの標準セットを基幹として構成することが可能になり、ユニークなサーバー群を "オン デマンド" でプロビジョニングできる柔軟な環境が出来上がりました。Virtualized infrastructure allowed operations to set up a standard set of servers as the backbone, leading to a flexible environment capable of provisioning unique servers "on demand." さらに重要なことには、クラウドを使用して仮想マシンを "サービスとして" 提供するステージが仮想化により設定されました。More important, virtualization set the stage for using the cloud to provide virtual machines "as a service." 企業は、冗長充電や物理マシンなどを心配する必要がなくなりました。Companies could easily get out of the business of worrying about redundant power or physical machines. その代わりに仮想環境に集中できるようになりました。Instead, they focused on the virtual environment.

運用ではまださまざまなタスクをこなす必要があるため、IaaS にはまだ大量のオーバーヘッドが必要です。IaaS still requires heavy overhead because operations is still responsible for various tasks. たとえば、次のようなタスクです。These tasks include:

  • サーバーへの修正プログラムの適用とバックアップ。Patching and backing up servers.
  • パッケージのインストール。Installing packages.
  • オペレーティング システムの最新の状態の維持。Keeping the operating system up-to-date.
  • アプリケーションの監視。Monitoring the application.

次の進化の Platform as a Service (PaaS) により、オーバーヘッドが減りました。The next evolution reduced the overhead by providing Platform as a Service (PaaS). PaaS でクラウドのプロバイダーは、オペレーティング システム、セキュリティ更新プログラムに対応するのみでなく、特定のプラットフォームをサポートするのに必要なパッケージさえにも対応します。With PaaS, the cloud provider handles operating systems, security patches, and even the required packages to support a specific platform. VM を構築して .NET Framework を構成して、Internet Information Services (IIS) サーバーを立ち上げる代わりに、開発者は "Web アプリケーション" や "API エンドポイント" などの "プラットフォーム ターゲット" を選択し、コードを直接展開すればよいだけになります。Instead of building a VM then configuring the .NET Framework and standing up Internet Information Services (IIS) servers, developers simply choose a "platform target" such as "web application" or "API endpoint" and deploy code directly. これにより、インフラストラクチャの問題は以下に減りました。The infrastructure questions are reduced to:

  • どのようなサイズのサービスが必要か?What size services are needed?
  • サービスはどのようにスケール アウトされるのか (サーバーやノードが追加されるのか)?How do the services scale out (add more servers or nodes)?
  • サービスはどのようにスケール アップされるのか (サーバーやノードをホストする容量が増えるのか)?How do the services scale up (increase the capacity of hosting servers or nodes)?

イベント ドリブンのコードに焦点を当てることにより、サーバーレスはさらにサーバーを抽象化しました。Serverless further abstracts servers by focusing on event-driven code. プラットフォームの代わりに、開発者は 1 つのことを実行するマイクロサービスに集中することができます。Instead of a platform, developers can focus on a microservice that does one thing. サーバーレス コードを構築するときに重要な 2 つの問題は次のとおりです。The two key questions for building the serverless code are:

  • コードは何によってトリガーされるか?What triggers the code?
  • コードでは何が実行されるか?What does the code do?

サーバーレスでは、インフラストラクチャは抽象化されます。With serverless, infrastructure is abstracted. 開発者がホストをまったく心配する必要がない場合もあります。In some cases, the developer no longer worries about the host at all. IIS、Kestrel、Apache またはその他の Web サービスのインスタンスが Web 要求を処理する場合もしない場合も、開発者は HTTP トリガーに焦点を当てます。Whether or not an instance of IIS, Kestrel, Apache, or some other web server is running to manage web requests, the developer focuses on an HTTP trigger. トリガーは、要求に対して標準のクロスプラットフォームのペイロードを提供します。The trigger provides the standard, cross-platform payload for the request. このペイロードは、開発手順を単純化するのみでなく、テストを行いやすくし、場合によってはプラットフォーム間でコードを簡単に移植できるようにします。The payload not only simplifies the development process, but facilitates testing and in some cases, makes the code easily portable across platforms.

サーバーレスのもう 1 つの特徴に、マイクロビリングがあります。Another feature of serverless is micro-billing. Web アプリケーションでは、一般的に Web API エンドポイントがホストされます。It's common for web applications to host Web API endpoints. 従来のベア メタルでは、IaaS および PaaS の実装でさえも、API をホストするためのリソースに継続的に支払いが行われてきました。In traditional bare metal, IaaS and even PaaS implementations, the resources to host the APIs are paid for continuously. つまり、アクセスがないときでもエンドポイントをホストする費用を支払わなければなりません。That means you pay to host the endpoints even when they aren't being accessed. たいてい他よりも頻繁に呼び出される API が 1 つあるため、よく使用されるエンドポイントをサポートするためにシステム全体がスケールされます。Often you'll find one API is called more than others, so the entire system is scaled based on supporting the popular endpoints. サーバーレスでは、各エンドポイントを個別にスケーリングして、その費用のみを支払えばよいので、API が呼び出されていないときはコストは発生しません。Serverless enables you to scale each endpoint independently and pay for usage, so no costs are incurred when the APIs aren't being called. 多くの場合、移行により、エンドポイントをサポートする継続的なコストが劇的に減ります。Migration may in many circumstances dramatically reduce the ongoing cost to support the endpoints.

このガイドに含まれないものWhat this guide doesn't cover

このガイドでは、特にアーキテクチャでのアプローチおよび設計パターンについて説明しており、Azure Functions、Logic Apps またはその他のサーバーレス プラットフォームについては詳しくは説明していません。This guide specifically emphasizes architecture approaches and design patterns and isn't a deep dive into the implementation details of Azure Functions, Logic Apps, or other serverless platforms. このガイドでは、たとえば、Logic Apps が使用された高度なワークフローや、クロス オリジン リソース共有 (CORS) の構成などの Azure Functions の機能、カスタム ドメインの適用または SSL 証明書のアップロードについては説明していません。This guide doesn't cover, for example, advanced workflows with Logic Apps or features of Azure Functions such as configuring Cross-Origin Resource Sharing (CORS), applying custom domains, or uploading SSL certificates. これらについては、オンラインの Azure Functions のドキュメントで説明しています。These details are available through the online Azure Functions documentation.

その他の技術情報Additional resources

対象読者Who should use the guide

このガイドは、オンプレミスまたはクラウドでサーバーレス コンポーネントを使用する可能性のある、.NET でのエンタープライズ アプリケーションを開発する、開発者やソリューション アーキテクト向けに記述されています。This guide was written for developers and solution architects who want to build enterprise applications with .NET that may use serverless components either on premises or in the cloud. これは、次のことに関心のある、開発者、アーキテクト、技術意思決定者に役立ちます。It's useful to developers, architects, and technical decision makers interested in:

  • サーバーレスでの開発の長所と短所の理解Understanding the pros and cons of serverless development
  • サーバーレス アーキテクチャに着手する方法の学習Learning how to approach serverless architecture
  • サーバーレス アプリの実装例Example implementations of serverless apps

このガイドの使用方法How to use the guide

このガイドの最初の部分では、いくつかの異なるアーキテクチャでのアプローチを比較しながら、なぜサーバーレスが選択肢として選択可能か検証します。The first part of this guide examines why serverless is a viable option by comparing several different architecture approaches. ソフトウェア開発のすべての局面は、アーキテクチャの決定の影響を受けるので、ライフサイクルの技術面および開発面の両方を検証しています。It examines both the technology and development lifecycle, because all aspects of software development are impacted by architecture decisions. 次に、このガイドでは、ユース ケースと設計パターンを検証しています。これには、Azure Functions を使用した参照用の実装も含まれています。The guide then examines use cases and design patterns and includes reference implementations using Azure Functions. 各セクションには、特定の領域についてさらに学習するための参照資料が含まれています。Each section contains additional resources to learn more about a particular area. このガイドは、チュートリアル用のリソースおよびサーバーレス実装の実践の探査で締めくくられています。The guide concludes with resources for walkthroughs and hands-on exploration of serverless implementation.

フィードバックの送信Send your feedback

このガイドおよび関連サンプルは、継続的に更新されるので、お客様のフィードバックを歓迎しています。The guide and related samples are constantly evolving, so your feedback is welcomed! このガイドを改善する方法についてコメントがある場合、GitHub の問題の任意のページの下部にビルドされているフィードバック セクションをご利用ください。If you have comments about how this guide can be improved, use the feedback section at the bottom of any page built on GitHub issues.