関数を作成すると、一連のトリガー テンプレートから言語固有のトリガー コードがプロジェクトに追加されます。 入力バインドまたは出力バインドを使用して関数を他のサービスに接続する場合は、関数に特定のバインド定義を追加する必要があります。 バインドの詳細については、「Azure Functions でのトリガーとバインドの概念」を参照してください。
ローカル開発
関数をローカルで開発する場合は、関数コードを更新してバインドを追加する必要があります。 function.jsonを使用する言語の場合、 Visual Studio Code には、関数にバインドを追加するためのツールが用意されています。
例に基づいてバインドを手動で追加する
既存の関数にバインドを追加する場合は、コード内の関数定義にバインド固有の属性を追加する必要があります。
既存の関数にバインドを追加する場合は、コード内の関数定義にバインド固有の注釈を追加する必要があります。
既存の関数にバインドを追加する場合は、関数コードを更新し、function.json 構成ファイルに定義を追加する必要があります。
次の例は、キュー ストレージの出力バインドを HTTP によってトリガーされる関数に追加した後の関数の定義を示しています。
HTTP によってトリガーされる関数は HTTP 応答も返すため、この関数は、HTTP とキューの両方の出力を表す MultiResponse
オブジェクトを返します。
[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req,
FunctionContext executionContext)
{
この出力バインディングを含む MultiResponse
オブジェクトの定義の例をこちらに示します。
public class MultiResponse
{
[QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
public string[] Messages { get; set; }
public IActionResult HttpResponse { get; set; }
}
この例を独自のプロジェクトに適用する際には、HttpRequest
を使用しているかどうかによって、HttpRequestData
を IActionResult
に、HttpResponseData
を に変更する必要がある場合があります。
メッセージは、関数が完了したときにキューに送信されます。 出力バインドを定義する方法は、プロセス モデルによって異なります。 参照できるバインド コードの例へのリンクなど、詳細については、「関数へのバインドの追加」を参照してください。
@FunctionName("HttpExample")
public HttpResponseMessage run(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@QueueOutput(name = "msg", queueName = "outqueue",
connection = "AzureWebJobsStorage") OutputBinding<String> msg,
final ExecutionContext context) {
参照できるバインド コードの例へのリンクなど、詳細については、「関数へのバインドの追加」を参照してください。
const { app, output } = require('@azure/functions');
const sendToQueue = output.storageQueue({
queueName: 'outqueue',
connection: 'AzureWebJobsStorage',
});
app.http('HttpExample', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraOutputs: [sendToQueue],
handler: async (request, context) => {
try {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || (await request.text());
context.log(`Name: ${name}`);
if (name) {
const msg = `Name passed to the function ${name}`;
context.extraOutputs.set(sendToQueue, [msg]);
return { body: msg };
} else {
context.log('Missing required data');
return { status: 404, body: 'Missing required data' };
}
} catch (error) {
context.log(`Error: ${error}`);
return { status: 500, body: 'Internal Server Error' };
}
},
});
出力バインドを定義する方法は、Node.js モデルのバージョンによって異なります。 参照できるバインド コードの例へのリンクなど、詳細については、「関数へのバインドの追加」を参照してください。
$outputMsg = $name
Push-OutputBinding -name msg -Value $outputMsg
参照できるバインド コードの例へのリンクなど、詳細については、「関数へのバインドの追加」を参照してください。
@app.route(route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpExample(req: func.HttpRequest, msg: func.Out [func.QueueMessage]) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
出力バインドを定義する方法は、Python モデルのバージョンによって異なります。 参照できるバインド コードの例へのリンクなど、詳細については、「関数へのバインドの追加」を参照してください。
import {
app,
output,
HttpRequest,
HttpResponseInit,
InvocationContext,
StorageQueueOutput,
} from '@azure/functions';
const sendToQueue: StorageQueueOutput = output.storageQueue({
queueName: 'outqueue',
connection: 'AzureWebJobsStorage',
});
export async function HttpExample(
request: HttpRequest,
context: InvocationContext,
): Promise<HttpResponseInit> {
try {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || (await request.text());
context.log(`Name: ${name}`);
if (name) {
const msg = `Name passed to the function ${name}`;
context.extraOutputs.set(sendToQueue, [msg]);
return { body: msg };
} else {
context.log('Missing required data');
return { status: 404, body: 'Missing required data' };
}
} catch (error) {
context.log(`Error: ${error}`);
return { status: 500, body: 'Internal Server Error' };
}
}
app.http('HttpExample', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
handler: HttpExample,
});
出力バインドを定義する方法は、Node.js モデルのバージョンによって異なります。 参照できるバインド コードの例へのリンクなど、詳細については、「関数へのバインドの追加」を参照してください。
次の表を使用して、既存の関数の更新に役立つ特定のバインドの種類の例を見つけます。 まず、実際のプロジェクトに対応する言語のタブを選択します。
C# のバインド コードは、具体的なプロセス モデルによって異なります。
サービス | 例示 | サンプル |
---|---|---|
ブロブストレージ |
トリガー 入力 アウトプット |
リンク |
Azure Cosmos DB (アジュール コスモス データベース) |
トリガー 入力 アウトプット |
リンク |
アジュール データ エクスプローラー (Azure Data Explorer) |
入力 アウトプット |
リンク |
Azure SQL |
トリガー 入力 アウトプット |
リンク |
イベントグリッド |
トリガー アウトプット |
リンク |
イベント ハブ |
トリガー アウトプット |
|
IoT ハブ |
トリガー アウトプット |
|
HTTP | トリガー | リンク |
キュー記憶域 |
トリガー アウトプット |
リンク |
RabbitMQ(メッセージブローカーソフトウェア) |
トリガー アウトプット |
|
SendGrid | アウトプット | |
サービスバス |
トリガー アウトプット |
リンク |
SignalR |
トリガー 入力 アウトプット |
|
テーブル ストレージ |
入力 アウトプット |
|
タイマー | トリガー | リンク |
Twilio | アウトプット | リンク |
サービス | 例示 | サンプル |
---|---|---|
ブロブストレージ |
トリガー 入力 アウトプット |
リンク |
Azure Cosmos DB (アジュール コスモス データベース) |
トリガー 入力 アウトプット |
リンク |
アジュール データ エクスプローラー (Azure Data Explorer) |
入力 アウトプット |
リンク |
Azure SQL |
トリガー 入力 アウトプット |
|
イベントグリッド |
トリガー アウトプット |
リンク |
イベント ハブ |
トリガー アウトプット |
|
IoT ハブ |
トリガー アウトプット |
|
HTTP | トリガー | リンク |
キュー記憶域 |
トリガー アウトプット |
リンク |
RabbitMQ(メッセージブローカーソフトウェア) |
トリガー アウトプット |
|
SendGrid | アウトプット | |
サービスバス |
トリガー アウトプット |
リンク |
SignalR |
トリガー 入力 アウトプット |
|
テーブル ストレージ |
入力 アウトプット |
|
タイマー | トリガー | リンク |
Twilio | アウトプット | リンク |
サービス | 例示 | サンプル |
---|---|---|
ブロブストレージ |
トリガー 入力 アウトプット |
リンク |
Azure Cosmos DB (アジュール コスモス データベース) |
トリガー 入力 アウトプット |
リンク |
アジュール データ エクスプローラー (Azure Data Explorer) |
入力 アウトプット |
|
Azure SQL |
トリガー 入力 アウトプット |
リンク |
イベントグリッド |
トリガー アウトプット |
リンク |
イベント ハブ |
トリガー アウトプット |
|
IoT ハブ |
トリガー アウトプット |
|
HTTP | トリガー | リンク |
キュー記憶域 |
トリガー アウトプット |
リンク |
RabbitMQ(メッセージブローカーソフトウェア) |
トリガー アウトプット |
|
SendGrid | アウトプット | |
サービスバス |
トリガー アウトプット |
リンク |
SignalR |
トリガー 入力 アウトプット |
|
テーブル ストレージ |
入力 アウトプット |
|
タイマー | トリガー | リンク |
Twilio | アウトプット | リンク |
サービス | 例示 | サンプル |
---|---|---|
ブロブストレージ |
トリガー 入力 アウトプット |
リンク |
Azure Cosmos DB (アジュール コスモス データベース) |
トリガー 入力 アウトプット |
リンク |
Azure SQL |
トリガー 入力 アウトプット |
|
イベントグリッド |
トリガー アウトプット |
リンク |
イベント ハブ |
トリガー アウトプット |
|
IoT ハブ |
トリガー アウトプット |
|
HTTP | トリガー | リンク |
キュー記憶域 |
トリガー アウトプット |
リンク |
RabbitMQ(メッセージブローカーソフトウェア) |
トリガー アウトプット |
|
SendGrid | アウトプット | |
サービスバス |
トリガー アウトプット |
リンク |
SignalR |
トリガー 入力 アウトプット |
|
テーブル ストレージ |
入力 アウトプット |
|
タイマー | トリガー | リンク |
Twilio | アウトプット | リンク |
Python のバインド コードは、Python モデルのバージョンによって異なります。
サービス | 例示 | サンプル |
---|---|---|
ブロブストレージ |
トリガー 入力 アウトプット |
リンク |
Azure Cosmos DB (アジュール コスモス データベース) |
トリガー 入力 アウトプット |
リンク |
アジュール データ エクスプローラー (Azure Data Explorer) |
入力 アウトプット |
|
Azure SQL |
トリガー 入力 アウトプット |
リンク |
イベントグリッド |
トリガー アウトプット |
リンク |
イベント ハブ |
トリガー アウトプット |
|
IoT ハブ |
トリガー アウトプット |
|
HTTP | トリガー | リンク |
キュー記憶域 |
トリガー アウトプット |
リンク |
RabbitMQ(メッセージブローカーソフトウェア) |
トリガー アウトプット |
|
SendGrid | アウトプット | |
サービスバス |
トリガー アウトプット |
リンク |
SignalR |
トリガー 入力 アウトプット |
|
テーブル ストレージ |
入力 アウトプット |
|
タイマー | トリガー | リンク |
Twilio | アウトプット | リンク |
Visual Studio Code
Visual Studio Code を使用して関数を開発し、関数が function.json ファイルを使用する場合、Azure Functions 拡張機能は、既存の function.json ファイルにバインドを自動的に追加できます。 詳細については、「 入力バインドと出力バインドの追加」を参照してください。
Azure Portal
Azure portal で関数を開発するときは、特定の関数の [統合] タブに入力バインドと出力バインドを追加します。 新しいバインドは、言語に応じて、function.json ファイルまたはメソッド属性に追加されます。 次の記事では、ポータルで既存の関数にバインドを追加する方法の例を示します。