GitHub ActionsからAzureAppServiceにデプロイする


はじめに

QiitaAzure投稿キャンペーン中で、良い機会なのでGitHubのリポジトリをAzureにデプロイする方法についてまとめました。
Deploy to AzureというVSCodeのエクステンションを使用すると驚くほど簡単にできました。

構成

リポジトリにGitHub、デプロイする先にAzureのAppServiceを使用します。
GitHubからAzureへの連携にはGitHubのActionを使用しますが、基本的にVSCodeのエクステンションが勝手にしてくれるため、はじめての人でも楽にできます。

手順

  1. GitHubのプロジェクトを作成
  2. AzureのAppServiceのリソースを作成
  3. GitHubのActionのworkflowを作成
  4. ソースをpush(デプロイ)

手順詳細

1. GitHubのプロジェクトを作成

GitHubのリポジトリを作成します。特に必要な設定はいらないので省略します。

2. AzureのAppServiceのリソースを作成

デプロイ先のAppServiceのリソースを作成します。基本的にはAzureポータルで作成することになります。

2.1. ポータルにログインしてAppServiceの画面まで移動します。

2.2. AppServiceの画面から追加ボタンを押して、リソース作成画面に移動します。

2.3. リソースの作成に必要な情報を入力します。
※インスタンスの詳細については、アプリに影響を与えるため注意してください

ちゃんと作成できるとこのような画面が表示されます。

3. GitHubのActionのworkflowを作成

GitHubのActionに使用するyamlファイルを手で書くのは手間なのでVSCodeのエクステンションを使用します。

リポジトリをクローンしてソースを追加する

GitHubのリポジトリをクローンしてデプロイしたいソースを追加します。
※pythonをデプロイしたいときはrequirements.txtを読み取ってインストールするのでpython -m pip freeze > requirements.txtコマンドでpipを吐き出しておいてください

Deploy to Azureのインストール

VSCodeのDeploy to Azureというエクステンションを使用するとGitHubのActionのyamlを自動的に生成してくれます。
1からyamlを作るのは手間なのでDeploy to Azureをインストールします。

GitHubのAccessTokenの取得

Deploy to Azureに必要なため、以下のGitHub Docsの通りに、AccessTokenを取得します。
https://docs.github.com/ja/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token

GitHub Actions を制御するyamlの生成

3.1. クローンしたディレクトリをVSCodeで開いてCtr + Shift + Pでコマンドパレットを開き、Deploy to Azure:Configure CI/CD Pipelineコマンドを実行します。
3.2. GitHubのAccessTokenを聞かれるので事前に取得したAccessTokenを入れます。
3.3. Webサービスの環境とサブスクリプションを聞かれるので入れます。
3.4. 4つめの入力項目が2で作成したAzureのAppServiceのリソース名になっているはずなのでそれを選択します。

ここまで入力すると開いているディレクトリ内に.github\workflows\workflow.ymlができているはずです。

yamlの修正

環境によっては、v1のアクションが使えない可能性があるため、azure/webapps-deploy@v1azure/webapps-deploy@v2に修正します。

4. ソースをpush(デプロイ)

ここまで、作成したすべてをGitHubのリポジトリに反映させます。
ソースをpushしたタイミングで、GitHubのActionがyamlを読み込みデプロイまで実行してくれます。

Actionの途中経過を見たいときは、GitHubの対象のリポジトリを選択して、ActionsタブをクリックするとコミットメッセージでActionのworkflowが走っています。

以下のようになれば完了です。

その他

このyamlにコードを追加すれば、テストの自動化もできるようになります。ちなみに、テストが失敗するとActionが止まりデプロイされません。
以下はpytestを実行したときに追加した例

workflow.yml

    - name: pytest
      working-directory: .
      run: |
        pip install pytest
        pip install -r requirements.txt
        python -m pytest

おわりに

Azureのデプロイ方法をまとめました。AzureにDevOps starterというここで書いたものを全てGUIでできる機能もありますが、デフォルトがpython2だったことやダッシュボードなどなど不要なものまでついてきたため、自分の好きにできるこの方法をまとめました。