クラウドサービスが必須とも言える現代において、その中心的存在ともいえるMicrosoftの「Azure」。
その一機能、「Azure Functions」は、サーバーレスでアプリケーションを構築できる機能です。 この記事では、そんな「Azure Functions」について初心者の方でもスムーズに理解できるよう分かりやすく解説します。

具体的な機能から、なぜ「Azure Functions」が選ばれているのか、その特徴と利点などを探っていきましょう。 また、「Azure Functions」とVisual Studio Codeと連携してシームレスに開発をするための手順についても詳しく解説します。 一緒に「Azure Functions」の全貌を理解していきましょう。

Azure Functionsとは

「Azure Functions」は、Microsoftが提供するサーバーレスコンピューティングサービスであり、開発者がイベントに基づいてコードを実行できるプラットフォームです。”サーバーレス”という用語は、開発者がサーバーの管理やネットワーク設定などのインフラストラクチャに気を配る必要がないことを意味します。代わりに、開発者は関数(小さなコード片)の作成に集中でき、「Azure Functions」がそのスケーリングと実行を自動的に行います。
「Azure Functions」は、Web APIの作成から、リアルタイムでのファイルのアップロード、スケジュールに基づいたバッチ処理など、さまざまな場面で利用されています。

次のセクションでは、より具体的な「Azure Functions」の特徴やその利点について解説していきます。
なお、Azureについて理解を深めたい方は、以下の記事をご参照ください。

Azureとは?- Azureを使う前に知っておくべき注意点 – Users Digital (users-digital.com)

Azure Functionsの特徴と利点

「Azure Functions」はアプリケーション開発や運用までを柔軟に支援する機能を持っています。以下で、主な特徴と利点について解説します。

  1. サーバーレスアーキテクチャ:前章で解説した通り、Azure Functionsはサーバーレスコンピューティングサービスであり、開発者はインフラストラクチャの管理から解放され、コードの作成に集中できます。また、それにより迅速なサービスのリリースが可能になります。
  2. イベント駆動型:特定のイベント(HTTPリクエストやデータベースの変更など)がトリガーとなって関数が起動します。これは、関連するアクションがリアルタイムで実行でき、各イベント処理が独立しているため再利用やテストが行いやすいといったメリットがあります。また、必要な時だけコードが実行されるためリソース効率が良く、コストも抑えられます。
  3. 複数言語対応:Azure FunctionsはC#, Java, JavaScript, Pythonなど複数のプログラミング言語をサポートしています。開発者は自身の得意な言語で関数を書くことができます。
  4. 統合開発環境(IDE)やCI/CDツールとの連携:Azure FunctionsはVisual Studio CodeやGitHub Actionsなどの人気開発ツールとシームレスに連携できます。これにより、効率的な開発フローを実現します。後の章で、具体的な連携方法を解説します。
  5. 自動スケーリング:Azure Functionsはトラフィックの増減に応じて自動的にスケールアップ・ダウンします。これにより、大量のリクエストを一時的に処理する必要がある場合でも安心です。
  6. 柔軟な料金体系:使用した時間に応じて支払いが生じる従量課金プランや、より高いパフォーマンスで利用できるプレミアムプランなどがあり、それぞれの用途や予算に合わせた選択が可能です。詳細は次の章に記載します。
  7. セキュリティ:Azure FunctionsはMicrosoft Azureのセキュリティモデルを利用し、関数レベルでの認証や暗号化をサポートしています。

Azure Functionsの料金について

Azure Functionsの料金は、「従量課金プラン」、「フレックス従量課金プラン」、「プレミアムプラン」などさまざまなプランから選択ができます。
なお、本章で解説する料金は2024年6月時点の東日本リージョンの情報です。最新の情報やより詳細な情報については、公式情報をご確認ください。

従量課金プラン

従量課金プランでは、関数が実行されるたびに課金されます。関数が実行されない時間帯はコストが発生しないので、利用が変則的で常時稼働しないアプリケーションに適しています。

従量制課金無料提供 (月額)従量課金制
実行時間400,000 GB 秒¥0.002521/GB 秒
総実行回数100 万実行回数100 万実行回数あたり ¥31.501
従量課金プラン料金

フレックス従量課金プラン

フレックス従量課金プランは、常時実行可能なインスタンス(Azure Functionsが実行されるサーバー)やインスタンスのメモリサイズが設定できるなど機能の柔軟性が特長です。
料金は、従量課金プランの「実行時間」「総実行回数」にプラスして、待機時間中にかかるメモリ量の料金などが加算されます。ただし、リージョンによってはフレックス従量課金プランに対応しておらず、東日本リージョンは対応していないため料金については割愛します。

プレミアムプラン

プレミアムプランは、コールドスタートが発生せず、スペックの選択も可能であり高いパフォーマンスでの利用が可能です。料金は、割り当てられたコア秒数とメモリに基づいて課金され、実行料金は発生しません。また、少なくとも1つのインスタンスが常に割り当てられる必要があります。

従量制課金従量課金制1 年節約プラン3 年節約プラン
vCPU
使用時間
vCPU: ¥30.870001
(vCPU/時間)
vCPU: ¥25.622101
(vCPU/時間)
~17% の節約
vCPU: ¥25.622101
(vCPU/時間)
~17% の節約
メモリ
使用時間
メモリ: ¥2.205001
(GB/時間)
メモリ: ¥1.830151 
(GB/時間)
~17% の節約
メモリ: ¥1.830151
(GB/時間)
~17% の節約
プレミアムプラン料金

その他のプラン

その他にも、Web アプリケーションと API アプリケーション用に最適化されたフルマネージドのサービスとしてのプラットフォームを提供する「Azure App Service」や、フルマネージドのサーバーレスコンテナサービスを提供する「Azure Container Apps」でも、Azure Functionsの利用が可能です。

Azure Functionsの使い方

Azureポータル画面上のみで「Azure Functions」の操作が可能ですが、今回はVisual Studio Codeを利用して、ローカル環境からPythonのAzure Functionsの関数を実行する手順を解説します。
ローカル環境で実行することで、お気に入りのコードエディタ上で開発出来たり、ローカルでデバッグ出来たりといったメリットがあります。

参考:
Visual Studio Code を使用して Azure Functions を開発する | Microsoft Learn

クイックスタート: Visual Studio Code と Python を使用して Azure に関数を作成する

①下準備               

  1. ローカルPCにPythonをインストールします。
  1. ローカルPCにVisual Studio Codeをインストールします。
  1. Visual Studio Code にPython拡張機能をインストールします。
  1. Visual Studio Code にAzure Functions拡張機能をインストールします。
  1. Visual Studio Code にAzure Functions Core Toolsをインストール します。
    「F1」→「Azure Functions: Install or Update Azure Functions Core Tools」をクリックします。

※もし以下の表示が出力されたら、別途インストーラーをダウンロードしてインストールしてください。

  1. Visual Studio Code にAzuriteをインストールします。

②ローカル環境でのプロジェクト作成               

  1. [(functionsアイコン)] – [Create New Project…]をクリックします。
  1. [Browse]>任意のフォルダを選択します。
  1. 今回は以下の設定でプロジェクトを作成します。
項目設定値
languagePython
Python programming modelModel V2
Python interpreterPython 3.11.5
templateHTTP trigger
Name of the functionhttp_trigger(任意の名前)
Authorization levelANONYMOUS
How to open your projectAdd to workspace
プロジェクト設定
  1. 「local.settings.json」ファイルの設定を変更します。「UseDevelopmentStorage=true」を追記します。           

③ローカル環境で実行              

  1. 「F1」→「Azurite: Start」をクリックします。
  1. [F5] or [デバッグの開始]をクリックします。
  1. 以下のようにURLが表示されることを確認します。
  1. 表示されたURLをブラウザで検索します。以下のように表示されればローカル環境での実行成功です。        

(URLにname を記載しない場合「This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.」となる) 

④Azure Functionsの作成                   

Visual Studio Code上でもAzure Functionsが作成できるようですが、GUIの方が分かりやすかったので今回はAzure portal上で作成しました。

  1. Azure portal「関数アプリ」の画面で[作成]をクリックします。
  1. 以下のように設定して[ 次: Storage > ]をクリックします。
サブスクリプションAzure subscription(環境による)
リソースグループ
(新規作成か既存のグループ選択)
chatbotai-rg(任意の名前)
関数アプリ名chatbotai-functions(任意の名前)
デプロイコード
ランタイムスタックPython
バージョン3.11
地域Japan East
オペレーティングシステムLinux
関数アプリの設定
  1. 以下のように設定してストレージアカウントを作成します。
サブスクリプション関数アプリの設定と同様
リソースグループ関数アプリの設定と同様
ストレージアカウント名chatbotaistg(任意の名前)
地域Japan East
パフォーマンスStandard
冗長性ローカル冗長ストレージ(LRS)
ストレージアカウントの設定
  1. ストレージアカウント設定後、関数アプリを「作成」します。

⑤Azure Functionsにデプロイして実行                    

  1. Visual Studio Codeから、Azureにサインインします。

サインインが成功すると、以下のように表示されます。

  1. [(functionsアイコン)] – [Deploy to Function App…] をクリックします。
  1. ④で作成したFunctionsが表示されるので、選択します。
  1. [Deploy]をクリックします。
  1. [View Output] (出力の表示) をクリックします。
  1. 以下のようにURLが表示されます。URLをブラウザで検索し、ローカルでの実行時と同様に表示されればデプロイ成功です。

以上で環境は整ったので、あとは実際にPythonファイルなどにコードを書きこんでいけば開発が可能です。

まとめ

本記事では、Azure Functionsの全体像について紹介しました。
Azure Functionsを利用する手順を解説したことで、OSのインストールなどサーバー構築が不要で、効率的な開発フローが実現できることがご理解いただけたかと思います。

Azure Functionsの特性を理解し、最大限活用することで、ビジネスの効率性と効果性を向上させることができます。この記事がAzure FunctionsをはじめとしたMicrosoft Azureについて、取り組みの初めの一歩としてお役立ていただければ幸いです。