Visual Studio Codeを使用して、テンプレートからの HTTP 要求に応答する関数を作成します。 GitHub Copilotを使用して、生成された関数コードを改善し、コードの更新をローカルで確認してから、Azure Functionsのサーバーレス Flex Consumption ホスティング プランにデプロイします。
Visual Studio Codeを使用して、HTTP 要求に応答する custom ハンドラー 関数を作成します。 コードをローカルで確認したら、Azure Functionsのサーバーレス Flex Consumption ホスティング プランにデプロイします。
カスタム ハンドラーを使用すると、HTTP サーバー プロセスを実行することによって任意の言語またはランタイムで関数を作成できます。 この記事では、Go と Rust の両方をサポートしています。
このクイック スタートを完了すると、Azure アカウントで数 USD セント以下の小さなコストが発生します。
記事の先頭で、お使いの開発言語を選んでください。
[前提条件]
アクティブなサブスクリプションを持つAzure アカウント。 無料でアカウントを作成できます。
Visual Studio Codeは、サポートされているプラットフォームのいずれかです。
Visual Studio CodeのAzure Functions拡張機能。
Visual Studio Codeの C# 拡張機能。
Java Development Kit バージョン 8、11、17、または 21 (Linux のみ)。
Apache Maven バージョン 3.0 以降。
- Node.js 18.x 以降。 コマンドを使用して、現在のバージョンを確認してください。
PowerShell 7.2
Visual Studio Code の
PowerShell 拡張機能。
Azure Functions によってサポートされている Python のバージョン。 詳細については、「
Python を参照してください。Visual Studio CodeのPython拡張機能。
- 進む
- 錆
- Go。最新バージョンをお勧めします。 コマンドを使用して、現在のバージョンを確認してください。
Core Tools のインストールまたは更新
Visual Studio CodeのAzure Functions拡張機能は Azure Functions Core Tools と統合されているため、Azure Functions ランタイムを使用してVisual Studio Codeで関数をローカルで実行およびデバッグできます。 作業を開始する前に、Core Tools をローカルにインストールするか、最新バージョンを使用するように既存のインストールを更新することをお勧めします。
Visual Studio Codeで F1 キーを押してコマンド パレットを開き、コマンド Azure Functions: Install or Update Core Tools を検索して実行します。
このコマンドは、最新バージョンの Core Tools のパッケージ ベースのインストールを開始するか、既存のパッケージ ベースのインストールを更新しようとします。 ローカル コンピューターに npm または Homebrew がインストールされていない場合は、代わりに Core Tools を手動でインストールまたは更新する必要があります。
ローカル プロジェクトを作成する
このセクションでは、Visual Studio Codeを使用して、優先する言語でローカル Azure Functions プロジェクトを作成します。 この記事の後半では、関数コードを更新して実行し、Azureに発行します。
Visual Studio Codeで、F1 を押してコマンド パレットを開きます。 コマンド
Azure Functions: Create New Project...を検索して実行します。プロジェクト ワークスペースのディレクトリの場所を選択し、[選択] を選択します。 新しいフォルダーを作成するか、プロジェクト ワークスペースの空のフォルダーを選択する必要があります。 ワークスペースに最初から含まれているプロジェクト フォルダーは選択しないでください。
プロンプトで、次の情報を入力します。
Prompt [選択] Select a language (言語を指定してください) [] を選択します。 .NET ランタイムを選択します .NET 8.0 LTSを選択します。プロジェクトの最初の関数のテンプレートを選択します [] を選択します。 関数に名前を指定します 「」と入力します。 名前空間を指定する 「」と入力します。 承認レベル を選択します。これには、関数エンドポイントを呼び出すためにアクセス キーが必要です。 詳細については、「認可レベル」を参照してください。 プロジェクトを開く方法を選択してください [] を選択します。 Prompt [選択] Select a language (言語を指定してください) Javaを選択します。Java Java 8、Java 11、Java 17、またはJava 21(関数がAzureで実行されるJavaバージョン) を選択します。 ローカルで検証したJavaバージョンを選択します。Provide a group ID (グループ ID を指定してください) [] を選択します。 Provide an artifact ID (成果物 ID を指定してください) [] を選択します。 Provide a version (バージョンを指定してください) [] を選択します。 Provide a package name (パッケージ名を指定してください) [] を選択します。 Provide an app name (アプリ名を指定してください) [] を選択します。 プロジェクトの最初の関数のテンプレートを選択します [] を選択します。 Java プロジェクトのビルド ツールを選択します [] を選択します。 プロジェクトを開く方法を選択してください [] を選択します。 Prompt [選択] Select a language (言語を指定してください) [] を選択します。 JavaScript プログラミング モデルを選択する [] を選択します。 プロジェクトの最初の関数のテンプレートを選択します [] を選択します。 関数に名前を指定します 「」と入力します。 承認レベル を選択します。これには、関数エンドポイントを呼び出すためにアクセス キーが必要です。 詳細については、「認可レベル」を参照してください。 プロジェクトを開く方法を選択してください [] を選択します。 Prompt [選択] Select a language (言語を指定してください) [] を選択します。 JavaScript プログラミング モデルを選択する [] を選択します。 プロジェクトの最初の関数のテンプレートを選択します [] を選択します。 関数に名前を指定します 「」と入力します。 承認レベル を選択します。これには、関数エンドポイントを呼び出すためにアクセス キーが必要です。 詳細については、「認可レベル」を参照してください。 プロジェクトを開く方法を選択してください [] を選択します。 Prompt [選択] Select a language (言語を指定してください) Pythonを選択します。仮想環境を作成するPython インタープリターを選択します 任意のPythonインタープリターを選択します。 オプションが表示されない場合は、Python バイナリへの完全なパスを入力します。 プロジェクトの最初の関数のテンプレートを選択します [] を選択します。 作成する関数の名前 「」と入力します。 承認レベル を選択します。これには、関数エンドポイントを呼び出すためにアクセス キーが必要です。 詳細については、「認可レベル」を参照してください。 プロジェクトを開く方法を選択してください [] を選択します。 Prompt [選択] Select a language for your function project (関数プロジェクトの言語を選択してください) [] を選択します。 プロジェクトの最初の関数のテンプレートを選択します [] を選択します。 関数に名前を指定します 「」と入力します。 承認レベル を選択します。これには、関数エンドポイントを呼び出すためにアクセス キーが必要です。 詳細については、「認可レベル」を参照してください。 プロジェクトを開く方法を選択してください [] を選択します。 Prompt [選択] Select a language for your function project (関数プロジェクトの言語を選択してください) [] を選択します。 プロジェクトの最初の関数のテンプレートを選択します [] を選択します。 関数に名前を指定します 「」と入力します。 承認レベル を選択します。これには、関数エンドポイントを呼び出すためにアクセス キーが必要です。 詳細については、「認可レベル」を参照してください。 プロジェクトを開く方法を選択してください [] を選択します。 Visual Studio Code はこの情報を使用して、HTTP トリガー関数エンドポイントを持つ Azure Functions 用のコードプロジェクトを生成します。 ローカル プロジェクト ファイルは、エクスプローラーで表示できます。 作成されるファイルの詳細については、「生成されるプロジェクト ファイル」を参照してください。
local.settings.json ファイルで、次の例のように 設定を更新します。
"AzureWebJobsStorage": "UseDevelopmentStorage=true",この設定は、Python v2 モデルで必要なストレージ接続にストレージ エミュレーターを使用するようにローカル Functions ホストに指示します。 プロジェクトをAzureに発行する場合、この設定では代わりに既定のストレージ アカウントが使用されます。 ローカル開発中にAzure Storageアカウントを使用する場合は、ストレージアカウントの接続文字列をここで設定してください。
エミュレーターを起動する
Visual Studio Codeで、F1 を押してコマンド パレットを開きます。 コマンド パレットで、を検索して選択します。
下部のバーで、Azurite エミュレーション サービスが実行されていることを確認します。 その場合は、関数をローカルで実行できるようになっています。
関数を作成してビルドする
HTTP トリガー関数は、HttpExample フォルダー内の function.json ファイルで宣言されています。 この関数を完成させるには、ハンドラーを追加し、実行可能ファイルにコンパイルします。
- 進む
- 錆
Ctrl + N (macOS の場合は Cmd + N) キーを押して新しいファイルを作成します。 それを関数アプリのルート (host.json と同じフォルダー) に handler.go として保存します。
handler.go に次のコードを追加して、ファイルを保存します。 これが Go のカスタム ハンドラーです。
package main import ( "fmt" "log" "net/http" "os" ) func helloHandler(w http.ResponseWriter, r *http.Request) { message := "This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response.\n" name := r.URL.Query().Get("name") if name != "" { message = fmt.Sprintf("Hello, %s. This HTTP triggered function executed successfully.\n", name) } fmt.Fprint(w, message) } func main() { listenAddr := ":8080" if val, ok := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT"); ok { listenAddr = ":" + val } http.HandleFunc("/api/HttpExample", helloHandler) log.Printf("About to listen on %s. Go to https://127.0.0.1%s/", listenAddr, listenAddr) log.Fatal(http.ListenAndServe(listenAddr, nil)) }Ctrl + Shift + ` キーを押すか、[ターミナル] メニューの [新しいターミナル] を選択して、新しい統合ターミナルを VS Code で開きます。
次のコマンドを使用してカスタム ハンドラーをコンパイルします。
handler(Windows のhandler.exe) という名前の実行可能ファイルが関数アプリのルート フォルダーに出力されます。go build handler.go
関数アプリを構成する
関数のホストは、起動時にカスタム ハンドラーのバイナリを実行するよう構成する必要があります。
host.json を開きます。
customHandler.descriptionセクションで、defaultExecutablePathの値をhandlerに設定します (Windowsでは、handler.exeに設定します)。セクションで、 という名前のプロパティを追加し、その値を に設定します。 HTTP トリガーのみで構成される関数の場合、この設定により、カスタム ハンドラーの要求ペイロードではなく、標準的な HTTP 要求を使用できるようになるため、プログラミングが容易になります。
セクションが次の例のようになっていることを確認します。 ファイルを保存します。
"customHandler": { "description": { "defaultExecutablePath": "handler", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest": true }
この関数アプリは、カスタム ハンドラーの実行可能ファイルを起動するように構成されました。
関数をローカルで実行する
Visual Studio Codeは Azure Functions Core Tools と統合され、Azureに発行する前にローカル開発コンピューターでこのプロジェクトを実行できます。
関数をローカルで開始するには、F5 キーまたは、左側のアクティビティ バーの [実行とデバッグ] アイコンを押します。 ターミナル パネルに、Core Tools からの出力が表示されます。 [ ターミナル ] パネルでアプリが起動します。 HTTP によってトリガーされる関数の URL エンドポイントがローカルで実行されていることを確認できます。
ローカル関数 VS Code の出力のスクリーンショット。
Windowsで実行できない場合は、Visual Studio Codeの既定のターミナルが WSL Bash に設定されていないことを確認してください。
Core Tools が引き続き Terminal で実行されている状態で、アクティビティ バーのAzure アイコンを選択します。 [ワークスペース] 領域で、[ローカル プロジェクト][関数] を展開します。 右クリック (Windows) または Ctrl - 新しい関数をクリックし、Execute Function Now... を選択します。。
要求本文を入力には、
{ "name": "Azure" }の要求メッセージ本文の値が表示されます。 Enter キーを押して、この要求メッセージを関数に送信します。関数がローカルで実行され、応答を返すと、Visual Studio Codeで通知が発生します。 関数の実行に関する情報が ターミナル パネルに表示されます。
[ターミナル] パネルにフォーカスがある状態で、Ctrl + C キーを押して Core Tools を停止し、デバッガーの接続を解除します。
関数がローカル コンピューターで正しく実行されていることを確認したら、必要に応じて、Visual Studio CodeのGitHub Copilotなどの AI ツールを使用して、テンプレートで生成された関数コードを更新できます。
AI を使用して入力を正規化および検証する
次の例では、Copilot Chat のプロンプトで、クエリ文字列または JSON 本文からパラメーターを取得するように既存の関数コードを更新します。 書式設定または型変換が適用され、応答でパラメーターが JSON として返されます。
Modify the function to accept name, email, and age from the JSON body of the
request. If any of these parameters are missing from the query string, read
them from the JSON body. Return all three parameters in the JSON response,
applying these rules:
Title-case the name
Lowercase the email
Convert age to an integer if possible, otherwise return "not provided"
Use sensible defaults if any parameter is missing
Make sure that any added packages are compatible with the version of the packages already in the project
Modify the function to accept name, email, and age from the JSON body of the
request. If any of these parameters are missing from the query string, read
them from the JSON body. Return all three parameters in the JSON response,
applying these rules:
Title-case the name
Lowercase the email
Convert age to an integer if possible, otherwise return "not provided"
Use sensible defaults if any parameter is missing
Modify the function to accept name, email, and age from the JSON body of the
request. If any of these parameters are missing from the query string, read
them from the JSON body. Return all three parameters in the JSON response,
applying these rules:
Title-case the name
Lowercase the email
Convert age to an integer if possible, otherwise return "not provided"
Use sensible defaults if any parameter is missing
Update the FunctionTest.java file to test the new logic.
プロンプトをカスタマイズして、必要に応じて詳細を追加できます。 次に、アプリをローカルで再度実行し、コードの変更後に期待どおりに動作することを確認します。 今回は、次のようなメッセージ本文を使います。
{ "name": "devon torres", "email": "torres.devon@contoso.com", "age": "34" }
ヒント
GitHub Copilotは AI を利用しているため、驚きや間違いが起こりうる可能性があります。 実行中にエラーが発生した場合は、チャット ウィンドウにエラー メッセージを貼り付け、Agent モードを選択し、エラーの解決に役立つCopilotを依頼します。 詳細については、Copilot FAQ を参照してください。
エージェント モードで実行する場合、このカスタマイズの結果は、エージェントで使用できる特定のツールによって異なります。
アプリに問題がなければ、Visual Studio Codeを使用してプロジェクトをAzureに直接発行します。
関数がローカル コンピューターで正しく実行されていることを確認したら、Visual Studio Codeを使用してプロジェクトをAzureに直接発行します。
Azureにサインインする
Azureリソースを作成したり、アプリを発行したりする前に、Azureにサインインする必要があります。
まだサインインしていない場合は、Activity バーで、Azure アイコンを選択します。 次に、Resources で Sign in to Azure を選択します。
Visual Studio Code の Azure ウィンドウへのサインイン画面のスクリーンショット 既にサインインしていて、既存のサブスクリプションを確認できる場合は、次のセクションに進みます。 Azure アカウントをまだお持ちでない場合は、Azure アカウントの作成 を選択>。 学生は[学生アカウントのAzureを作成するを選択できます。
ブラウザーでメッセージが表示されたら、Azure アカウントを選択し、Azure アカウントの資格情報を使用してサインインします。 新しいアカウントを作成した場合は、アカウントの作成後にサインインできます。
正常にサインインしたら、新しいブラウザー ウィンドウを閉じてかまいません。 Azure アカウントに属しているサブスクリプションがサイド バーに表示されます。
Azureで関数アプリを作成する
このセクションでは、Flex 従量課金プランで、Azure サブスクリプションの関連リソースと共に関数アプリを作成します。 リソース作成に関する決定の多くは、既定の動作に基づいて自動的に行われます。 作成されたリソースをより細かく制御するには、代わりに高度なオプションを使って関数アプリを作成する必要があります。
Visual Studio Codeで F1 キーを押してコマンド パレットを開きます。 プロンプト (
>) で、「Azure Functions: Create Function App in Azure」と入力して選択します。プロンプトで、次の情報を指定します。
Prompt アクション サブスクリプションを選択してください 使用するAzure サブスクリプションを選択します。 [リソース] に表示されるサブスクリプションが 1 つだけのときは、このプロンプトは表示されません。 新しい関数アプリ名を入力する URL パスで有効なグローバルに一意の名前を入力します。 入力した名前は、Azure Functionsで一意であることを確認するために検証されます。 Select a location for new resources (新しいリソースの場所を選択してください) Azureリージョンを選択します。 パフォーマンスを向上させるために、お近くのリージョンを選択してください。 Flex 従量課金プランでサポートされているリージョンのみが表示されます。 ランタイム スタックを選択してください 現在ローカルで実行している言語バージョンを選択してください。 リソース認証の種類を選択する 既定のホスト ストレージ アカウントに接続するための最も安全なオプションであるマネージド ID を選択します。 Azure: アクティビティ ログ パネルで、Azure拡張機能に、Azureで作成された個々のリソースの状態が表示されます。
関数アプリが作成されると、Azure サブスクリプションに次の関連リソースが作成されます。 リソースの名前は、関数アプリに入力した名前に基づいて決まります。
- リソース グループ。関連リソースの論理コンテナーです。
- 関数アプリ。関数コードを実行するための環境となります。 関数アプリを使用すると、同じホスティング プランに含まれるリソースの管理、デプロイ、共有を容易にするための論理ユニットとして関数をグループ化できます。
- Azure App Service プラン。関数アプリの基になるホストを定義します。
- 標準Azure Storage アカウント。関数アプリに関する状態やその他の情報を維持するために Functions ホストによって使用されます。
- 関数アプリに接続された Application Insights インスタンス。アプリ内の関数の使用を追跡します。
- 新しい既定のホスト ストレージ アカウントの ストレージ BLOB データ共同作成者 ロールに追加されるユーザー割り当てマネージド ID。
関数アプリが作成され、展開パッケージが適用されると、通知が表示されます。
ヒント
既定では、関数アプリに必要なAzure リソースは、関数アプリに入力した名前に基づいて作成されます。 既定では、関数アプリによって、同じ新しいリソース グループにリソースが作成されます。 関連付けられているリソースの名前をカスタマイズする、または既存のリソースを再利用する必要がある場合は、高度な作成オプションを使用してプロジェクトを発行します。
Azureのカスタム ハンドラーをコンパイルする
このセクションでは、Linux を実行している関数アプリでAzureするように、プロジェクトをコンパイルしてデプロイします。 ほとんどの場合、バイナリを再コンパイルし、ターゲット プラットフォームに合わせて構成を調整してから、Azureに発行する必要があります。
- 進む
- 錆
統合ターミナルで、ハンドラーを Linux/x64 にコンパイルします。
- macOS
- リナックス
- Windows
GOOS=linux GOARCH=amd64 go build handler.go
関数アプリのルートに、 という名前のバイナリが作成されます。
プロジェクトを Azure に配置する
Von Bedeutung
既存の関数アプリにデプロイすると、常にAzure内のアプリの内容が上書きされます。
コマンド パレットで、「Azure Functions: Function App にデプロイするを入力して選択します。
作成したばかりの関数アプリを選びます。 前のデプロイの上書きを求められたら、[デプロイ] を選択して、関数コードを新しい関数アプリ リソースにデプロイします。
デプロイが完了したら、View Output を選択して、作成したAzure リソースを含む作成とデプロイの結果を表示します。 通知を見逃した場合は、右下隅にあるベル アイコンを選択して、再度確認します。
[出力の表示] ウィンドウのスクリーンショット。
Azureで関数を実行する
F1 を押してコマンド パレットを表示し、コマンド
Azure Functions:Execute Function Now...を検索して実行します。 メッセージが表示されたら、ご使用のサブスクリプションを選択します。新しい関数アプリ リソースと、関数として を選択します。
[要求本文を入力してください] に「」と入力し、Enter キーを押して、この要求メッセージを関数に送信します。
関数がAzureで実行されると、通知領域に応答が表示されます。 通知を展開して、応答全体を確認します。
トラブルシューティング
次の表を使って、この記事の使用時に発生する最も一般的な問題を解決してください。
| 問題 | 解決策 |
|---|---|
| ローカル関数プロジェクトを作成できない場合 | Azure Functions拡張機能がインストールされていることを確認します。 |
| 関数をローカルで実行できない場合 | 最新バージョンの Azure Functions Core Tools がインストールされていることを確認します。 Windowsで実行するときは、Visual Studio Codeの既定のターミナル シェルが WSL Bash に設定されていないことを確認します。 |
| Azureに関数をデプロイできませんか? | 出力でエラー情報を確認します。 出力は、右下隅にあるベル アイコンでも確認できます。 既存の関数アプリに発行していないか確認します。 このアクションにより、Azure内のアプリのコンテンツが上書きされます。 |
| クラウドベースの関数アプリを実行できなかった場合 | クエリ文字列を使用してパラメーターを送信するか、カスタム ハンドラーの要求本文を使用してください。 |
リソースをクリーンアップする
次の手順に進み>関数にAzure Storage キュー バインドを追加するときは、既に行ったことに基づいて構築するために、すべてのリソースを配置しておく必要があります。
それ以外の場合は、追加コストの発生を避けるために、次の手順に従って関数アプリとその関連リソースを削除してください。
- Visual Studio Codeで、Azure アイコンを選択して、Azure エクスプローラーを開きます。
- [リソース グループ] セクションで、自分のリソース グループを見つけます。
- そのリソース グループを右クリックして、[削除] を選択します。
Functions のコストについて詳しくは、「従量課金プランのコストの見積もり」を参照してください。
次のステップ
Visual Studio Code を使用して、単純な HTTP によってトリガーされる関数を含む関数アプリを作成しました。 次の記事では、Azure Cosmos DBまたはAzure Storageに接続することで、その機能を拡張します。 他のAzure サービスへの接続の詳細については、「
Azure Queue Storage に接続します