Azure Functions のトリガーとバインド
HTTP トリガー関数を記述し、Azure Queue Storage に書き込む出力バインドを追加して、Consumption Plan の自動スケーリング モデルを理解します。
「Azure Functions のトリガーとバインド」はCoddyKit上の無料Azure Fundamentalsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAzure Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Azure Fundamentalsコースには全4レッスンが含まれています。
Azure Functions とは
Azure Functionsは、インフラストラクチャを管理せずに、イベントに応じて小さなコード単位(functions)を実行できるサーバーレス コンピューティング サービスです。料金が発生するのは関数の実行中に使用した実行時間とメモリに対してのみで、関数がアイドル状態のときは料金がかかりません。Functions は、イベント駆動型のタスク、軽量な API、スケジュールされたジョブ、永続的なサーバーを使わないクラウドサービスの統合に適しています。
トリガー:関数を開始するもの
すべての Azure Function には、実行の原因となるイベントを定義するtriggerが 1 つだけ必要です。一般的なトリガーには、HTTP(受信 HTTP リクエスト)、Timer(CRON スケジュール)、Blob Storage(コンテナー内の新しい blob)、Queue Storage(キュー内の新しいメッセージ)、Event Hub(イベントのストリーム)、Service Bus(キューまたはトピックのメッセージ)、Cosmos DB(変更フィード)があります。トリガーはイベントデータを受け取り、関数コードに渡します。
// HTTP trigger function (JavaScript/Node.js)
module.exports = async function (context, req) {
const name = req.query.name || (req.body && req.body.name);
const message = name ? 'Hello, ' + name : 'Pass a name in the query or body';
context.res = {
status: 200,
body: { message }
};
};Function.json:トリガーとバインディングの構成
コンパイルを必要としない言語(JavaScript、Python)では、各関数のディレクトリにあるfunction.jsonファイルで、トリガーとバインディングを宣言します。このファイルは、イベントソースと出力を関数コード内の名前付きパラメーターにマッピングします。C# と Java では、コード内で属性またはアノテーションを直接使用してバインディングを宣言します。Functions ランタイムは構成を読み取り、Azure サービスへの接続を自動的に設定します。
// function.json — HTTP trigger + Queue output binding
{
'bindings': [
{
'authLevel': 'function',
'type': 'httpTrigger',
'direction': 'in',
'name': 'req',
'methods': ['post']
},
{
'type': 'http',
'direction': 'out',
'name': 'res'
},
{
'type': 'queue',
'direction': 'out',
'name': 'outputQueue',
'queueName': 'processing-queue',
'connection': 'AzureWebJobsStorage'
}
]
}出力バインディング:サービスへの書き込み
出力バインディングを使用すると、SDK や接続文字列を管理せずに、関数から Azure サービス(Blob Storage、Queue Storage、Cosmos DB、Event Hub など)へデータを書き込めます。出力バインディングのパラメーターに値を代入するだけで、Functions ランタイムが書き込みを処理します。これにより、定型コードを大幅に削減でき、関数を特定の Azure サービスの実装詳細から切り離せます。
// HTTP trigger with Queue output binding (Node.js)
module.exports = async function (context, req) {
const orderData = req.body;
// Write to queue via output binding -- no SDK needed!
context.bindings.outputQueue = JSON.stringify({
orderId: orderData.id,
timestamp: new Date().toISOString()
});
context.res = { status: 202, body: 'Order queued' };
};CRON 式を使用したタイマートリガー
Timer triggerは、CRON expressionで定義したスケジュールに従って関数を実行します。Azure Functions では、6 つの部分から成る CRON を使用します:{seconds} {minutes} {hours} {day} {month} {day-of-week}。1 時間ごとには0 0 * * * *、毎日午前 0 時には0 0 0 * * *、平日の営業時間中に 1 時間ごとには0 0 9-17 * * 1-5を使用します。タイマー関数は、クリーンアップジョブ、レポート生成、ヘルスチェックなどに便利です。
// Timer trigger — runs every day at 02:00 UTC
// function.json binding:
// {
// 'type': 'timerTrigger',
// 'schedule': '0 0 2 * * *',
// 'name': 'myTimer'
// }
module.exports = async function (context, myTimer) {
const now = new Date().toISOString();
context.log('Daily cleanup started at', now);
// ... perform cleanup logic ...
context.log('Cleanup completed');
};Consumption プラン:サーバーレス スケーリング
Consumption planでは、Azure Functions がトリガーイベントの発生率に基づいて、インスタンス数を 0 から数百まで自動的にスケーリングします。料金は実行回数と消費したメモリの GB 秒に対してのみ発生し、毎月最初の 100 万回の実行は無料です。Functions ホストは、HTTP トリガーを最大 200 インスタンスまでスケールアウトでき、キュートリガーはキュー内のメッセージ数まで同時に処理できます。コールドスタート(アイドル状態の後の初回実行)では短い遅延が発生しますが、Premium planのウォーム済みインスタンスによって軽減できます。
# View billing details for a function app
az functionapp show \
--name myFunctionApp \
--resource-group MyRG \
--query '{name:name, plan:serverFarmId, state:state}'
# Create a Function App on Consumption plan
az functionapp create \
--name myFunctionApp \
--resource-group MyRG \
--consumption-plan-location eastus \
--runtime node \
--runtime-version 18 \
--storage-account mystorageaccountPremium プランと Dedicated プラン
Premium planはウォーム済みインスタンスを維持することでコールドスタートをなくし、VNet 統合を追加し、より長い実行タイムアウト(最大 60 分)を可能にします。Dedicated (App Service) planでは、Web アプリと同じ App Service プラン上で関数を実行できます。予測可能なコストが必要な場合や、既存の App Service コンピューティングを利用したい場合に便利です。真のサーバーレスによるコスト効率を重視する場合は Consumption、パフォーマンスや VNet 接続を重視する関数には Premium を選択します。
# Create a Function App on Premium plan (EP1)
az functionapp plan create \
--name MyPremiumPlan \
--resource-group MyRG \
--location eastus \
--sku EP1 \
--is-linux
az functionapp create \
--name myFunctionAppPremium \
--resource-group MyRG \
--plan MyPremiumPlan \
--runtime python \
--runtime-version 3.11 \
--storage-account mystorageaccountAzure Functions のデプロイ
Azure Functions Core Tools(func azure functionapp publish)、VS Code extension、Azure CLI によるZIP deploy、または Azure Pipelines や GitHub Actions のCI/CD pipelineを使用して Azure Functions をデプロイします。本番環境では、テスト済みでタグ付けされたバージョンを確実に本番環境へ届けるため、必ず開発者のマシンではなくパイプラインからデプロイしてください。Functions ランタイムは、実行環境を完全に制御できるDocker container deploymentにも対応しています。
# Local development: install Core Tools
npm install -g azure-functions-core-tools@4
# Start locally (triggers work against real Azure services)
func start
# Deploy to Azure
func azure functionapp publish myFunctionApp
# Or deploy via Azure CLI (ZIP deploy)
zip -r function.zip . --exclude '.git/*'
az functionapp deployment source config-zip \
--name myFunctionApp \
--resource-group MyRG \
--src function.zipアプリケーション設定と Key Vault 参照
Function Apps はapplication settingsに構成を保存します。これらは関数コード内では環境変数として表示されます。接続文字列、API キー、シークレットはアプリケーション設定に保存します。本番環境ではKey Vault referencesを使用します。これにより値は Key Vault に保存され、アプリ設定では名前だけを参照するため、ポータルやデプロイ成果物にシークレットを含めずに済みます。資格情報なしで Key Vault に対して認証できるよう、Function App でマネージド ID を有効にしてください。
# Set application settings
az functionapp config appsettings set \
--name myFunctionApp \
--resource-group MyRG \
--settings \
STORAGE_CONNECTION='@Microsoft.KeyVault(SecretUri=https://mykv.vault.azure.net/secrets/storage-conn/)' \
COSMOS_DB_URI='https://mycosmosdb.documents.azure.com'
# In function code, read as normal env var
# const storageConn = process.env['STORAGE_CONNECTION'];Application Insights による Functions の監視
Azure Functions は、インストルメンテーション キーまたは接続文字列を指定すると、Application Insightsと自動的に統合されます。すべての関数実行はリクエストとして追跡され、実行時間、成功または失敗、カスタムプロパティなどが記録されます。テスト中に実行状況をリアルタイムで確認するには Application Insights のLive Metricsを使用し、エラーを完全な例外トレースと依存関係の呼び出し情報で診断するにはFailuresブレードを使用します。
# Connect Application Insights to a Function App
az functionapp config appsettings set \
--name myFunctionApp \
--resource-group MyRG \
--settings \
APPLICATIONINSIGHTS_CONNECTION_STRING='InstrumentationKey=xxxxxxxx;...'
# Custom telemetry in function code (Node.js)
const appInsights = require('applicationinsights');
appInsights.setup().start();
const client = appInsights.defaultClient;
client.trackEvent({ name: 'OrderProcessed', properties: { orderId: '123' } });同時実行とスケーリングの動作
キュートリガーの関数では、Functions ホストが複数のメッセージを並列処理します。host.jsonのbatchSizeを設定して、1 つのインスタンスが同時に処理するメッセージ数を制御します。HTTP トリガーでは、スケールアウトによって新しいインスタンスが自動的に追加されます。スループットを調整し、スケールアウト時にデータベースなどの下流サービスへ過剰な負荷をかけないようにするには、maxConcurrentCalls(Service Bus トリガー)またはmaxPollingInterval(キュートリガー)を使用します。
// host.json — tune queue trigger concurrency
{
'version': '2.0',
'extensions': {
'queues': {
'batchSize': 16, // messages per instance
'newBatchThreshold': 8, // fetch more when < 8 remain
'maxPollingInterval': '00:00:02',
'visibilityTimeout': '00:05:00'
}
},
'functionTimeout': '00:10:00'
}クイックチェック
このレッスンで学んだ Microsoft Azure Fundamentals(AZ-900)の概念について理解度を確認します。
レッスンのまとめ
このレッスンでは、トリガーが関数を開始するイベント(HTTP、タイマー、キュー、Blob など)を定義すること、出力バインディングを使うと SDK コードなしで関数から Azure サービスに書き込めること、そしてConsumption プランによって、ゼロから実行回数に応じて課金される真のサーバーレススケーリングが提供されることを学びました。次は、状態を持つワークフローを実現する Durable Functions について説明します。
よくある質問
「Azure Functions のトリガーとバインド」レッスンは無料ですか?
はい。「Azure Functions のトリガーとバインド」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Azure Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Azure Fundamentalsコースには全4レッスンが含まれています。
「Azure Functions のトリガーとバインド」で何を学びますか?
HTTP トリガー関数を記述し、Azure Queue Storage に書き込む出力バインドを追加して、Consumption Plan の自動スケーリング モデルを理解します。 ブラウザで直接実行するハンズオンコードでAzure Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Azure Fundamentalsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAzure Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Azure Functions のトリガーとバインド」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAzure Fundamentalsレッスンでコードを書いて実行できますか?
はい。すべてのAzure Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Azure Functions のトリガーとバインド
- ステートフル ワークフロー向け Durable Functions
- Azure Logic Apps
- Event Grid とイベント駆動型アーキテクチャ