演習 - 入力バインディングと出力バインディングの種類を確認する
この演習では、HTTP 要求を受信すると実行され、メッセージを返すことで各要求に応答する関数を作成します。
何をビルドするかを示す次の概要図を参照してください。
関数アプリを作成する
このモジュールで使用できる関数アプリを作成しましょう。 関数アプリを使用すると、リソースの管理、デプロイ、および共有を容易にするための論理ユニットとして関数をグループ化できます。
サンドボックスのアクティブ化に使用したアカウントを使用して 、Azure portal にサインインします。
リソース メニューまたは ホーム ページで、[ リソースの作成] を選択します。 [ リソースの作成 ] ウィンドウが表示されます。
[ リソースの作成 ] メニューで [ Web] を選択し、結果の一覧で [Function App] を選択します。 [Search services and marketplace]\(サービスとマーケットプレースの検索\) ウィンドウで Function App を検索することが必要な場合があります。
従量課金 を選択し、次に 選択 ボタンを押します。 [ 関数アプリの作成 ] ウィンドウが表示されます。
[ 基本 ] タブで、各設定に次の値を入力します。
設定 値 説明 プロジェクトの詳細 サブスクリプション コンシェルジェ サブスクリプション この演習に使用する Azure サブスクリプション。 リソース グループ ドロップダウン リストから 、[ サンドボックス リソース グループ名] を選択しますサンドボックスのリソース グループ。 インスタンスの詳細 関数アプリ名 グローバルに 一意の名前を入力する この名前が、新しい関数アプリを示します。 有効な文字は、 a-z
、0-9
、-
です。ランタイム スタック ドロップダウン リストから Node.jsを選択します このモジュールのサンプル コードは、JavaScript で記述されています。 バージョン 既定値をそのまま使用 する この演習では既定値で十分です。 リージョン ドロップダウン リストから場所を選択します 最寄りのリージョンを選択します。 他のすべてのオプションについては、既定値をそのまま使用します。 [ 確認と作成 ] を選択して設定を検証し、[ 作成 ] を選択して関数アプリをプロビジョニングしてデプロイします。
デプロイには時間がかかることがあります。 アカウント名の横にあるグローバル コントロールで、[ 通知 ] アイコンを選択し、 デプロイに成功した メッセージを監視します。
関数のデプロイが完了したら、[ リソースに移動] を選択します。 関数アプリの [概要 ] ウィンドウが表示されます。
サンドボックスのアクティブ化に使用したのと同じアカウントを使用して 、Azure portal にサインインします。
リソース メニューまたは ホーム ページで、[ リソースの作成] を選択します。 [ リソースの作成 ] ウィンドウが表示されます。
[ リソースの作成 ] メニューで [ コンピューティング] を選択し、結果の一覧で [関数アプリ] を選択します。 [Search services and marketplace]\(サービスとマーケットプレースの検索\) ウィンドウで Function App を検索することが必要な場合があります。
従量課金 を選択し、次に 選択 ボタンを押します。 [ 関数アプリの作成 ] ウィンドウが表示されます。
[ 基本 ] タブで、各設定に次の値を入力します。
設定 値 説明 プロジェクトの詳細 サブスクリプション コンシェルジェ サブスクリプション この演習に使用する Azure サブスクリプション。 リソース グループ ドロップダウン リストから 、[ サンドボックス リソース グループ名] を選択しますサンドボックスのリソース グループ。 インスタンスの詳細 関数アプリ名 グローバルに 一意の名前を入力する この名前が、新しい関数アプリを示します。 有効な文字は、 a-z
、0-9
、-
です。ランタイム スタック ドロップダウン リストから PowerShell Core を選択します このモジュールのサンプル コードは、PowerShell で記述されています。 バージョン 既定値をそのまま使用 する この演習では既定値で十分です。 リージョン ドロップダウン リストから場所を選択します 最寄りのリージョンを選択します。 他のすべてのオプションについては、既定値をそのまま使用します。 [ 確認と作成 ] を選択して入力を検証し、[ 作成 ] を選択して関数アプリをプロビジョニングしてデプロイします。
デプロイには時間がかかることがあります。 アカウント名の横にあるグローバル コントロールで、[ 通知 ] アイコンを選択し、 デプロイに成功した メッセージを監視します。
関数のデプロイが完了したら、[ リソースに移動] を選択します。 関数アプリの [概要 ] ウィンドウが表示されます。
ヒント
Azure portal で関数アプリを見つけるのに問題がある場合は、Azure portal で 関数アプリをお気に入りに追加する方法について説明します。
関数を作成する
これで関数アプリを用意できたので、次は関数を作成します。 各関数には、それをアクティブにするトリガーがあります。 このモジュールでは、定義済みのテンプレートを使用して HTTP トリガーを定義します。
[概要] ページの [関数] タブの [Azure portal で作成] の下にある [関数の作成] ボタンを選択します。
[ 関数の作成 ] ウィンドウが表示されます。
[ テンプレートの選択 ] セクションで、 HTTP トリガー テンプレートを選択し、[ 次へ] を選択します。
[ テンプレートの詳細 ] セクションで、次の設定を確認します。
[ 関数名 ] テキスト ボックスで、既定の名前 HttpTrigger1 を使用します。 作成する関数には、Azure によって、一意の名前が自動的に作成されます。 異なる名前を選択することもできますが、わかりやすい名前を使用するようにしてください。
[ 承認レベル ] テキスト ボックスで、既定値の 関数を使用します。 承認レベルによって、関数を実行するために要求で提示する必要があるキーが決まります。 "関数" の承認レベルには、関数固有のキーが必要です。このキーは関数作成後に確認できます。
作成を選択します。 トリガー関数が関数アプリに伝達されると、 関数 アプリの [ 関数 ] ウィンドウが表示され、 HttpTrigger1 が一覧表示されます。
コマンド バーで、[ 関数 URL の取得] を選択します。 [ 関数 URL の取得 ] ダイアログ ボックスが表示されます。
ドロップダウン リストで既定 (関数キー) を選択し、URL の末尾にある [クリップボードにコピー ] アイコンを選択し、[ OK] を 選択してダイアログを閉じます。
ブラウザーの新しいタブのアドレス バーに、コピーした関数の URL を貼り付けます。 Enter キーを押して、ブラウザーで要求を実行します。 関数アプリの初期化のため、応答には数分かかる場合があります。 タイムアウト エラーが発生した場合は、更新して要求を再送信します。
関数が応答すると、次の例のような出力がブラウザーに表示されます。
This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.
次のクエリ文字列
&name=Joe
を URL の末尾に追加します。 結果の URL は次の例のようになります。https://example.azurewebsites.net/api/HttpTrigger1?code=AbCdEfGhIjKlMnOpQrStUvWxYz==&name=Joe
Enter キーを押して、ブラウザーで要求を実行します。 関数が応答すると、次の例のような出力がブラウザーに表示されます。
Hello, Joe. This HTTP triggered function executed successfully.
ここまでの演習からわかるように、関数を作成するときにトリガーを定義する必要があります。 関数ごとにトリガーが 1 つあります。 この例では HTTP トリガーを使用しています。つまり、この関数は HTTP 要求を受信すると起動します。 次のスクリーンショットの JavaScript に示されているテンプレートの既定の実装は、要求のクエリ文字列または本文にあったパラメーター 名 の値を返します。 クエリ文字列が指定されていない場合、関数は呼び出し元に対して名前値を指定するよう求めるメッセージで応答します。
Azure portal の [関数 ] メニューで、[ コード + テスト] を選択します。
関数の [コード + テスト ] ウィンドウが表示され、 index.js ファイルの内容が表示されます。 関数の既定の JavaScript コードは、次の例のようになります。
module.exports = async function (context, req) { context.log('JavaScript HTTP trigger function processed a request.'); const name = (req.query.name || (req.body && req.body.name)); const responseMessage = name ? "Hello, " + name + ". This HTTP triggered function executed successfully." : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."; context.res = { // status: 200, /* Defaults to 200 */ body: responseMessage }; }
関数の他のファイルである function.json 構成ファイルを簡単に見てみましょう。 コード ブロックの上にあるファイルパスのドロップダウン リストから function.json を選択して、このファイルにアクセスします。 次の JSON の一覧に、この構成データが示されています。
{ "bindings": [ { "authLevel": "function", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "get", "post" ] }, { "type": "http", "direction": "out", "name": "res" } ] }
この関数には、型の req という名前の
httpTrigger
と、型のhttp
という名前の出力バインドがあります。
前の関数のコードでは、 req パラメーターを使用して受信 HTTP 要求のペイロードにアクセスしました。 同様に、 res パラメーターを設定して HTTP 応答を送信しました。 このようにバインディングを使用すると、面倒な作業の一部が自動的に行われます。
関数アプリを用意できたので、次に関数を作成しましょう。 各関数には、それをアクティブにするトリガーがあります。 このモジュールでは、テンプレートを使用して HTTP トリガーを作成します。
[概要] ページの [関数] タブの [Azure portal で作成] の下にある [関数の作成] ボタンを選択します。
[ 関数の作成 ] ウィンドウが表示されます。
[ テンプレートの選択 ] セクションで、 HTTP トリガー テンプレートを選択し、[ 次へ] を選択します。
[ テンプレートの詳細 ] セクションで、次の設定を確認します。
作成を選択します。 関数の HttpTrigger1 ペインが表示されます。
コマンド バーで、[ 関数 URL の取得] を選択します。 [ 関数 URL の取得 ] ダイアログ ボックスが表示されます。
既定の (関数キー) で、URL の末尾にある [クリップボードにコピー] アイコンを選択し、[閉じる] を選択してダイアログ ボックスを閉じます。
ブラウザーの新しいタブのアドレス バーに、コピーした関数の URL を貼り付けます。 Enter キーを押して、ブラウザーで要求を実行します。 関数アプリの初期化のため、応答には数分かかる場合があります。 タイムアウト エラーが発生した場合は、更新して要求を再送信します。
関数が応答すると、次の例のような出力がブラウザーに表示されます。
This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.
URL の末尾にクエリ文字列
&name=Joe
を追加します。 結果の URL は次の例のようになります。https://example.azurewebsites.net/api/HttpTrigger1?code=AbCdEfGhIjKlMnOpQrStUvWxYz==&name=Joe
Enter キーを押して、ブラウザーで要求を実行します。 関数が応答すると、次の例のような出力がブラウザーに表示されます。
Hello, Joe. This HTTP triggered function executed successfully.
ここまでの演習からわかるように、関数を作成するときにトリガーを定義する必要があります。 関数ごとにトリガーが 1 つあります。 この例では HTTP トリガーを使用しています。つまり、この関数は HTTP 要求を受信すると起動します。 次のスクリーンショットに PowerShell で示されているテンプレートの既定の実装では、
Push-OutputBinding
コマンドレットを使用して、クエリ文字列または要求の本文に含まれていたパラメーター名の値で応答されます。 文字列が指定されていない場合、関数により、呼び出し元に対して名前値を指定するよう求めるメッセージで応答が行われます。[関数] メニューで、[ コード + テスト] を選択します。 関数の [コード + テスト ] ウィンドウが表示され、 run.ps1 ファイルの内容が表示されます。
関数の既定の PowerShell コードは、次の例のようになります。
using namespace System.Net # Input bindings are passed in via param block. param($Request, $TriggerMetadata) # Write to the Azure Functions log stream. Write-Host "PowerShell HTTP trigger function processed a request." # Interact with query parameters or the body of the request. $name = $Request.Query.Name if (-not $name) { $name = $Request.Body.Name } $body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response." if ($name) { $body = "Hello, $name. This HTTP triggered function executed successfully." } # Associate values to output bindings by calling 'Push-OutputBinding'. Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{ StatusCode = [HttpStatusCode]::OK Body = $body })
関数の他のファイルである function.json 構成ファイルを簡単に見てみましょう。 ファイルパスのドロップダウン リストから function.json を選択して、このファイルを開きます。 次の JSON の一覧に、この構成データが示されています。
{ "bindings": [ { "authLevel": "function", "type": "httpTrigger", "direction": "in", "name": "Request", "methods": [ "get", "post" ] }, { "type": "http", "direction": "out", "name": "Response" } ] }
ご覧のように、この関数には、型の
httpTrigger
という名前のトリガー バインドと、型の Response という名前の出力バインドhttp
。 前の関数のコードでは、 Request パラメーターを使用して受信 HTTP 要求のペイロードにアクセスする方法を確認しました。 同様に、Response パラメーターを設定するだけで HTTP 応答 を送信しました。 このようにバインディングを使用すると、面倒な作業の一部が自動的に行われます。
バインディングの種類を確認する
[ 関数 ] メニューの [ 統合] を選択します。 関数の 統合 ウィンドウが表示されます。
次の図に示すように、トリガーと出力バインディングは既に定義されていることに注意してください。 統合ビューは、ご利用の画面の幅と高さに最適なサイズに調整されます。 画面の幅が十分であれば、同じ情報を横方向に表示することもできます。
複数のトリガーを追加できないことがわかります。 関数のトリガーを変更するには、トリガーを削除して新しいトリガーを作成する必要があります。 ただし、 入力 と 出力 のセクションでは、複数のバインドを追加できるため、要求は複数の入力値を受け入れて、複数の出力値を返すことができます。
[ 入力 ] ボックスで、[ 入力の追加] を選択します。 [ 入力の作成 ] ウィンドウが表示されます。 使用可能なすべての入力 バインドの種類 の一覧を表示するには、[バインドの種類] のドロップダウン リストを選択します。
少し時間をとって、ソリューションでこれらの各入力バインディングを使用する方法について考えてみましょう。
このモジュールの後半で、入力バインドを追加します。 ここでは、[ キャンセル] を選択してこのウィンドウを閉じます。
[出力] ボックス で 、[ 出力の追加] を選択します。 [出力の作成] ウィンドウが表示されます。 [ バインドの種類 ] のドロップダウン リストを選択して、使用可能なすべての出力バインドの種類の一覧を表示します。
ご覧のように、出力バインディングの種類は複数あります。 このモジュールの後半で出力バインドを追加しますが、ここでは [キャンセル ] を選択してこのウィンドウを閉じます。
[ 関数 ] メニューの [ 統合] を選択します。 関数の 統合 ウィンドウが表示されます。
次の図に示すように、トリガーと出力バインディングは既に定義されていることに注意してください。 統合ビューは、ご利用の画面の幅と高さに最適なサイズに調整されます。 画面の幅が十分ではない場合は、同じ情報を垂直方向に表示できます。
複数のトリガーを追加できないことがわかります。 関数のトリガーを変更するには、トリガーを削除して新しいトリガーを作成する必要があります。 ただし、 入力 と 出力 のセクションでは、複数のバインドを追加できるため、関数は複数の入力値を受け取り、複数の出力値を返すことができます。
[ 入力 ] ボックスで、[ 入力の追加] を選択します。 [ 入力の作成 ] ウィンドウが表示されます。 使用可能なすべての入力 バインドの種類 の一覧を表示するには、[バインドの種類] のドロップダウン リストを選択します。
少し時間をとって、ソリューションでこれらの各入力バインディングを使用する方法について考えてみましょう。 選択できる方法は多数あります。
このモジュールの後半で入力バインドを追加しますが、ここでは [キャンセル ] を選択してこのウィンドウを閉じます。
[出力] ボックス で 、[ 出力の追加] を選択します。 [出力の作成] ウィンドウが表示されます。 [ バインドの種類 ] のドロップダウン リストを選択して、使用可能なすべての出力バインドの種類の一覧を表示します。
ご覧のように、出力バインディングの種類は複数あります。 このモジュールの後半で、出力バインドを追加します。 ここでは、[ キャンセル] を選択してこのウィンドウを閉じます。
ここまで、関数アプリを作成し、関数を追加する方法を学習しました。 動作中の単純な関数を見ました。これは、HTTP 要求が行われたときに実行される関数です。 また、Azure portal と、関数で使用できる入力および出力バインディングの種類も確認しました。 次のユニットでは、入力バインディングを使用してデータベースからテキストを読み取ります。