【備忘録・随時更新】AzureFunctionsのあれこれ


1. はじめに

この記事は、前回の備忘録にて書けなかった事柄について
書いていきます。

項目は以下の通りです。
また、この記事は随時更新予定です。

タイトル 内容
2 API Manaegment と統合 AzureFunctions をドメインを付与した URL で実行可能にする
3 Azure Identity の利用 他のリソースへのアクセスを許可する

2. API Managementと統合

この説では、API Management を利用して、作成した AzureFunctions のHttpTriggerの利便性を高くします。

2.1 Azure FunctionsのHttpTriggerの不十分な点

API Management を作成する前に、 AzureFunctions のHttpTriggerでは不十分な点について説明します。
それは、AzureFunctions で発行される URL にあります。

Azure Functions のGet function URLから取得した URL を以下に示します。

以下に示す URL はAzureFunctions の名前がドメインの一部になっており
AzureFunctions を別の名前に変更する必要に迫られた場合、
利用している箇所の全ての URL を変更する必要があります。
自分が対応可能な範囲ならば問題は小さいかもですが、
この URL を展開していて他の開発者にも変更を迫るのは仕様上あまり良くないです。

加えて、実行を制限するキーとなるcode=******の部分は同じ FunctionApp 内の AzureFunctions ごとに異なり、
管理する上でもコスト高になります。

取得したURL
https://gsy0911-function.azurewebsites.net/api/tech/qiita?code=***

2.2 API Managementの作成

AzureFunctions の不十分な点は以下の2点でした。

  1. AzureFunctions の名前がドメインの一部になっており、変更に弱い
  2. codeが AzureFunctions ごとに異なり管理のコストが高い

これらの問題点を解決するために、API Managementを作成・利用します。

Basicsにて設定するのは名前などの項目です。
Pricing tierDeveloperを設定していますが、それでも月額5000円程度は勝手にかかるので
利用していない場合は削除するようにするのが良いです。

Monitoringは Application Insights へログを出力するかどうかの設定で、 On にします。

Managed identityの項目も On にします。

それ以外の項目は、デフォルトでいきます。
最後までいったらCreateボタンを押下します。
作成の完了まで、地味に時間がかかります。

2.3 AzureFunctionsの統合

API Management が作成されたら、早速 Function App の登録をします。
APIsFunction Appの順に押下します。

すると、下のようなポップアップが出てくるので、Browseを押下します。

一見わかりにくいですが、Configure required settingsのボタンを押下します。
すると、右側から新しいタブが出てくるので、追加したい AzureFunctions が含まれる FunctionApp を選択します。

Function App の名前にgsy0911-functionが、そして、 AzureFunction にhttp_triggerの項目が追加されています。
さらに、HTTP methodsにはPOSTが、URL templateにはtech/qiitaがあります。
いずれの項目も前回の記事にて設定した項目です。

ここまでできたら、画面左下(下の写真には写ってないです)のSelectを押下します。

すると、選択した Functions App が設定されていることがわかります。
ここで、以下の内容は変更できます。

項目
Display name API Management にて表示される値
Name 特に意味はなさそう
API URL suffix 重要:Base URL の後ろに/から付与される値

特に気にならなければデフォルトのままで大丈夫ですが、
API URL suffixは重要なので慎重に考えた方が良いです。
写真のようにgsy0911-functionのままだと付与される URL はhttps://apim-gsy0911.azure-api.net/gsy0911-function/tech/qiitaになります。
空文字列も指定できるため、普段使いの場合は何も入力しない方が良さそうです。
何も入力しない場合は、https://apim-gsy0911.azure-api.net/tech/qiitaになります。

こうして無事に Function App と API Management を統合できました。
Testタブを押下し、http_triggerを選択すると、右画面の下の方に API の呼び方と、 Key が発行されます。

Python からこの API の呼び方は以下の通りです。

import requests

URL = "https://apim-gsy0911.azure-api.net/gsy0911-function/tech/qiita"
SUBSCRIPTION_KEY = "****"

payload = {
    "name": "taro"
}

headers = {
    "Ocp-Apim-Subscription-Key": SUBSCRIPTION_KEY
}

response = requests.post(URL, json=payload, headers=headers)
print(response)

curlを利用する場合は次のようになります。

$ curl -X POST -H "Content-Type:application/json" -H "Ocp-Apim-Subscription-Key:****" -d '{"name": "taro"}' https://apim-gsy0911.azure-api.net/gsy0911-function/tech/qiita

2.4 API Keyの発行

上記の 2.3 でほぼ完了しているのですが、
作成した API を展開する場合は、API Key を別に発行した方が良いです。

理由は以下の通りです。

  • 作成した API Key ごとにアクセス制限などがかけられる
  • 万が API Key が一流出してしまった場合でも、その API Key を削除すれば被害を最小限に抑えられる

早速、API Key を作成していきます。

ProductsからAddを押下します。

すると、新しい API Key を作成する画面に行くので
Display Name, Id, Published, APIsの項目を設定し、Createを押下します。

API Key の作成後、APIs, Test, http_triggerの順に追っていき、
Productのところにさっき作成したDisplay Nameがあれば作成できています。

上記の手順を踏むことで、本 API を展開する準備ができました。

3. Azure Identityの利用

(まだ書いていません)

4. おわりに

気がついたことがあれば随時こちらに更新していきます。