[Azure Functions] GitHub Actions を使って関数をデプロイする

## はじめに
先日、Azure Functions 関数を Azure DevOps の Pipelines を使ってデプロイする方法を記事にしました。

- [Azure Functions] Azure Pipelines を使って関数をデプロイする：https://qiita.com/tomohat/items/02c0e189750192e435c5

今回は、Azure Pipelines の代わりに GitHub Actions を使って同様にデプロイする方法を紹介したいと思います。

## 前提
- GitHub リポジトリ
初めてリポジトリを作成する方は、以下のドキュメントをもとにご作成ください。
https://docs.github.com/ja/github/getting-started-with-github/create-a-repo

- Azure Functions
「はじめに」で記した前回記事と同じ構成で作成しておきます。
    - ランタイムスタック : Node.js (14 LTS)
    - オペレーティングシステム : Windows
    - プラン : 消費量 (サーバーレス)

- Visual Studio Code
ローカル開発環境での関数作成および git コミットまでについても前回記事同様です。
コミットしたら上記で作成した GitHub リポジトリに push しておきます。

※ 前回記事：https://qiita.com/tomohat/items/02c0e189750192e435c5

## GitHub Actions の作成
### 発行プロファイルの設定
GitHub Actions から Azure Functions へデプロイする際に使用する認証情報として、発行プロファイルが推奨されています。
まずはこちらの設定から始めます。

Azure Functions の概要画面に遷移し、`発行プロファイルの取得`を押すとファイルがダウンロードできます。
![2021-03-08_19h24_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423135/9fde6c5d-b013-e7a0-f561-8cc08b381254.png)

続いて、GitHub リポジトリに移動し、リポジトリ設定の `Secrets > New repository secret` を選択します。
![2021-03-08_19h25_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423135/d3847d62-d4b7-73d0-d489-5a77d77ac048.png)
Secret 設定画面で、Name を `AZURE_FUNCTIONAPP_PUBLISH_PROFILE` とし、Value には先ほどダウンロードした発行プロファイルの中身を全て貼り付けます。
発行プロファイルは Visual Studio Code で開くと中身を確認できます。
![2021-03-08_19h32_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423135/4204931c-c707-3fd6-e2a5-3296ce712f7a.png)
 
これで発行プロファイルの設定は完了です。

## ワークフローの作成
ここから、Azure Functions にデプロイするためのワークフロー作成していきます。
まずは、`Actions` タブの `set up a workflow yourself` リンクを押下します。
![2021-03-08_19h39_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423135/667e57d2-2b40-413e-f5e5-eb13ca2069ac.png)
すると、YAML ファイル編集画面が表示されると思うので、公式ドキュメントを参考にした以下のコードで上書きます。
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-how-to-github-actions?tabs=javascript#deploy-the-function-app

~~~yaml
name: Deploy Node.js project to function app

on:
  push:
    branches: [ main ]
  workflow_dispatch:

jobs:
  build-and-deploy:
    runs-on: windows-latest
    env:
      AZURE_FUNCTIONAPP_PACKAGE_PATH: '.' 
      AZURE_FUNCTIONAPP_NAME: '(作成した Function App の名前)'
      NODE_VERSION: '14.x'                     
    steps:
      - name: 'Checkout GitHub Action'
        uses: actions/checkout@main

      - name: Setup Node ${{ env.NODE_VERSION }} Environment
        uses: actions/setup-node@v1
        with:
          node-version: ${{ env.NODE_VERSION }}

      - name: Resolve Project Dependencies Using Npm
        shell: pwsh
        run: |
          pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
          npm install
          npm run build --if-present
          npm run test --if-present
          popd
      - name: Run Azure Functions Action
        uses: Azure/functions-action@v1
        id: fa
        with:
          app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
          package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
          publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}
~~~
上書きしたら　`Start commit` ボタンを押下します。
GitHub 上で main ブランチをコミットすることでワークフローが走り出し、最初のビルドとデプロイが実行されます。
デプロイが完了したら、Azure Functions に移動して、実際にデプロイされているか確認してみましょう。

## 参考文献
- GitHub Actions を使用した継続的デリバリー：https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-how-to-github-actions?tabs=javascript