りゅうじの学習blog

学習したことをアウトプットしていきます。

7/10 AzureFunctionsが複数exportされた関数を特定するためのentryPointを明示的に指定する

なぜやるか

Azure Functionsでは、JavaScriptやTypeScriptで書かれた関数をエクスポートするとき、その関数が実行されるべきものであることを明示的に示す必要があります。これは、Azure Functions ホストが関数アプリ内のファイルからどの関数を実行するかを判断するための情報です。 もしエクスポートされた関数が一つだけであれば、Azure Functions ホストはその関数をデフォルトで実行します。しかし、複数の関数がエクスポートされている場合、ホストはどの関数を実行すべきか判断できません。そのため、特定の関数を実行するように指示するために、entryPoint プロパティを使用して関数名を指定します。

  • AzureFunctionsのentryPointを指定していないことで、どの関数を実行すればいいのか、特定できずに実行されなかった
  • これまでは、同時刻の定期実行タスクがなかったので、問題なかった
  • 複数の関数を同時刻に定期実行する場合は、entryPointを明示的に指定する必要がある

Testディレクトリにfunction.jsonとindex.tsがあると仮定します

function.json

{
  "bindings": [
    {
      "name": "Test",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 30 8 * * *"
    }
  ],
  "scriptFile": "../built/functions/Test/index.js",
  "entryPoint": "default"
}
  • entryPointを指定

index.ts

// eslint-disable-next-line import/no-unresolved
import { AzureFunction } from '@azure/functions';

const fn: AzureFunction = async function 関数名(
  context
) {
  try {
    await 定期実行したい関数()
    );
  } catch (err) {
    context.log.error(err);
  }
};

export default fn;

azure-functionsディレクトリに、function.jsonとindex.tsがあります

function.json

{
  "bindings": [
    {
      "name": "__function__",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 */1 * * * *" // fix this
    }
  ],
  "scriptFile": "../built/functions/__function__/index.js",
  "entryPoint": "default"
}
  • entryPointを指定

index.ts

import { AzureFunction } from "@azure/functions";

const fn: AzureFunction = async function __function__(context) {
  try {
    // run task here
  } catch (err) {
    context.log.error(err);
  }
};

// Do not change this line. Azure Functions need to one default export function.
export default fn;