演習 - Core Tools を使用してローカルで関数を作成する

完了

Azure Functions Core Tools では、次のようにして自分のコンピューターで関数をローカルに開発できます。

  • 関数プロジェクトに必要なファイルとフォルダーを作成する。
  • プロジェクトのルート ディレクトリからローカルで実行される関数ホストを提供する。

あなたは、単利を計算する関数を開発することにより、Azure Functions に関する作業をローカル環境で始めることにしました。 最終的には、連携して他のサービスやデータベースを呼び出す、より複雑な関数を作成できるようになります。 手始めとして、Core Tools を使って基本的なローン計算を行う関数を構築することをお勧めします。 また、自分のコンピューター上で関数を実行してみてから、Azure に発行することもできます。 これはすべて Azure Cloud Shell から Core Tools を使用して実行できます。

Azure Cloud Shell には、Core Tools、Azure CLI、およびコードの記述に使用できるエディターが付属しています。 次に進む前に、必ず上の [サンドボックスをアクティブにする] を選んでください。

ローカルの Azure Functions プロジェクトを作成する

この演習では、Cloud Shell を使い、Core Tools を使って最初の JavaScript 関数を開発します。 Cloud Shell には、Core Tools と Node.js の正しいバージョンが既にインストールされています。

  1. ルート フォルダーから func init を実行して、新しい loan-wizard フォルダーに関数プロジェクトを作成します。

    func init loan-wizard
    
  2. ワーカー ランタイムの選択を求められたら、ノードを示す「3」と入力します。

  3. 言語の選択を求められたら、javascript を示す「1」と入力します。

    出力には、次のファイルを含め、ディスクに書き込まれるファイルが一覧表示されます。

    • host.json は、ランタイム インスタンスと特定のトリガーおよびバインディングの種類の両方についてアプリレベルの構成をサポートしています。
    • local.settings.json には、ローカルのみの動作とアプリケーション設定 (ローカル環境変数) を設定します。
    • package.json は、コード内でインストールおよび使用するすべてのパッケージを追跡する JavaScript 固有のファイルです。
    • .gitignoreextensions.json は、それぞれ Git バージョン コントロール ツールと Visual Studio Code で使われる構成ファイルです。 今のところは無視しても構いません。

HTTP トリガー関数を作成する

それでは関数を作成しましょう。

  1. Cloud Shell で新しい loan-wizard ディレクトリに移動します。

    cd ~/loan-wizard
    
  2. func new を実行して関数作成ウィザードを開始します。

    func new
    
  3. テンプレートの選択を求められたら、HTTP トリガーを示す「7」と入力します。

  4. HTTP トリガーの関数名を指定するように求められたら、「simple-interest」と入力します。

  5. 次のコマンドを実行して、Cloud Shell エディターを開きます。

    code .
    

    Screenshot showing the simple-interest folder with the function.json file open in Cloud Shell code editor.

    このウィザードを使って、関数プロジェクトの src/functions に、既定のテンプレート コンテンツを含む simple-interest.js という新しいファイルを作成します。 このコードは、Azure Functions 用の Node.js v4 プログラミング モデルをサポートしています。 ここで少し時間を取り、エディターを使ってプロジェクト ファイルを調べてみてください。 スクリーンショットは、展開されたフォルダーと simple-interest.js が表示されたエディターを示しています。

simple-interest 関数を実装する

Core Tools によって simple-interest.js 内に作成された既定の関数実装では、クエリ文字列またはインバウンド HTTP 要求の本体で name という名前の入力が検索され、文字列 Hello, [name] が返されます。 これは HTTP トリガーを使う方法を示す良い例ですが、ここでは、そのコードを 3 つの入力パラメーターから単利を計算するコードに置き換えます。

  1. エディターの [FILES] ペインで src>functions フォルダーを展開し、simple-interest.js を選び、エディターでファイルを開きます。

  2. simple-interest.js の内容全体を次のコードに置き換えます。

    const { app } = require('@azure/functions');
    
    app.http('simple-interest', {
        methods: ['GET','POST'],
        authLevel: 'anonymous',
        handler: async (request, context) => {
            const principal = parseFloat(request.query.get('principal'));
            const rate = parseFloat(request.query.get('rate'));
            const term = parseFloat(request.query.get('term'));
    
          if ([principal, rate, term].some(isNaN)) {
            // If any empty or non-numeric values, return a 400 response with an
            // error message
            return {
              status: 400,
              body: "Please supply principal, rate and term in the query string"
            };
          } else {
            // Otherwise set the response body to the product of the three values
            return { body: principal * rate * term };
          }
        }
    });
    

    このスクリプトでは、HTTP 要求のクエリ文字列にある principalrateterm というパラメーターを検索します。 次に、単利計算の結果 (principal * rate * term) を返します。

  3. Ctrl+S キーを押してファイルを保存し、Ctrl+Q キーを押してエディターを閉じます。

Cloud Shell で関数を実行する

新しい関数をローカルで実行して試してみるには、func start を使って Functions ランタイム (func.exe) をバックグラウンド プロセスで開始します。これにより、関数の実行中にコマンド ラインを使用できるようになります。 次に、コマンドライン ツールの curl を使って関数を操作します。

自分のコンピューターから Core Tools を使っている場合は、2 つ目のターミナル ウィンドウまたは Web ブラウザーから curl を使用できます。 Core Tools によって生成された出力は、1 つ目のターミナル ウィンドウにリアル タイムで表示されます。 Cloud Shell では、1 つのターミナルに制限されているので、Core Tools (func.exe) をバックグラウンド プロセスで実行する必要があります。

  1. 次のコマンドを実行して、バックグラウンドでサイレント モードで Functions ホストを起動します。

    func start &> ~/output.txt &
    

    func new と同様に、Cloud Shell の現在のディレクトリは loan-wizard のままにする必要があります。

    Functions ホストの出力はファイル ~/output.txt に書き込まれるようになりました。 実行中もコマンド ラインを使い続けることができます。

    func プロセスが実行されていることを確認するには、ps コマンドを使用します。

  2. 次のコマンドを入力して、出力ログを表示します。

    code ~/output.txt
    

    出力には、GET および POST HTTP 要求 http://localhost:7071/api/simple-interest の両方として Functions: simple-interest: を使用できることを示すメッセージが表示されます。

    Note

    エラー メッセージが表示された場合は、Ctrl+C キーを押してホストを停止します。 コード ファイルの内容がサンプルと同じであることを確認します。

    この localhost URL は Web には公開されず、自分の Cloud Shell セッションで実行されているツールからのみアクセスできます。

  3. Ctrl+Q キーを押してエディターを閉じます。

  4. 次のコマンドを実行して、ローカルで実行している関数に HTTP GET 要求を送信します。

    curl "http://localhost:7071/api/simple-interest" -w "\n"
    

    出力 Please supply principal, rate and term in the query string は、この関数の呼び出しに成功し、応答を返すことはできても、所定の呼び出し方ではないことを示しています。 HTTP 要求の一部としてパラメーターを指定する必要があります。

  5. 関数をもう一度呼び出します。 今回は、各クエリ文字列パラメーターに値を指定します。

    curl "http://localhost:7071/api/simple-interest?principal=5000&rate=.035&term=36" -w "\n"
    

    今回の出力は 6300 です。 関数は想定どおりに動作するようになりました。

  6. 次のコマンドを入力して、出力ログを再度表示します。

    code ~/output.txt
    

    curl を使って関数を呼び出すたびに、スタートアップ ログ エントリの後に、タイムスタンプ付きの一連のログ エントリが追加されます。

    [2024-02-20T06:25:56.700Z] Executing 'Functions.simple-interest' (Reason='This function was programmatically called via the host APIs.', Id=5daf20c3-f204-41bb-a5b9-021acaf17c04)
    [2024-02-20T06:25:56.893Z] Executed 'Functions.simple-interest' (Succeeded, Id=5daf20c3-f204-41bb-a5b9-021acaf17c04, Duration=228ms)
    
    
  7. Ctrl+Q キーを押してエディターを閉じます。