Azure Arc で初めての関数を作成する (プレビュー)

このクイックスタートでは、Azure Functions プロジェクトを作成し、Azure Arc 対応 Kubernetes クラスターで実行される関数アプリにデプロイします。 詳細については、「Azure Arc の App Service、Functions、および Logic Apps」を参照してください。このシナリオでは、Linux で実行されている関数アプリのみがサポートされます。

注意

Arc に対応した Kubernetes クラスターでの関数の実行は、現在プレビュー段階です。

現在、Azure Arc 対応 Kubernetes クラスターに PowerShell 関数プロジェクトを発行する操作はサポートされていません。 Azure Arc 対応 Kubernetes クラスターに PowerShell 関数をデプロイする必要がある場合は、コンテナー内に関数アプリを作成します。

前提条件

ローカル コンピューター上:

App Service Kubernetes 環境の作成

開始する前に、Azure Arc 対応 Kubernetes クラスター用の App Service Kubernetes 環境を作成する必要があります。

注意

環境を作成するときは、カスタムの場所名とカスタムの場所を含むリソース グループの名前の両方をメモしておいてください。 これらを使用すると、環境で関数アプリを作成するときに必要なカスタムの場所 ID を見つけることができます。

環境を作成していなかった場合は、クラスター管理者に確認してください。

Azure CLI の拡張機能を追加する

Azure Cloud Shell で Bash 環境を起動します。

新しいウィンドウで Cloud Shell を起動する

これらの CLI コマンドはまだコア CLI セットに含まれていないため、次のコマンドを使用して追加します。

az extension add --upgrade --yes --name customlocation
az extension remove --name appservice-kube
az extension add --yes --source "https://aka.ms/appsvc/appservice_kube-latest-py2.py3-none-any.whl"

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

Azure Functions における関数プロジェクトとは、それぞれが特定のトリガーに応答する 1 つまたは複数の個別の関数に対する、デプロイと実行のユニットです。 プロジェクト内のすべての関数は、同じローカル構成とホスティング構成を共有します。 このセクションでは、関数を 1 つだけ含んだ関数プロジェクトを作成します。

  1. 次のように func init コマンドを実行して、特定のランタイムを含んだ LocalFunctionProj という名前のフォルダーに関数プロジェクトを作成します。

    func init LocalFunctionProj --dotnet
    
  2. プロジェクト フォルダーに移動します。

    cd LocalFunctionProj
    

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

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

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

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

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

    func start
    

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

     ...
    
     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
     ...
    
     

    注意

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

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

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

カスタムの場所を取得する

カスタムの場所に関数アプリを作成できるようにするには、環境に関する情報を取得する必要があります。

クラスター管理者から、カスタムの場所に関する次の情報を取得します (カスタムの場所の作成に関するページを参照してください)。

customLocationGroup="<resource-group-containing-custom-location>"
customLocationName=<name-of-custom-location>

次の手順用にカスタムの場所の ID を取得します。

customLocationId=$(az customlocation show \
    --resource-group $customLocationGroup \
    --name $customLocationName \
    --query id \
    --output tsv)

Azure リソースを作成する

新しい App Service Kubernetes 環境に関数コードをデプロイする前に、次の 2 つのリソースをさらに作成する必要があります。

  • ストレージ アカウント。現在、ツールに必要であり、環境には含まれていません。
  • 関数アプリ。関数コードを実行するためのコンテキストとなります。 関数アプリは App Service Kubernetes 環境で実行され、ローカル関数プロジェクトにマップされます。 関数アプリを使用すると、リソースの管理、デプロイ、および共有を容易にするための論理ユニットとして関数をグループ化できます。

注意

関数アプリは、専用の (App Service) プランの App Service Kubernetes 環境で実行されます。 既存のプランを使用せずに関数アプリを作成すると、適切なプランが自動的に作成されます。

ストレージ アカウントの作成

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

az storage account create --name <STORAGE_NAME> --location westeurope --resource-group myResourceGroup --sku Standard_LRS

注意

ストレージ アカウントは、現在、Azure Functions ツールに必要です。

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

Function App の作成

az functionapp create コマンドを実行して、環境内に新しい関数アプリを作成します。

az functionapp create --resource-group MyResourceGroup --name <APP_NAME> --custom-location <CUSTOM_LOCATION_ID> --storage-account <STORAGE_NAME> --functions-version 3 --runtime dotnet 

この例では、<CUSTOM_LOCATION_ID> を、App Service Kubernetes 環境に対して決定したカスタムの場所の ID に置き換えます。 また、<STORAGE_NAME> を前の手順で使用したアカウントの名前に置き換え、<APP_NAME> をグローバルに一意の適切な名前に置き換えます。

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

Azure Arc 対応 Kubernetes クラスターで完全なデプロイが完了するには、時間がかかる場合があります。このため、次のコマンドを再び実行して、発行された関数を確認することをお勧めします。

func azure functionapp list-functions

Azure 上の関数を呼び出す

この関数は HTTP トリガーを使用しているため、呼び出しは、その URL にブラウザーから HTTP 要求を送信するか、または curl などのツールを使用して行います。

publish コマンドの出力に表示されている完全な 呼び出し URL にクエリ パラメーター &name=Functions を追加して、ブラウザーのアドレス バーにコピーします。 関数をローカルで実行したときと同様の出力がブラウザーに表示されるはずです。

Azure 上で実行された関数の出力をブラウザーで表示したところ

次の手順

これで、Arc 対応 App Service Kubernetes 環境のコンテナーで実行する関数アプリが作成されたので、Queue Storage 出力バインドを追加して Azure Storage に接続できます。