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

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

Note

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

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

関数アプリが実行されているコンテナーをカスタマイズする必要がある場合は、「Azure Arc でコンテナー化された最初の関数を作成する (プレビュー)」を参照してください。

前提条件

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

Azure Functions Core Tools のインストール

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

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

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

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

App Service Kubernetes 環境の作成

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

Note

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

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

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

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

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

az extension add --upgrade --yes --name customlocation
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube

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

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
    

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

    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」を入力して関数ホストを停止してください。

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

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

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

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 つのリソースをさらに作成する必要があります。

  • ストレージ アカウント。 この記事ではストレージ アカウントを作成しますが、場合によってはストレージ アカウントが不要なことがあります。 詳細については、ストレージに関する考慮事項についての記事の「Azure Arc 対応クラスター」を参照してください。
  • 関数アプリ。関数コードを実行するためのコンテキストとなります。 関数アプリは App Service Kubernetes 環境で実行され、ローカル関数プロジェクトにマップされます。 関数アプリを使用すると、リソースの管理、デプロイ、および共有を容易にするための論理ユニットとして関数をグループ化できます。

Note

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

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

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

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

Note

場合によっては、ストレージ アカウントが不要なことがあります。 詳細については、ストレージに関する考慮事項についての記事の「Azure Arc 対応クラスター」を参照してください。

前の例の <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 4 --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 を追加して、ブラウザーのアドレス バーにコピーします。 関数をローカルで実行したときと同様の出力がブラウザーに表示されるはずです。

The output of the function run on Azure in a browser

次のステップ

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