Azure Managed Service Column <Azure運用コラム>

Azure Functionsとは?効率的かつ高い機敏性と保守性を確保した開発手法を解説

Category: 入門編

2022.04.04

企業がサービスを素早くリリースするためには?アジャイル時代の最適な方法を解説

近年、システム開発において、マイクロサービスアーキテクチャを採用する例が増えています。マイクロサービスアーキテクチャとは、マイクロサービスと呼ばれる小さなコンポーネントを組み合わせてシステムを実装する手法です。

個々のサービスごとに独立して開発できる柔軟性と、他のサービスへの影響を最小限に留める保守性の高さがメリットです。マイクロソフトのクラウド「Microsoft Azure」では、マイクロサービスアーキテクチャを実現するためのサービスとしてAzure Functionsを提供しています。Azure Functionsとは、Azure上でコードをサーバーレスで実行するサービスで、こうしたサーバーレスの技術を活用することでマイクロサービスを実装することが可能です。

本記事では、サーバーレスとマイクロサービスアーキテクチャの概要やメリットを踏まえ、Azure Functionsの概要と実現できる処理シナリオについて解説します。

1. サーバーレスアーキテクチャとは

Azure Functionsはサーバーレスアーキテクチャを実現するサービスです。まず、サーバーレスアーキテクチャの特徴とメリットについて解説します。

1.1 サーバーレスとは

サーバーレスとは、サーバーに依存することなくプログラムを実行する技術で、サーバーレスの考え方を採用してシステムを設計・構築する手法をサーバーレスアーキテクチャと呼びます。サーバーレスにより開発者はサーバーの調達や構築、保守を行う必要がなく、開発リソースをアプリケーション開発に集中することができます。

また、システムはサーバーが稼働していることを前提としていますが、24時間365日稼働している必要はありません。処理が実行される時だけサーバーが動作していればよいのですが、処理が実行されない時間は無駄なコストとなってしまいます。この問題を解決する手法がサーバーレスアーキテクチャです。サーバーレスは、処理が実行された分のコストで済むため、サーバーレスを活用することにより、低コストで効率よくサーバーを運用することができるようになります。

1.2 サーバーレスアーキテクチャの特徴とメリット

サーバーレスアーキテクチャの特徴は下記の通りです。

  • サーバーが不要
  • 高い可用性と拡張性
  • 利用した分だけコストがかかる

この特徴を活かすことで下記のメリットが得ることができ、俊敏で生産性の高い開発が可能となります。

  • サーバーの構築・運用コストがかからずコスト削減につながる
  • 可用性と自動スケールできる高い拡張性を持つ
  • 処理を実行しない時間はコストがかからずコスト削減につながる
  • モダンアーキテクチャの実現

1.3 イベント駆動型コード実行

イベント駆動型コード実行とは、ファイル受信やデータの更新など、定義されたイベントが発生すると、実行基盤(コンテナ等)が起動してあらかじめ設定しておいたプログラムを実行する仕組みです。コードを実行している間だけCPUやメモリなどのリソースをコンテナとして確保するので、常時稼働のサーバーに比べて無駄なリソースが発生しにくいというメリットがあります。

この仕組みによって、コード実行時間での従量課金を実現しています。イベント駆動型コード実行の仕組みによってサーバーレスアーキテクチャは実現されていると言ってもよいでしょう。

2. マイクロサービスアーキテクチャとは

次に、マイクロサービスアーキテクチャについて解説します。マイクロサービスアーキテクチャという言葉を聞きなれない方も多いと思います。まず、マイクロサービスアーキテクチャとは何か、概要とメリット、使われている技術について解説します。

2.1 マイクロサービスアーキテクチャの概要

マイクロサービスとは、システムが提供するサービスを、マイクロサービスと呼ばれる小さな独立したコンポーネントを組み合わせて実装する手法です。サービスを小さなコンポーネント単位に分割することで、コンポーネント間の関係性をシンプルにして、それぞれのマイクロサービス単位に独立して開発、デプロイ、アップデートすることを可能とした開発手法です。

2.2 マイクロサービスアーキテクチャの特徴とメリット

マイクロサービスは、下記の特徴を持っています。

  • 疎結合で独立したプロセスとして動作する
  • 独立してデプロイやアップデートができる
  • ネットワーク経由で通信してタスクを実行する

マイクロサービスアーキテクチャは、この特徴を活かすことで下記のメリットを得ることができ、俊敏で生産性の高い開発が可能となります。

  • 高い機敏性とスケーラビリティ
  • 小規模チームによる高い生産性
  • 依存関係を最小限に抑えられる
  • 最適なテクノロジーの選択

高い機敏性とスケーラビリティ

マイクロサービスは個別にリリースが可能なため、バグ修正や機能単位のリリースが行いやすくなります。アプリケーション全体をリリースせずにサービスの更新が可能なため、バグ改修を行いながらも新機能を素早くリリースすることが可能です。また、マイクロサービス単位で拡張・縮小が可能となるため、アプリケーション全体をスケールアウトする必要がなく、柔軟なスケールが可能となります。

小規模チームによる高い生産性

マイクロサービスは規模が小さい機能であるため、小規模なチーム編成で機敏性の高い開発が可能です。大規模なチームにありがちなコミュニケーションコストや管理オーバーヘッドが不要のため、生産性を高めることが可能です。

依存関係を最小限に抑えられる

マイクロサービスは個々のサービスが他のサービスと依存しない疎結合のアーキテクチャです。疎結合の実現により、他のサービスが障害を起こしても影響なく動作可能です。また、マイクロサービスごとにデータを分離するため、データ更新時の影響を最小限に抑えることが可能です。

最適なテクノロジーの選択

マイクロサービスは独立性が高いため、他のアプリケーションに流用することが可能です。アプリケーションの必要に応じて適切なマイクロサービスを選択・組み合わせることで最適なテクノロジーを選択することが可能です。

2.3 マイクロサービスアーキテクチャで使われる技術

マイクロサービスアーキテクチャの特徴である独立性の高さは、共通的に使われる下記の技術により実現されています。

  • コンポーネント間通信
  • 同期/非同期メッセージ通信
  • サービスメッシュ

コンポーネント間通信

マイクロサービスアーキテクチャでは、各マイクロサービスがほかのマイクロサービスと「メッセージ」と呼ばれる情報をやり取りして処理の実行を行います。基本的に、メッセージのやり取りが処理のトリガーとなります。

同期/非同期メッセージ通信

マイクロサービス間でやり取りされるメッセージは、同期通信と非同期通信の2種類の通信方法があります。同期通信では、メッセージ送信元は送信先の処理結果を受け取るか、検知するまで処理を一時停止します。一方、非同期通信では、送信されたメッセージは「メッセージキュー」に格納され、メッセージキューへの格納が完了したらすぐに次の処理に取り掛かれます。同期通信と非同期通信を必要に応じて組み込むことで複雑な処理を素早く柔軟に実行できるようになります。

サービスメッシュ

各マイクロサービスは、IPアドレスなどの識別情報が動的に変動することが多いため、通信先のマイクロサービスを特定するための仕組みが必要です。このように動的に変動する識別情報を管理し、適切な送信先にメッセージを送信するための仕組みをサービスメッシュと呼びます。

3. Azure Functionとは

Azure Functionとは、マイクロソフトのクラウド「Microsoft Azure」が提供するサービスのひとつで、サーバーレスアーキテクチャを実装するためのサービスです。Azure Functionを活用することでAzure上にマイクロサービスアーキテクチャを実現することが可能です。

3.1 Azure Functionの概要

Azure Functionとは、Azure上で関数(コード)をサーバーレスで実行できるサービスです。Azure Functionによりサーバーの構築や保守が不要となり、必要に応じてスケーリングも行ってくれるため、利用者はサーバーを意識することなくアプリケーション開発に集中することができます。

また、Azure FunctionはC#、Java、JavaScript、Pythonなど多くのプログラミング言語に対応しており、トリガーとバインドという機能により他のアプリケーションを起動し、アプリケーション実行結果の受け渡しを行うことができます。

これらの機能により、マイクロサービスアーキテクチャに必要なコンポーネント間通信や、同期/非同期通信などを実現することが可能です。

3.2 Azure Functionの料金体系

Azure Functionは基本的に従量課金制ですが、下記の3通りのプランがあります。

  • 従量課金プラン
  • Premiumプラン
  • App Serviceプラン

従量課金プラン

従量課金プランでは、Azure Functionsにより関数が実行された際のリソース使用量と、実行時間、実行回数に基づいて課金されます。

Premiumプラン

Premiumプランでは、Azure Functionsにより関数を実行した際のvCPUとメモリ使用時間に基づいて、1秒単位で課金されます。

App Serviceプラン

AzureのWebアプリケーションサービスであるApp Serviceの料金プランとして課金することも可能です。App Serviceを他のアプリケーションのために使用する場合は、追加コストを支払うことなく、同じプランの中で関数を実行することが可能です。

4. Azure Functionsでできること

Azure Functionsを活用すると、具体的にどのようなことができるようになるのでしょうか。Azure Functionsにより、サーバーレス環境で実に多くの処理が実現できるようになりますが、ここでは、Azure Functionsを活用して実現できる下記のシナリオについて紹介します。

  • Web APIのビルド・デプロイ
  • ファイルのアップロード処理
  • タスクのスケジュール処理
  • IoTデータストリーム処理
  • データのリアルタイム処理

4.1 Web APIのビルド・デプロイ

Azure Functionsに対して小規模なプログラムのビルド・デプロイが可能です。例えば、HTTPトリガーという機能を利用して、HTTP 要求で関数を呼び出すことができます。サーバーレスで実行するAPIを構築し、Webhook に応答することができます。C#、Java、JavaScript、Pythonなど様々な言語に対応しています。

4.2 ファイルのアップロード処理

ファイルのアップロードや更新を検知して、定義されたコードを実行することができます。ファイルがアップロードされた後にデータベースへの登録などの後続処理を行いたい場合に活用できます。

4.3 タスクのスケジュール処理

Azure Functionsのタイマートリガーという機能を利用して、スケジュールに基づいて定義されたコードを実行することができます。時間間隔を設定して一定時間ごとに処理を実行することも可能です。

4.4 IoTデータストリーム処理

AzureのIoT向けサービスであるAzure IoT Hubと連携して、IoTデバイスからデータを収集して処理することが可能です。Azure IoT Hubがデバイスからのデータを受け取り、それをAzure Functionsに連携して定義したコードを実行することができます。

4.5 データのリアルタイム処理

リアルタイムWeb機能を提供するAzure SignalR Serviceと連携することで、サーバーレス環境でリアルタイム通信を実現することができます。2つのサービスを連携することで、Webアプリケーションのコンテンツ更新などを接続している多くのクライアントに対して自動で通知することなどが可能です。

5. まとめ

サーバーレスやマイクロサービスアーキテクチャは、企業がサービスを素早くリリース・改修し、目まぐるしく変化する市場に合わせてビジネスを発展させるためのアーキテクチャです。Azure Functionsはサーバーレスやマイクロサービスアーキテクチャを実現するためのサービスのひとつですが、ひとつの技術に囚われず、要件に合わせて柔軟にサービスを使い分けることが重要です。

Azure設計・構築を任せたい

Azure構築サービス

Azure構築サービス

Microsoft Azureを利用したシステムの設計・構築を代行します。お客様のご要件を実現する構成をご提案・実装いたします。

Free

資料ダウンロード

課題解決に役立つ詳しいサービス資料はこちら

資料ダウンロード
  • Azure導入支援・構築・運用サービス総合カタログ

    Microsoft Azure サービスの導入検討・PoC、設計、構築、運用までを一貫してご支援いたします。
    Azure導入・運用時のよくあるお悩み、お悩みを解決するためのアールワークスのご支援内容・方法、ご支援例などをご確認いただけます。

Azure導入個別相談会(無料)

Tag: Azure Functions Azureコンピューティング マイクロサービスアーキテクチャ

Contactお問い合わせ

お見積もり・ご相談など、お気軽にお問い合わせください。

single.php