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

この記事では、コマンドライン ツールを使用して、HTTP 要求に応答する Python 関数を作成します。 コードをローカルでテストした後、Azure Functions のサーバーレス環境にデプロイします。

この記事では、Azure Functions でサポートされている両方の Python プログラミング モデルについて説明します。 上部のセレクターを使って、プログラミング モデルを選んでください。

Note

Azure Functions の Python v2 プログラミング モデルは、関数を作成するためのデコレーター ベースのアプローチを提供します。 Python v2 プログラミング モデルの詳細については、開発者向けリファレンス ガイドを参照してください。

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

また、この記事の Visual Studio Code ベースのバージョンも存在します。

ローカル環境を構成する

操作を始める前に、以下の要件を満たしておく必要があります。

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 つまたは複数含んだコンテナーです。 プロジェクト内のすべての関数は、同じローカル構成とホスティング構成を共有します。

このセクションでは、関数を 1 つだけ含んだ関数プロジェクトを作成します。

  1. 次のように func init コマンドを実行して、仮想環境に Python 関数プロジェクトを作成します。

    func init --python --model V1
    

    この環境にはプロジェクト用の各種ファイルが格納されています。たとえば、local.settings.jsonhost.json といった名前の構成ファイルです。 local.settings.json には Azure からダウンロードしたシークレットを含めることができるため、このファイルは既定で .gitignore ファイルによってソース管理から除外されます。

  2. 次のコマンドを使用して、関数をプロジェクトに追加します。ここで、--name 引数は関数の一意の名前 (HttpExample) で、--template 引数は関数のトリガー (HTTP) を指定します。

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

    func new によって、関数と同じ名前のサブフォルダーが作成されます。ここには、プロジェクト用に選択した言語に適したコード ファイルと、function.json という名前の構成ファイルが含まれます。

  3. このコマンドを実行して、Azure Functions ライブラリが環境にインストールされていることを確認します。

    .venv/bin/python -m pip install -r requirements.txt
    

このセクションでは、関数プロジェクトを作成し、HTTP トリガー関数を追加します。

  1. 次のように func init コマンドを実行して、仮想環境に Python v2 関数プロジェクトを作成します。

    func init --python
    

    この環境にはプロジェクト用の各種ファイルが格納されています。たとえば、local.settings.jsonhost.json といった名前の構成ファイルです。 local.settings.json には Azure からダウンロードしたシークレットを含めることができるため、このファイルは既定で .gitignore ファイルによってソース管理から除外されます。

  2. 次のコマンドを使用して、関数をプロジェクトに追加します。ここで、--name 引数は関数の一意の名前 (HttpExample) で、--template 引数は関数のトリガー (HTTP) を指定します。

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

    ダイアログが表示されたら、ANONYMOUS オプションを選択します。 func new は、function_app.py ファイルに HttpExample という名前の HTTP トリガー エンドポイントを追加します。このファイルは認証なしでアクセスできます。

  3. local.settings.json プロジェクト ファイルを開き、AzureWebJobsFeatureFlags 設定に EnableWorkerIndexing の値があることを確認します。 これは、Functions がプロジェクトを Python v2 モデルとして正しく解釈するために必要です。 プロジェクトを Azure に発行した後、この同じ設定をご自分のアプリケーション設定に追加します。

  4. local.settings.json ファイルで、次の例のように AzureWebJobsStorage 設定を更新します。

    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    

    これにより、ローカル Functions ホストは、Python v2 モデルで現在必要なストレージ接続にストレージ エミュレーターを使うように指示されます。 Azure にプロジェクトを公開するときは、代わりに既定のストレージ アカウントを使う必要があります。 Azure Storage アカウントを代わりに使う場合は、ここでストレージ アカウントの接続文字列を設定します。

  5. このコマンドを実行して、Azure Functions ライブラリが環境にインストールされていることを確認します。

    .venv/bin/python -m pip install -r requirements.txt
    

ストレージ エミュレーターを起動する

既定では、ローカル開発では Azurite ストレージ エミュレーターを使用します。 このエミュレーターは、local.settings.json プロジェクト ファイルの AzureWebJobsStorage 設定が UseDevelopmentStorage=true に設定されている場合に使用されます。 このエミュレーターを使用する場合、関数を実行する前にローカルの Azurite ストレージ エミュレーターを起動する必要があります。

local.settings.json ファイルの AzureWebJobsStorage 設定が UseDevelopmentStorage=true ではなく Azure Storage アカウントの接続文字列に設定されている場合は、この手順をスキップできます。

Azurite ストレージ エミュレーターを別のプロセスで起動するには、次のコマンドを使用します。

start azurite

詳細については、「Azurite の実行」を参照してください

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

  1. LocalFunctionProj フォルダーから、ローカルの Azure Functions ランタイム ホストを起動して関数を実行します。

    func start
    

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

    Screenshot of terminal window output when running function locally.

    Note

    HttpExample が上記のように表示されない場合、プロジェクトのルート フォルダー以外からホストを起動したと考えられます。 その場合は Ctrl+C キーを使用してホストを停止し、プロジェクトのルート フォルダーに移動して、前出のコマンドを再度実行してください。

  2. この出力から HTTP 関数の URL をブラウザーにコピーし、クエリ文字列 ?name=<YOUR_NAME> を付加して、http://localhost:7071/api/HttpExample?name=Functions のような完全な URL にします。 ブラウザーには、クエリ文字列値をエコー バックする応答メッセージが表示されるはずです。 要求を行うと、プロジェクトを起動したターミナルにもログ出力が表示されます。

  3. 完了したら、Ctrl + C キーを押し、「y」を入力して関数ホストを停止してください。

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

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

  • リソース グループ。関連リソースの論理コンテナーです。
  • ストレージ アカウント。プロジェクトについての状態とその他の情報を保持します。
  • 関数アプリ。関数コードを実行するための環境となります。 関数アプリは、ローカルの関数プロジェクトと対応関係にあります。これを使用すると、リソースの管理、デプロイ、共有を容易にするための論理ユニットとして関数をグループ化できます。

以下のコマンドを使用してこれらの項目を作成します。 Azure CLI と PowerShell の両方がサポートされます。

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

    az login
    

    az login コマンドで Azure アカウントにサインインします。

  2. 選択したリージョンに AzureFunctionsQuickstart-rg という名前のリソース グループを作成します。

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

    az group create コマンドでリソース グループを作成します。 上記のコマンドで、<REGION> コマンドから返された使用可能なリージョン コードを使用して、<REGION> を自分の近くのリージョンに置き換えます。

    Note

    Linux と Windows のアプリを同じリソース グループ内でホストすることはできません。 Windows の関数アプリまたは Web アプリで AzureFunctionsQuickstart-rg という名前のリソース グループが存在する場合、別のリソース グループを使用する必要があります。

  3. リソース グループとリージョン内に汎用ストレージ アカウントを作成します。

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS
    

    az storage account create コマンドでストレージ アカウントを作成します。

    前の例の <STORAGE_NAME> は、適宜、Azure Storage 内で一意の名前に置き換えてください。 名前は 3 文字から 24 文字とし、小文字のみを使用する必要があります。 Standard_LRS は汎用アカウントを指定します。これは Functions でサポートされています。

    このクイックスタートでは、ストレージ アカウントに関して数セント (米国ドル) の料金が発生します。

  4. Azure に関数アプリを作成します。

    az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime python --runtime-version 3.9 --functions-version 4 --name <APP_NAME> --os-type linux --storage-account <STORAGE_NAME>
    

    az functionapp create コマンドで Azure に関数アプリを作成します。 Python 3.9、3.8、または 3.7を使用している場合は、--runtime-version をそれぞれ 3.93.8、または 3.7 に変更します。 Python 関数を Windows で実行することはできないため、--os-type linux を指定する必要があります。これが既定値です。

    前の例の <APP_NAME> は適宜、グローバルに一意の名前に置き換えてください。 <APP_NAME> は、関数アプリの既定の DNS ドメインでもあります。

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

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

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

次の例の <APP_NAME> は、実際のアプリ名に置き換えてください。

func azure functionapp publish <APP_NAME>

publish コマンドを実行すると、次のような出力結果が表示されます (簡潔にするため一部省略しています)。

...

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

アプリの設定を更新する

関数アプリで Python v2 モデルを使うには、Azure で新しいアプリケーション設定に AzureWebJobsFeatureFlags という名前で値 EnableWorkerIndexing を追加する必要があります。 この設定は、既に local.settings.json ファイルにあります。

次のコマンドを実行して、この設定を Azure の新しい関数アプリに追加します。

az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings AzureWebJobsFeatureFlags=EnableWorkerIndexing

前の例では、<FUNCTION_APP_NAME><RESOURCE_GROUP_NAME> を実際の関数アプリとリソース グループの名前でそれぞれ置き換えます。 この設定は、既に local.settings.json ファイルにあります。

Azure で確認する

Azure portal の Application Insights に凖リアルタイムのストリーミング ログを表示するには、次のコマンドを実行します。

func azure functionapp logstream <APP_NAME> --browser

別のターミナル ウィンドウまたはブラウザーで、もう一度リモート関数を呼び出します。 Azure で実行された関数の詳細ログがターミナルに表示されます。

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

次の手順に進んで Azure Storage キュー出力バインディングを追加する場合、既存の作業をベースにするので、リソースはすべてそのままにしておいてください。

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

az group delete --name AzureFunctionsQuickstart-rg

次のステップ

この記事に問題がある場合