VScodeのAzureFunctions拡張機能を使って、サーバレスでPython関数を実行してみた

#はじめに
HTTPリクエストに応答するPython関数を、VSCodeを利用して作成します。
作成した関数をローカル環境でテストした後、Azure Functionsのサーバレス環境にデプロイして、HTTPリクエストができるかどうか試してみます。
 
#概要
Azure Functionsとは、Microsoft Azureのサービスのひとつで、
Web APIをとても簡単に作れるフレームワークです。

こちらの記事がとても詳しく解説されています。

Azure Functionsでサーバーレスアーキテクチャが何かを理解する:
https://qiita.com/yuhattor/items/f7b2aec5211951dd7622
Azure公式ドキュメント:
https://azure.microsoft.com/ja-jp/services/functions/

# ゴール

* Azure Functions環境をセットアップ
* Python関数作成
* ローカル環境で関数を実行
* Azureにデプロイ

こちらの4項目についてやっていきたいと思います！

# 1. Azure Functions環境をセットアップ
まず、以下の環境が必要になります。

* Azureアカウントの作成

　[こちら](https://azure.microsoft.com/ja-jp/free/?ref=microsoft.com&utm_source=microsoft.com&utm_medium=docs&utm_campaign=visualstudio)から作成できます。

* Azure Functions Core Tools のインストール　

[こちら](https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-run-local?tabs=windows%2Ccsharp%2Cbash#install-the-azure-functions-core-tools)を参考にして Azure Functions Core Tools をインストールします。


* [Python](https://www.python.org/downloads/release/python-389/)をインストールします。

　※Azure Functions Core Tools で Python3.9 がプレビューになっているので今回は Python3.8.9 をインストールしています。


* VSCodeをインストールします。
* VSCodeにPython拡張機能と、Azure Functions拡張機能をインストールしてください。

上記セットアップが完了しましたら、さっそくPython関数を作成していきます！
 
# 2. Python関数作成
セットアップがすべて完了したなら、Python関数を作成していきます。

##ディレクトリ作成 

* コマンドプロンプトを起動し、次のコマンドを実行してプロジェクトとローカルのGitリポジトリを作成します。
* プロジェクト名を入力すると、そのプロジェクト名のフォルダの作成と初期化を実行します。
プロジェクト名がすでにある場合は、フォルダの中身を初期化します。

```
 func init MyFunctionProj 
```


* ランタイムを選択します。

```
func init MyFunctionProj
Use the up/down arrow keys to select a worker runtime:
dotnet
dotnet (isolated process)
node
python
java
powershell
custom
```
* 今回はPythonを選択します。
上/下方向キーを使用してPythonを選択し、Enter キーを押します。
終わったらVSCodeに移ります。

##VSCodeで関数作成

1. アクティビティバーのAzureアイコンをクリックし、FUNCTION から **[Create New Project]** を選択します。


2. 今回作成する Python関数をどのディレクトリに格納する / 新規ディレクトリを作成するか選択します。今回はコマンドプロンプトから作成した **MyFunctionProj** のディレクトリを選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/e736b7ac-6a4f-e6b5-8867-91a11ec4ecef.png)

3. 今回利用する言語、**Python**を選択します。Python以外にもC#、Java、TypeScriptなどにも対応しているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/35ef6b4d-bd1b-5fee-0975-02c100480d00.png)

4. プロジェクトのテンプレートを選択します。今回はHTTPリクエストの応答をやりたいので **HTTP Trigger** を選択します。
その他にも、 Azure Blob Storage Trigger、Azure Queue Storage Trigger などが選択できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/979c8459-3fa4-b0e1-37a9-fbcbe9aaa2ec.png)

5. 関数の名前を決めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/cffb57b7-ab4b-48f0-ad4d-ba86ec99bc72.png)

6. この関数の権限を決めます。
今回は **Anonymous** を選択します。
すべてのユーザーが関数のエンドポイントを呼び出すことができるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/bb84429d-8e4f-d1bc-8f5a-7f451d8d9b28.png)

7. 関数作成が終わると、左のメニューバーのAzureアイコンから
作成した関数のフォルダが見られるようになります。
（赤枠で囲った部分）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/13a718f9-6e37-767d-2f4d-f48372f4f954.png)

# 3. ローカル環境で関数を実行
##Azure へのサインイン
作成したPython関数を発行するにはAzureにサインインが必要になります。
Azureのアカウントにサインインすると、サイドバーにアカウントとサブスクリプションが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/ecd7282b-125b-4d9b-3258-4097148c5808.png)

##Azureに作成したコードをデプロイ
Azure上に作成したPython関数をデプロイします。
下記画像の赤枠部分をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/96cfd549-ab31-8fbe-9e0b-4bf45425f5a5.png)

2. アカウントにサインインしていると、サブスクリプションが表示されます。
今回使用するサブスクリプションを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/d41a1d8c-55cd-e66e-879b-51565e2ddb29.png)

3. デプロイ名を決めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/3e2ea866-8fda-3e6c-2403-76f4c3c72062.png)

4. 使用するランタイムを決めます。
今回はPython3.8を使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/01649185-b013-8700-7ace-25b751a9de6f.png)


5. 作成したPython関数をデプロイするリージョンを決めます。
基本的に一番近いリージョンを選択するので今回は東日本を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/eb0936d5-dfaf-7358-3e79-bb94a0bc6a38.png)

6. デプロイが完了するとサイドバーに表示されるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/514c1518-f2d5-0c8f-311e-531f64721553.png)

##関数の実行
作成した関数を F5 キーで呼び出し / 実行→デバック　をクリックすると、
ターミナル画面に関数の実行が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/01d310fb-a9cb-f871-b780-74085d167c32.png)

```
 HttpTrigger3: [GET,POST] http://localhost:7071/api/HttpTrigger3
```
URLがターミナルに表示されます。
URLを開いて以下の画面が表示されたら成功です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/6d0ec12f-bb69-0a62-7826-f19325ff6b31.png)

##Azure上で作成したPython関数が登録されているかチェック
[Azure portal](https://azure.microsoft.com/ja-jp/features/azure-portal/)上でコードが登録されているかチェックします。

Azure portalにログインし、**関数アプリ**をクリック
登録されていると以下の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091796/dc559df6-2c8f-67f7-6280-19a311efcc38.png)

# さいごに
今回VSCodeのAzure Functions拡張機能を使ってみて、簡単に関数が実行できました。
サーバの構築や保守管理なしでコードのビルド・デバッグ・デプロイができるのは楽ですね。
自動スケーリングや決まった時間にコードを処理するバッチ処理の機能なども備わっているので効率よく開発できるのが、プログラマー的に便利だなと思いました。

#参考HP
Azure公式ドキュメント
https://docs.microsoft.com/ja-jp/azure/azure-functions/create-first-function-vs-code-python

https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-run-local?tabs=windows%2Ccsharp%2Cbash#install-the-azure-functions-core-tools