次の方法で共有


クイック スタート: コマンド ラインから Azure で関数を作成する

この記事では、ローカル コマンド ライン ツールを使用して、HTTP 要求に応答する関数を作成します。 コードをローカルで確認したら、Azure Functions のサーバーレス Flex Consumption ホスティング プランにデプロイします。

このクイックスタートを完了すると、ご利用の Azure アカウントでわずかな (数セント未満の) コストが発生します。

必ず、記事の上部にある任意の開発言語を選択してください。

Prerequisites

Azure Functions Core Tools のインストール

Core Tools をインストールするための推奨される方法は、ローカル開発用コンピューターのオペレーティング システムによって異なります。

次の手順で、Windows インストーラー (MSI) を使用して Core Tools v4.x をインストールします。 その他のパッケージベースのインストーラーの詳細については、Core Tools の Readme をご覧ください。

Windows のバージョンに応じて、 以下の Core Tools インストーラーをダウンロードして実行します。

以前に Windows で Windows インストーラー (MSI) を使用して Core Tools をインストールした場合は、最新のバージョンをインストールする前に、[プログラムの追加と削除] から古いバージョンをアンインストールする必要があります。

仮想環境を作成してアクティブにする

適切なフォルダーで次のコマンドを実行し、.venv という名前の仮想環境を作成してアクティブにします。 Azure Functions でサポートされている Python バージョン のいずれかを使用してください。

python -m venv .venv
source .venv/bin/activate

お使いの Linux ディストリビューションに Python の venv パッケージがインストールされていなかった場合は、次のコマンドを実行します。

sudo apt-get install python3-venv

以降のコマンドはすべて、このアクティブ化された仮想環境で実行します

ローカル コード プロジェクトと関数を作成する

Azure Functions では、コード プロジェクトは、それぞれが特定のトリガーに応答する 1 つ以上の個別の関数を含むアプリです。 プロジェクト内のすべての関数は同じ構成を共有し、ユニットとして Azure にデプロイされます。 このセクションでは、1 つの関数を含むコード プロジェクトを作成します。

  1. ターミナルまたはコマンド プロンプトで、次の func init コマンドを実行して、現在のフォルダーに関数アプリ プロジェクトを作成します。

    func init --worker-runtime dotnet-isolated 
    
  1. ターミナルまたはコマンド プロンプトで、次の func init コマンドを実行して、現在のフォルダーに関数アプリ プロジェクトを作成します。

    func init --worker-runtime node --language javascript 
    
  1. ターミナルまたはコマンド プロンプトで、次の func init コマンドを実行して、現在のフォルダーに関数アプリ プロジェクトを作成します。

    func init --worker-runtime powershell 
    
  1. ターミナルまたはコマンド プロンプトで、次の func init コマンドを実行して、現在のフォルダーに関数アプリ プロジェクトを作成します。

    func init --worker-runtime python 
    
  1. ターミナルまたはコマンド プロンプトで、次の func init コマンドを実行して、現在のフォルダーに関数アプリ プロジェクトを作成します。

    func init --worker-runtime node --language typescript 
    
  1. 空のフォルダーで、次の mvn コマンドを実行して、Azure Functions Maven アーキタイプからコード プロジェクトを生成します。

    mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=17
    

    Important

    • Java 11 で関数を実行する場合は、-DjavaVersion=11 を使用します。 詳細については、 Java のバージョンを参照してください。
    • この記事の作業を行うには、JAVA_HOME 環境変数を、適切なバージョンの JDK のインストール場所に設定する必要があります。
  2. Maven により、デプロイ時にプロジェクトの生成を終了するための値の入力が求められます。
    入力を求められたら、次の値を入力します。

    Prompt Value Description
    groupId com.fabrikam Java のパッケージ命名規則に従って、すべてのプロジェクトにわたって対象のプロジェクトを一意に識別する値。
    artifactId fabrikam-functions バージョン番号のない、jar の名前である値。
    version 1.0-SNAPSHOT 既定値を選択します。
    package com.fabrikam 生成された関数コードの Java パッケージである値。 既定値を使用します。
  3. Y」と入力するか、Enter キーを押して確認します。

    Maven は 、artifactId という名前の新しいフォルダーにプロジェクト ファイルを作成します。この例では、 fabrikam-functions

  4. プロジェクト フォルダーに移動します。

    cd fabrikam-functions
    

    \src\main\java\com\fabrikam プロジェクト ディレクトリのFunction.javaで、新しい HTTP トリガー関数のテンプレートで生成されたコードを確認できます。

  1. 次の func new コマンドを使用して、プロジェクトに関数を追加します。

    func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
    

    新しいコード ファイルがプロジェクトに追加されます。 この場合、 --name 引数は関数の一意の名前 (HttpExample) であり、 --template 引数は HTTP トリガーを指定します。

プロジェクト のルート フォルダーには、local.settings.jsonや host.json という名前の構成ファイルなど、プロジェクトのさまざまなファイルが含 まれています local.settings.json には Azure からダウンロードしたシークレットを含めることができるため、ファイルは既定で .gitignore ファイルのソース管理から除外されます。

関数をローカルで実行する

プロジェクトをローカルで実行し、関数エンドポイントを呼び出して、新しい関数を確認します。

  1. 次のコマンドを使用して、プロジェクト フォルダーのルートにあるローカル Azure Functions ランタイム ホストを開始します。

    func start  
    
    func start  
    
    npm install
    npm start
    
    mvn clean package  
    mvn azure-functions:run
    

    出力の最後の方に、次の行があります。

     ...
    
     Now listening on: http://0.0.0.0:7071
     Application started. Press Ctrl+C to shut down.
    
     Http Functions:
    
             HttpExample: [GET,POST] http://localhost:7071/api/HttpExample
     ...
    
     

    Note

    HttpExample エンドポイントが想定どおりに表示されない場合は、プロジェクトのルート フォルダーの外部からホストを開始した可能性があります。 その場合は、Ctrl+キーを使用してホストを停止し、プロジェクトのルート フォルダーに移動して、前のコマンドをもう一度実行します。

  2. HttpExample関数の URL をこの出力からブラウザーにコピーし、関数の URL を参照すると、"hello world" というメッセージが表示された成功応答が表示されます。

  3. 完了したら、Ctrl+キーを使用し、yを選択して関数ホストを停止します。

関数用の関連 Azure リソースを作成する

関数コードを Azure にデプロイする前に、次のリソースを作成する必要があります。

  • リソース グループ。関連リソースの論理コンテナーです。
  • 既定のストレージ アカウント。関数の状態とその他の情報を維持するために、関数ホストによって使用されます。
  • ユーザーが割り当てたマネージドIDで、Functions ホストが既定のストレージ アカウントに接続します。
  • 関数アプリ。関数コードを実行するための環境となります。 関数アプリは、ローカルの関数プロジェクトと対応関係にあります。これを使用すると、リソースの管理、デプロイ、共有を容易にするための論理ユニットとして関数をグループ化できます。

これらの手順の Azure CLI コマンドを使用して、必要なリソースを作成します。

  1. まだ Azure にサインインしていない場合は、Azure にサインインします。

    az login
    

    az login コマンドで Azure アカウントにサインインします。 Azure Cloud Shell で実行する場合は、この手順をスキップします。

  2. まだ実行していない場合は、次の az extension add コマンドを使用して Application Insights 拡張機能をインストールします。

    az extension add --name application-insights
    
  3. 次の az group create コマンドを使用して、選択したリージョンに AzureFunctionsQuickstart-rg という名前のリソース グループを作成します。

    az group create --name "AzureFunctionsQuickstart-rg" --location "<REGION>"
    

    この例では、 <REGION> を、Flex 従量課金プランをサポートする近くのリージョンに置き換えます。 az functionapp list-flexconsumption-locations コマンドを使用して、現在サポートされているリージョンの一覧を表示します。

  4. 次の az storage account create コマンドを使用して、リソース グループとリージョンに汎用ストレージ アカウントを作成します。

    az storage account create --name <STORAGE_NAME> --location "<REGION>" --resource-group "AzureFunctionsQuickstart-rg" \
    --sku "Standard_LRS" --allow-blob-public-access false --allow-shared-key-access false
    

    この例では、 <STORAGE_NAME> を自分に適した名前に置き換え、Azure Storage で一意の名前に置き換えます。 名前は 3 文字から 24 文字とし、小文字のみを使用する必要があります。 Standard_LRS は汎用アカウントを指定します。これは Functions でサポートされています。 この新しいアカウントには、特定のリソースへのアクセス許可が付与されている Microsoft Entra 認証 ID を使用してのみアクセスできます。

  5. このスクリプトを使用して、ユーザー割り当てマネージド ID を作成し、 jqを使用してオブジェクトの返された JSON プロパティを解析し、既定のストレージ アカウントで Storage Blob Data Owner アクセス許可を付与します。

    output=$(az identity create --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" --location <REGION> \
    --query "{userId:id, principalId: principalId, clientId: clientId}" -o json)
    
    userId=$(echo $output | jq -r '.userId')
    principalId=$(echo $output | jq -r '.principalId')
    clientId=$(echo $output | jq -r '.clientId')
    
    storageId=$(az storage account show --resource-group "AzureFunctionsQuickstart-rg" --name <STORAGE_NAME> --query 'id' -o tsv)
    az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal \
    --role "Storage Blob Data Owner" --scope $storageId
    

    ローカルの Bash シェルに jq ユーティリティがない場合は、Azure Cloud Shell で使用できます。 この例では、 <STORAGE_NAME><REGION> をそれぞれ既定のストレージ アカウント名とリージョンに置き換えます。

    az identity create コマンドは、func-host-storage-userという名前の ID を作成します。 返された principalId は、 az role assignment create コマンドを使用して、既定のストレージ アカウントでこの新しい ID にアクセス許可を割り当てるために使用されます。 az storage account show コマンドを使用して、ストレージ アカウント ID を取得します。

  6. 次の az functionapp create コマンドを使用して、Azure で関数アプリを作成します。

    az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \
    --runtime dotnet-isolated --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \
    --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"
    
    az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \
    --runtime java --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \
    --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"
    
    az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \
    --runtime node --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \
    --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"
    
    az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \
    --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \
    --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"
    
    az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \
    --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \
    --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"
    

    この例では、これらのプレースホルダーを適切な値に置き換えます。

    • <APP_NAME>: 自分に適したグローバルに一意の名前。 <APP_NAME> は、関数アプリの既定の DNS ドメインでもあります。
    • <STORAGE_NAME>: 前の手順で使用したアカウントの名前。
    • <REGION>: 現在のリージョン。
    • <LANGUAGE_VERSION>: ローカルで確認したのと同じ サポートされている言語スタック バージョン を使用します。

    このコマンドは、 Flex 従量課金プランで Linux 上の指定された言語ランタイムで実行されている関数アプリを作成します。これは、ここで発生する使用量に対して無料です。 このコマンドでは、関連付けられている Azure Application Insights インスタンスも同じリソース グループに作成されます。このインスタンスを使用して、関数アプリの実行を監視し、ログを表示できます。 詳しくは、「Azure Functions を監視する」をご覧ください。 このインスタンスは、アクティブにするまでコストが発生しません。

  7. このスクリプトを使用して、Application Insights インスタンスの Monitoring Metrics Publisher ロールにユーザー割り当てマネージド ID を追加します。

    appInsights=$(az monitor app-insights component show --resource-group "AzureFunctionsQuickstart-rg" \
        --app <APP_NAME> --query "id" --output tsv)
    principalId=$(az identity show --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" \
        --query principalId -o tsv)
    az role assignment create --role "Monitoring Metrics Publisher" --assignee $principalId --scope $appInsights
    

    この例では、<APP_NAME> をお使いの関数アプリの名前に置き換えます。 az role assignment create コマンドによって、ユーザーがロールに追加されます。 Application Insights インスタンスのリソース ID とユーザーのプリンシパル ID は、az monitor app-insights コンポーネント show コマンドとaz identity show コマンドをそれぞれ使用して取得されます。

アプリケーション設定を更新する

Functions ホストが共有シークレットを使用して既定のストレージ アカウントに接続できるようにするには、 AzureWebJobsStorage 接続文字列の設定を、プレフィックスとして AzureWebJobsStorage__ で始まるいくつかの設定に置き換える必要があります。 これらの設定は、ユーザー割り当てマネージド ID を使用してストレージと Application Insights に接続するためにアプリが使用する複雑な設定を定義します。

  1. このスクリプトを使用して、ユーザー割り当てマネージド ID のクライアント ID を取得し、それを使用してストレージと Application Insights の両方へのマネージド ID 接続を定義します。

    clientId=$(az identity show --name func-host-storage-user \
        --resource-group AzureFunctionsQuickstart-rg --query 'clientId' -o tsv)
    az functionapp config appsettings set --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \
        --settings AzureWebJobsStorage__accountName=<STORAGE_NAME> \
        AzureWebJobsStorage__credential=managedidentity AzureWebJobsStorage__clientId=$clientId \
        APPLICATIONINSIGHTS_AUTHENTICATION_STRING="ClientId=$clientId;Authorization=AAD"
    

    このスクリプトでは、 <APP_NAME><STORAGE_NAME> をそれぞれ関数アプリとストレージ アカウントの名前に置き換えます。

  2. az functionapp config appsettings delete コマンドを実行して、共有秘密鍵を含む既存のAzureWebJobsStorage接続文字列設定を削除します。

    az functionapp config appsettings delete --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" --setting-names AzureWebJobsStorage
    

    この例では、 <APP_NAME> を関数アプリの名前に置き換えます。

この時点で、Functions ホストは、共有シークレットではなくマネージド ID を使用してストレージ アカウントに安全に接続できます。 これで、プロジェクト コードを Azure リソースにデプロイできるようになりました。

Azure に関数プロジェクトをデプロイする

Azure 内に関数アプリを作成することに成功したら、func azure functionapp publish コマンドを使用してローカル関数プロジェクトをデプロイする準備が整います。

ルート プロジェクト フォルダーで、次の func azure functionapp publish コマンドを実行します。

func azure functionapp publish <APP_NAME>

この例では、<APP_NAME> をご自身のアプリの名前に置き換えてください。 デプロイが成功すると、次の出力のような結果 (簡潔にするために切り詰められています) が表示されます。

...

Getting site publishing info...
Creating archive for current directory...
Performing remote build for functions project.

...

Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in msdocs-azurefunctions-qs:
    HttpExample - [httpTrigger]
        Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample

pom.xml ファイルを更新する

Azure で関数アプリを正常に作成したら、Maven が新しいアプリにデプロイできるように、pom.xml ファイルを更新する必要があります。 それ以外の場合は、デプロイ中に新しい Azure リソースのセットが作成されます。

  1. Azure Cloud Shell で、次の az functionapp show コマンドを使用して、新しいユーザー割り当てマネージド ID のデプロイ コンテナーの URL と ID を取得します。

    az functionapp show --name <APP_NAME> --resource-group AzureFunctionsQuickstart-rg  \
        --query "{userAssignedIdentityResourceId: properties.functionAppConfig.deployment.storage.authentication.userAssignedIdentityResourceId, \
        containerUrl: properties.functionAppConfig.deployment.storage.value}"
    

    この例では、 <APP_NAME> を関数アプリの名前に置き換えます。

  2. プロジェクトのルート ディレクトリで、テキスト エディターで pom.xml ファイルを開き、 properties 要素を見つけて、次の特定のプロパティ値を更新します。

    プロパティ名 Value
    java.version など、ローカルで確認したのと同じ17を使用します。
    azure.functions.maven.plugin.version 1.37.1
    azure.functions.java.library.version 3.1.0
    functionAppName Azure の関数アプリの名前。
  3. configurationazure-functions-maven-plugin セクションを見つけて、次の XML フラグメントに置き換えます。

    <configuration>
        <appName>${functionAppName}</appName>
        <resourceGroup>AzureFunctionsQuickstart-rg</resourceGroup>
        <pricingTier>Flex Consumption</pricingTier>
        <region>....</region>
        <runtime>
            <os>linux</os>
            <javaVersion>${java.version}</javaVersion>
        </runtime>
        <deploymentStorageAccount>...</deploymentStorageAccount>
        <deploymentStorageResourceGroup>AzureFunctionsQuickstart-rg</deploymentStorageResourceGroup>
        <deploymentStorageContainer>...</deploymentStorageContainer>
        <storageAuthenticationMethod>UserAssignedIdentity</storageAuthenticationMethod>
        <userAssignedIdentityResourceId>...</userAssignedIdentityResourceId>
        <appSettings>
            <property>
                <name>FUNCTIONS_EXTENSION_VERSION</name>
                <value>~4</value>
            </property>
        </appSettings>
    </configuration>
    
  4. 新しい configuration 要素で、省略記号 (...) の値を次のように置き換えます。

    Configuration Value
    region eastusなど、既存の関数アプリのリージョン コード。
    deploymentStorageAccount ご利用のストレージ アカウントの名前。
    deploymentStorageContainer 展開共有の名前。これは、取得した\値のcontainerUrlの後に付けられます。
    userAssignedIdentityResourceId 取得したマネージド ID の完全修飾リソース ID。
  5. 変更をpom.xml ファイルに保存します。

Maven を使用して、コード プロジェクトを既存のアプリにデプロイできるようになりました。

Azure に関数プロジェクトをデプロイする

  1. コマンド プロンプトで、このコマンドを実行します。

    mvn clean package azure-functions:deploy
    
  2. デプロイが成功したら、次の az functionapp function show を使用して、リモート HttpExample 関数エンドポイントの URL を取得します。

    az functionapp function show --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \
        --function-name HttpExample --query invokeUrlTemplate -o tsv
    

    この例では、 <APP_NAME> を関数アプリの名前に置き換えます。

  3. 返されたエンドポイント URL をコピーします。この URL は、次に関数エンドポイントの呼び出しに使用します。

Azure 上の関数を呼び出す

この関数は HTTP トリガーを使用しており、GET 要求をサポートしているため、これを呼び出すには、その URL に対して HTTP 要求を行います。 ブラウザーで GET 要求を実行するのが最も簡単です。

発行コマンドの出力に表示されているインボークURL全体をブラウザーのアドレスバーにコピーします。

コピーした URL をブラウザーのアドレス バーに貼り付けます。

エンドポイント URL は次の例のようになります。

https://contoso-app.azurewebsites.net/api/httpexample

この URL にアクセスすると、この関数をローカルで実行したときと同様の出力がブラウザーに表示されるはずです。

リソースをクリーンアップする

次の手順に進み、Azure Storage キューの出力バインドを追加する場合は、既に行ったことに基づいて構築するので、すべてのリソースを所定の位置に保持します。

それ以外の場合は、追加コストの発生を避けるために、次のコマンドを使用して、リソース グループとそこに含まれるすべてのリソースを削除してください。

az group delete --name AzureFunctionsQuickstart-rg

次のステップ