【Azure Functions】超入門クイックスタート

# はじめに
とりあえずAzure Function動かしてえ、という人向けに書きました
説明は最小限にとどめてありますが、環境構築ができるところまで書いたのでお役に立てればうれしいです

# 1. ローカルでの関数作成
## 1-1. Azure Functions Core Tools のインストール
[こちら](https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-csharp#install-the-azure-functions-core-tools)からローカル環境での開発に必要なFunctions Core Toolsをインストールしてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/89273a81-fe9b-e0ab-d481-f1a6130c62a0.png)

インストール完了後に、ターミナルなどで`func`と入力して使い方が表示されればOKです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/711a2a6e-3f90-8faf-2c6e-50d2fd005ccc.png)

## 1-2. プロジェクト作成
先ほどインストールしたFunctions Core Toolsを使いAzure Functionのプロジェクトを作成します
任意のフォルダをVS Codeを開き、ターミナルから以下のコマンドを実行します
```
> func init 
```
<br>

矢印キーを使って使用するランタイム（今回はpython）を選択します
`python`が青色になっている状態で`Enter`を押します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/224ed6d3-92be-5fe7-ec07-1c41e8e24658.png)

いろいろファイルが作成されますね、とりあえず以下の認識で大丈夫です
- `host.json`：Functionプロジェクトの設定が書いてある（[公式ドキュメント](https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-host-json)）
- `local.settings.json`：環境変数の置き場所（[公式ドキュメント](https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-develop-local#local-settings-file)）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/46022b16-eebc-2e43-3218-7f88bd151ca1.png)

## 1-3. 関数の作成
プロジェクトができたので関数を作成します、１つのプロジェクトの中で複数の関数を作ることができます。
以下のコマンドを実行します
```
> func new
```
<br>

今回はHTTPリクエストをトリガーとして実行される関数を作るので`HTTP trigger`を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/7726d70d-1c37-6d73-4991-d458b8efef1a.png)

トリガーの種類を選択したら、関数の名前を聞かれます
そのままEnterを押せば`HttpTrigger`という名前になります（今回はそのままEnterを押します）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/1d3b75c1-d40d-dd53-eccd-432d9205fb5b.png)

`HttpTrigger`フォルダが作成されましたね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/30d5ab39-b6a9-ba5c-d568-3d8ec0e462aa.png)

`__init__.py`はプログラムの本体にあたります、HTTPリクエストがあったら`main`関数の処理が走ります
簡単にソースコードを解説すると、`name`クエリがあれば19行目、なければ21行目を返すようになっています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/b33c64d4-e02b-0d74-d16f-1eb634bcf742.png)

## 1-4. プログラムの実行
実はこの状態でこの関数を実行することができます
ターミナルに以下のコマンドを実行し、関数を実行します
```
> func start
```
<br>

起動したようです、表示されているURLを叩けば、関数が実行されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/41fc0db7-e482-1ee1-fc48-09b251595203.png)

## 1-5. 動作確認
ブラウザにURLを入力してリクエストを飛ばしてみましょう、画像のようなレスポンスが返ってくれば正常に動作しています！
`name`クエリを指定しなかったので`__init__.py`の22行目の文字列が返ってきています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/a5abaca3-c9da-00fc-f65a-6957ed779017.png)

次は`name`クエリを指定してみましょう
URLの末尾に`?name=YOSHIDA`を追記してみます
```
http://localhost:7071/api/HttpTrigger?name=YOSHIDA
```
<br>

`name`クエリを指定したので`__init__.py`の19行目の文字列が返ってきました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/78d1f545-d6e1-2fc2-b657-77e55e759b71.png)










# 2. アプリをデプロイする
## 2-1. リソースの作成
いよいよAzureの出番です、[Azureポータル](https://portal.azure.com/#home)にアクセスます
「関数アプリ」に移動し、「＋作成」をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/c5d569ac-8375-c3ce-1e97-4c750edbb53a.png)

リソースの設定は以下の画像のようにして、リソースを作成してください
リソースグループ名・関数アプリ名はなんでもいいです

**注意点**
- リソースグループは新規で作成することをお勧めます、最後にリソースグループごと削除します
- **ランタイムスタック**と**ホスティングオプションとプラン**は間違えないようにしてください

   - ホスティングオプションとプランを`Functions Premium`にしてしまうと、リソースが存在するだけで結構なお金がかかります、、
  - 「消費量（サーバレス）」を選択していれば、関数の実行時間によって課金されます（このクイックスタートを試す程度であればお金はかかりません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/23bef543-a09d-0359-e210-5b2ad0bfafea.png)

作成したリソースグループを見てみましょう
関数アプリを作成すると、関数アプリを運用するために必要なリソース・監視するためのリソースも同時に作成されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/84eb525c-972a-33a8-fd46-cacff96badfa.png)

## 2-2. ローカルで作成したアプリのデプロイ
VS CodeからAzure Funtionsの拡張機能をインストールします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/09efe1a7-10d4-ade8-89e3-1759e896e018.png)

インストールが完了すると、右側にAzureのアイコンが表示されます
`Sign in to Azure...`をクリックしサインインします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/041ee735-26e8-7274-f05a-22f20e5848fe.png)

VS CodeでF1キーを入力し、`deploy to function app`と入力しFunctions Appにデプロイを行うコマンドを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/84f2a977-d8f6-9e8e-4dfe-01bd2ac01964.png)

対象のフォルダを聞かれるので、デプロイしたいフォルダを選択してください
現在開いているフォルダーをデプロイしたければ`(recently used)`の方を選択してください
対象のサブスクリプション・関数アプリ名も聞かれるので、対象のものを選択してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/f008c2bb-6ce6-6735-3082-e515b0570444.png)

このタイミングで、プロジェクトを初期化するかか聞かれることがありますので「Yes」を選択してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/20558fce-d383-745d-1084-d500d5ecda54.png)

「python」を選択してください
（初期化には少し時間がかかります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/74c25653-e664-2b8c-f0c3-df43d797669e.png)

本当にデプロイしてよいか聞かれます
対象のリソース名が間違いないか確認ができたら「Deploy」をクリックしてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/b245c26c-9945-8e5d-a878-bfb17eacff88.png)

## 2-3. 動作確認
Azureポータルから、対象のアプリにアクセスします
「関数」タブに先ほどデプロイした関数が表示されているのでクリックしてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/c205aed0-0431-6e04-d100-1edde98fb42f.png)

この画面では、関数の実行ログの確認や関数のテストを行うことができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/1859ef67-2804-3c17-dd71-7b7897302462.png)

「関数のURLの取得」をクリックし、URLをコピーしてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/103d9678-86e6-f669-2fb5-c3dbf08de153.png)

ローカルの動作確認と同様に、ブラウザにURLを張り付けてみましょう
見覚えのあるメッセージが返ってくれば成功です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/4da17b43-d1ab-b62e-a812-83c1b85dd8f4.png)

# 3. リソースの削除
関数アプリを作成したリソースグループに移動します
「リソースグループの削除」からリソースを削除してください
（※リソースを残しておくと、少額ですが課金されてしまいますので削除をお勧めします）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952033/04a0ca77-c877-3c53-233a-12815c7dc71d.png)

# 参考
- [Core Tools を使用してローカルで Azure Functions を開発する](https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-csharp#install-the-azure-functions-core-tools)
- [Azure Functions をローカルでコーディングしてテストする](https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-develop-local#local-settings-file)
- [Azure Functions 2.x 以降の host.json のリファレンス](https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-host-json)