前回、Azure Functionsの開発環境の準備からTimer Triggerを簡単に動かすところまでを実施しました。

続いてHTTP Triggerを試してみます。
機能は少し薄いですが、HTTP TriggerではAzure Functions単体でAPI公開が可能です。
Pythonコード開発
前回の記事の最後から開始します。
HTTP Triggerの追加
「WORKSPACE」の「Local Project」で⚡のマークを押します。
HTTP Triggerを選択します。
既にある「function_app.py」の中にHTTP Triggerを追加するので、「Add http Trigger function to an existing file」を選択します。
作成する関数名を指定します。
特にこだわりが無ければデフォルトでOKです。
承認レベルは「ANONIMOUS」とします。
自動でHTTP Triggerを「function_app.py」に追加してくれます。

処理実装
作成されている「function_app.py」の中に処理を実装していくことになります。
赤枠の部分に実装していきましょう。
URLのパスを変更したい等あれば、この部分の「route=」の部分変更しましょう。
とりあえず動かすだけなので、処理内容は変えずこのまま動作テストしてみます。
Timer Triggerの部分はあっても問題ありませんが、不要であれば削除するかコメントアウトしてしまいましょう。
HTTP Triggerを使うにはStorage Accountが必要になるのですが、ローカルPC環境にはないので、「Azurite」で代替します。
VSCode上で「Ctrl + Shift + p」でコマンドパレットを起動して、「Azurite: Start」を実行しましょう。
Azuriteが起動したら、VSCodeでコマンドプロンプトのターミナルを起動して以下のコマンドを実行しましょう。
正常に起動するとローカル環境でAPIが起動します。
<blockquote>
<div class=”line number7 index6 alt2″ data-bidi-marker=”true”><code class=”java string”>func start</code></div></blockquote>
表示されたURLにアクセスすると正常に応答返ってきます。
デフォルトで書かれている処理は、クエリパラメータのnameをもとに動的に内容を変えてくれます。
表示されたURLに「?name=hogehoge」を追加してアクセスしてみましょう。
Azure Functionsデプロイ
メニューからAzureのマークに移動して、「ACCOUNTS & TENANTS」で「Singn in to Azure…」を押下しましょう。
MicroSoftのログイン画面が表示されますので、デプロイ先のAzureアカウントのユーザーでログインしましょう。
ログインできたら、「WORKSPACE」の「Local Project」で雲のマークを押します。
既にAzure Functionsは作成済みなので、リストに出てきたFunctionsを指定します。
正常に完了したら、デプロイ先のAzure Functionsにコードがデプロイされています。
実行確認
実際にAPIが公開されているかを確認してみましょう。
デプロイされた「http_trigger」を押下します。
「関数のURLの取得」を押下すると公開されているAPIのURLが表示されます。
ローカルでテストしたときと同様にブラウザからアクセスしてみましょう。
これでAzure FunctionsをHTTP Triggerで実装完了です。
IPアドレス制限
このままでは全世界公開されており、誰でもアクセスできてしまうのでよろしくありません。
Azure Functionsだけでも簡単な接続元制限はできますので、かけておきましょう。
メニューの「設定」から「ネットワーク」に遷移します。
「受信トラフィックの構成」で「公衆ネットワークアクセス」のリンクを押下しましょう。
デフォルトだと「アクセス制限なしで有効」になっていると思います。
「選択した仮想ネットワークとIPアドレスから有効」で「一致しないルールのアクション」は「拒否」にして、
「追加」を押下します。
必須入力の箇所を入力して、「規則の追加」を行いましょう。
「IPアドレスブロック」の箇所が許可される通信元になります。
最後に忘れずに「保存」を押下しましょう。
このまま画面遷移すると設定が消えてしまいます。
これで設定したIPアドレス以外からの通信は拒否されて以下のような画面になります。
まとめ
Azure FunctionsでHTTP Triggerを開発してみました。
まずは簡単な動作検証のみなので、中身は何も作りこんでいない状況ですが、
デプロイしてすぐにHTTPSのAPIが公開されました。
接続元IPの制限もできますので、
後は中の処理を作りこめば処理はかなり柔軟にできそうです。
APIとしてはバージョン管理やスロットリング、APIキー等の機能が薄いので、
がっつりAPI基盤として扱うには物足りないかもしれません。
その場合は、Azure API Managementと組み合わせることを検討してみるのがよさそうですね。





















