次の3つの関数を作成しました
[3]関数では、[2]関数を呼び出して、以下のようにAzure関数のURLを使用してユーザーを取得します。
https://hdidownload.azurewebsites.net/api/getusers
上記のフルパスなしで別のAzure関数でAzure関数を呼び出す他の方法はありますか?
実際にHTTP呼び出しを行わずに、あるHTTP関数を他の関数から呼び出すためのFunction Appsには組み込みのものはありません。
単純な使用例では、完全なURLによる呼び出しに固執します。
より高度なワークフローについては、 Durable Functions 、特に Function Chaining をご覧ください。
以前の回答はすべて有効ですが、コメントでも言及されたように、今年の初め(2018年第1四半期)、Durable Functionsの概念が導入されました。要するに、耐久機能:
...サーバーレス環境でステートフル関数を記述できます。拡張機能は、状態、チェックポイント、および再起動を管理します。
これは事実上、複数の機能を一緒にチェーンすることもできることを意味します。必要な場合は、関数A => B => Cから流れるときに状態を管理します。
Function AppにDurable Functions Extensionをインストールすることで機能します。これにより、たとえばC#で(擬似コード)のようなことができるいくつかの新しいコンテキストバインディングが利用可能になります。
[FunctionName("ExpensiveDurableSequence")]
public static async Task<List<string>> Run(
[OrchestrationTrigger] DurableOrchestrationTrigger context)
{
var response = new List<Order>();
// Call external function 1
var token = await context.CallActivityAsync<string>("GetDbToken", "i-am-root");
// Call external function 2
response.Add(await context.CallActivityAsync<IEnumerable<Order>>("GetOrdersFromDb", token));
return response;
}
[FunctionName("GetDbToken")]
public static string GetDbToken([ActivityTrigger] string username)
{
// do expensive remote api magic here
return token;
}
[FunctionaName("GetOrdersFromDb")]
public static IEnumerable<Order> GetOrdersFromDb([ActivityTrigger] string apikey)
{
// do expensive db magic here
return orders;
}
ここにいくつかの素晴らしい側面があります:
これにより、複数の機能を相互に連続して実行する(例:関数チェーン)か、複数の機能を並行して実行し、すべてが完了するのを待つ(ファンアウト/ファンイン)ことができます。
これに関する追加の背景参照:
耐久関数があることは知っていますが、通常の静的メソッドのように関数を呼び出します。
public static class Helloworld
{
[FunctionName("Helloworld")]
public static string Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req, ILogger log)
{
return "Hello World";
}
}
public static class HelloWorldCall
{
[FunctionName("HelloWorldCall")]
public static string Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req, ILogger log)
{
var caller = Helloworld.Run(req, log);
return caller;
}
}
直接行うことはできませんが、2つのオプションがあります。
最初のオプションについては、C#では次のようにできます。
static HttpClient client = new HttpClient();
[FunctionName("RequestImageProcessing")]
public static async Task RequestImageProcessing([HttpTrigger(WebHookType = "genericJson")]
HttpRequestMessage req)
{
string anotherFunctionSecret = ConfigurationManager.AppSettings
["AnotherFunction_secret"];
// anotherFunctionUri is another Azure Function's
// public URL, which should provide the secret code stored in app settings
// with key 'AnotherFunction_secret'
Uri anotherFunctionUri = new Uri(req.RequestUri.AbsoluteUri.Replace(
req.RequestUri.PathAndQuery,
$"/api/AnotherFunction?code={anotherFunctionSecret}"));
var responseFromAnotherFunction = await client.GetAsync(anotherFunctionUri);
// process the response
}
[FunctionName("AnotherFunction")]
public static async Task AnotherFunction([HttpTrigger(WebHookType = "genericJson")]
HttpRequestMessage req)
{
await Worker.DoWorkAsync();
}
良いソースが見つかりませんでした。以下を実行しましたが、うまくいきました。
以下の形式のURLで他の関数を呼び出すには:
Node.jsでは、次のように呼び出しました。
let request_options = {
method: 'GET',
Host: 'my-functn-app-1.azurewebsites.net',
path: '/path1/path2?&q1=v1&q2=v2&code=123412somecodehereemiii888ii88k123m123l123k1l23k1l3',
headers: {
'Content-Type': 'application/json'
}
};
require('https')
.request(
request_options,
function (res) {
// do something here
});
問題なく働いた。
他のプログラミング言語でも同様に機能するはずです。
お役に立てれば。