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 インストーラーをダウンロードして実行します。
- v4.x - Windows 64 ビット (推奨。Visual Studio Code デバッグには 64 ビットが必要です)。
- v4.x - Windows 32 ビット
以前に 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 つだけ含んだ関数プロジェクトを作成します。
次のように
func init
コマンドを実行して、特定のランタイムを含んだ LocalFunctionProj という名前のフォルダーに関数プロジェクトを作成します。func init LocalFunctionProj --dotnet
プロジェクト フォルダーに移動します。
cd LocalFunctionProj
このフォルダーにはプロジェクト用の各種ファイルが格納されています。たとえば、local.settings.json や host.json といった名前の構成ファイルです。 既定では、local.settings.json ファイルは .gitignore ファイルのソース管理から除外されます。 この除外は、Azure からダウンロードされたシークレットがファイルに含まれている可能性があるためです。
次のコマンドを使用して、関数をプロジェクトに追加します。ここで、
--name
引数は関数の一意の名前 (HttpExample) で、--template
引数は関数のトリガー (HTTP) を指定します。func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
関数をローカルで実行する
LocalFunctionProj フォルダーから、ローカルの Azure Functions ランタイム ホストを起動して関数を実行します。
func start
出力の最後の方に、次の行があります。
Note
HttpExample が上記のように表示されない場合、プロジェクトのルート フォルダー以外からホストを起動したと考えられます。 その場合は Ctrl+C キーを使用してホストを停止し、プロジェクトのルート フォルダーに移動して、前出のコマンドを再度実行してください。
この出力から HTTP 関数の URL をブラウザーにコピーし、クエリ文字列
?name=<YOUR_NAME>
を付加して、http://localhost:7071/api/HttpExample?name=Functions
のような完全な URL にします。 ブラウザーには、クエリ文字列値をエコー バックする応答メッセージが表示されるはずです。 要求を行うと、プロジェクトを起動したターミナルにもログ出力が表示されます。完了したら、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
コマンドを使用してローカル関数プロジェクトをデプロイする準備が整います。
ルート プロジェクト フォルダーで、次の 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
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 に接続できます。