この記事では、Azure Developer CLI (azd) を使用して、スケジュールされたタスクを Azure Functions で実行するタイマー トリガー関数を作成します。 コードをローカルで確認したら、Azure Functions の Flex 従量課金プランで実行して作成した新しいサーバーレス関数アプリにコードをデプロイします。
プロジェクト ソースでは、 azd を使用して関数アプリと関連リソースを作成し、コードを Azure にデプロイします。 このデプロイは、セキュリティで保護されたスケーラブルな Azure Functions デプロイの最新のベスト プラクティスに従います。
既定では、Flex 従量課金プランは従 量課金 制の課金モデルに従います。つまり、この記事を完了でき、Azure アカウントでは数 USD セント以下の小さなコストしか発生しません。
Important
スケジュールされたタスクの実行はすべての言語でサポートされていますが、このクイック スタート シナリオには現在、C#、Python、TypeScript の例しかありません。 このクイック スタートを完了するには、この記事の上部にあるサポートされている言語のいずれかを選択します。
[前提条件]
- Node.js 22 以上
アクティブなサブスクリプションを持つ Azure アカウント。 無料でアカウントを作成できます。
プロジェクトを初期化する
azd init コマンドを使用して、テンプレートからローカル Azure Functions コード プロジェクトを作成します。
ローカル ターミナルまたはコマンド プロンプトで、空のフォルダーで次の
azd initコマンドを実行します。azd init --template functions-quickstart-dotnet-azd-timer -e scheduled-dotnetこのコマンドにより、テンプレート リポジトリからプロジェクト ファイルがプルされ、現在のフォルダー内のプロジェクトが初期化されます。
-eフラグでは、現在の環境の名前が設定されます。azdでは、環境はアプリの一意のデプロイ コンテキストを維持し、複数を定義できます。 環境名は、Azure で作成するリソース グループの名前にも使用されます。次のコマンドを実行して、アプリ フォルダーに移動します。
cd srclocal.settings.json という名前のファイルを、次の JSON データを含む
srcフォルダーに作成します。{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "TIMER_SCHEDULE": "*/30 * * * * *" } }このファイルは、ローカルで実行する場合に必要です。
ローカル ターミナルまたはコマンド プロンプトで、空のフォルダーで次の
azd initコマンドを実行します。azd init --template functions-quickstart-typescript-azd-timer -e scheduled-tsこのコマンドにより、テンプレート リポジトリからプロジェクト ファイルがプルされ、現在のフォルダー内のプロジェクトが初期化されます。
-eフラグでは、現在の環境の名前が設定されます。azdでは、環境はアプリの一意のデプロイ コンテキストを維持し、複数を定義できます。 環境名は、Azure で作成するリソース グループの名前にも使用されます。local.settings.json という名前のファイルを、次の JSON データを含む
srcフォルダーに作成します。{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node", "TIMER_SCHEDULE": "*/30 * * * * *" } }このファイルは、ローカルで実行する場合に必要です。
ローカル ターミナルまたはコマンド プロンプトで、空のフォルダーで次の
azd initコマンドを実行します。azd init --template functions-quickstart-python-azd-timer -e scheduled-pyこのコマンドにより、テンプレート リポジトリからプロジェクト ファイルがプルされ、現在のフォルダー内のプロジェクトが初期化されます。
-eフラグでは、現在の環境の名前が設定されます。azdでは、環境はアプリの一意のデプロイ コンテキストを維持し、複数を定義できます。 環境名は、Azure で作成するリソース グループの名前にも使用されます。local.settings.json という名前のファイルを、次の JSON データを含む
srcフォルダーに作成します。{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "python", "TIMER_SCHEDULE": "*/30 * * * * *" } }このファイルは、ローカルで実行する場合に必要です。
仮想環境を作成してアクティブにする
ルート フォルダーで、次のコマンドを実行して、.venv という名前の仮想環境を作成してアクティブにします。
python3 -m venv .venv
source .venv/bin/activate
Python で Venv パッケージが Linux ディストリビューションにインストールされない場合は、次のコマンドを実行します。
sudo apt-get install python3-venv
ローカル環境で実行する
ターミナルまたはコマンド プロンプトでアプリ フォルダーから次のコマンドを実行します。
func start
ターミナルまたはコマンド プロンプトでアプリ フォルダーから次のコマンドを実行します。
npm install npm start
Functions ホストは、ローカル プロジェクト フォルダーで起動すると、タイマーによってトリガーされた関数に関する情報をターミナル出力に書き込みます。 Timer によってトリガーされる関数は、コードで定義されているスケジュールに基づいて実行されます。
既定のスケジュールは
*/30 * * * * *で、30 秒ごとに実行されます。完了したら、ターミナル ウィンドウで Ctrl + C キーを押して、
func.exeホスト プロセスを停止します。
-
deactivateを実行して仮想環境をシャットダウンします。
コードの確認 (省略可能)
Timer トリガー関数を定義するコードを確認できます。
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Timer;
using Microsoft.Extensions.Logging;
namespace Company.Function
{
public class timerFunction
{
private readonly ILogger _logger;
public timerFunction(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<timerFunction>();
}
[Function("timerFunction")]
public void Run(
[TimerTrigger("%TIMER_SCHEDULE%", RunOnStartup = true)] TimerInfo myTimer,
FunctionContext context
)
{
_logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
if (myTimer.IsPastDue)
{
_logger.LogWarning("The timer is running late!");
}
}
}
}
完全なテンプレート プロジェクトをこちらで確認できます。
import { app, InvocationContext, Timer } from '@azure/functions';
export async function timerFunction(myTimer: Timer, context: InvocationContext): Promise<void> {
context.log(`TypeScript Timer trigger function executed at: ${new Date().toISOString()}`);
if (myTimer.isPastDue) {
context.warn("The timer is running late!");
}
}
app.timer('timerFunction', {
schedule: '%TIMER_SCHEDULE%',
runOnStartup: true,
handler: timerFunction
});
完全なテンプレート プロジェクトをこちらで確認できます。
import datetime
import logging
import azure.functions as func
# Create the function app instance
app = func.FunctionApp()
@app.timer_trigger(schedule="%TIMER_SCHEDULE%",
arg_name="mytimer",
run_on_startup=True,
use_monitor=False)
def timer_function(mytimer: func.TimerRequest) -> None:
utc_timestamp = datetime.datetime.now(datetime.timezone.utc).isoformat()
logging.info(f'Python timer trigger function executed at: {utc_timestamp}')
if mytimer.past_due:
logging.warning('The timer is running late!')
完全なテンプレート プロジェクトをこちらで確認できます。
関数をローカルで検証したら、Azure に発行します。
Azure にデプロイ
このプロジェクトは、 azd up コマンドを使用して、Azure の Flex Consumption プランの新しい関数アプリにコードをデプロイするように構成されています。
ヒント
このプロジェクトには、ベスト プラクティスに従った Flex 従量課金プランへの安全なデプロイを作成するために azd で使用される Bicep ファイルのセットが含まれています。
次のコマンドを実行し、
azdで必要な Azure リソースを Azure に作成し、コード プロジェクトを新しい関数アプリにデプロイします。azd upルート フォルダーには、
azure.yamlに必要なazd定義ファイルが含まれています。まだサインインしていない場合は、Azure アカウントで認証するように求められます。
プロンプトが表示されたら、次の必須のデプロイ パラメーターを指定します。
パラメーター Description Azure サブスクリプション リソースが作成されるサブスクリプション。 Azure の場所 新しい Azure リソースを含むリソース グループを作成する Azure リージョン。 現在、Flex 従量課金プランをサポートしているリージョンのみが表示されます。 azd upコマンドでは、Bicep 構成ファイルでこれらのプロンプトに対する応答を使用して、次のデプロイ タスクを完了します。次の必要な Azure リソースを作成して構成します (
azd provisionと同等)。- Flex 従量課金プランと関数アプリ
- Azure Storage (必須) と Application Insights (推奨)
- アカウントのアクセス ポリシーとロール
- マネージド ID を使用したサービス間接続 (格納されている接続文字列の代わり)
- 関数アプリとその他の Azure リソースの両方を安全に実行するための仮想ネットワーク
コードをパッケージ化し、デプロイ コンテナーにデプロイします (
azd deployと同等)。 その後、アプリが起動し、デプロイされたパッケージで実行されます。
コマンドが正常に完了した後、作成したリソースへのリンクが表示されます。
デプロイを検証する
デプロイが完了すると、タイマー トリガー関数は、スケジュールに基づいて Azure での実行を自動的に開始します。
Azure portal で、新しい関数アプリに移動します。
左側のメニューから [ログ ストリーム ] を選択して、関数の実行をリアルタイムで監視します。
スケジュールに従って実行されている Timer トリガー関数を示すログ エントリが表示されます。
コードを再デプロイする
azd up コマンドを必要な回数実行して、Azure リソースをプロビジョニングし、コード更新プログラムを関数アプリにデプロイします。
注
デプロイされたコード ファイルは常に最新のデプロイ パッケージによって上書きされます。
azd プロンプトに対する最初の応答と、azd によって生成された環境変数は、名前付き環境にローカルに格納されます。
azd env get-values コマンドを使用して、Azure リソースの作成時に使用された環境内のすべての変数を確認します。
リソースをクリーンアップする
関数アプリと関連リソースの操作が完了したら、次のコマンドを使用して関数アプリとその関連リソースを Azure から削除し、それ以上のコストが発生しないようにします。
azd down --no-prompt
注
--no-prompt オプションは、確認なしでリソース グループを削除するように azd に指示します。
このコマンドは、ローカル コード プロジェクトには影響しません。