LoginSignup
5
2

More than 3 years have passed since last update.

通信経路閉域化された Azure App Service Web App へ Pipeline から Web アプリをデプロイする

Last updated at Posted at 2020-05-27

はじめに

ここで紹介している App Service はこちらの資料で示された手順に沿って構築されたプライベートなアプリです。本記事の情報は2020年5月末現在の情報です。

パブリックに公開された App Service の場合、以下の画像のように Azure ポータルから CI/CD のパイプラインを GUI で構築することが可能です。
image.png
image.png

しかしながら、こちらの資料で示された構成の App Service でそのまま Pipeline を構築すると、
Error: Error Code: ERROR_COULD_NOT_CONNECT_TO_REMOTESVC More Information: Could not connect to the remote computer ("YOUR_WEBSITE_URL") using the specified process ("Web Management Service") because the server did not respond.
とデプロイ時にエラーが出ます。
これはよくよく考えると当たり前のことで、パブリックに公開されていない App Service であるため、デプロイ時に Pipeline からのアクセスが許可されていない状態となっております。そこで今回は、パブリックからのアクセスが遮断されている App Service に対しての Pipeline 構築を Azure DevOps を用いて行います。

↓今回のアーキテクチャ概要
image.png
App Service Web App へアクセス可能な VNET 内に Pipeline の Agent をホストした Virtual Machine を置いて、その Virtual Machine 経由でアプリのデプロイを行います。

Azure DevOps 側の準備

App Service の確認

はじめに、https://{YOUR_APP_SERVICE_NAME}.azurewebsites.net にパブリック IP からアクセスし、403 Forbidden が返ってくることを確認してください。
image.png

Azure Pipelines を用いた CI/CD の構築

次に、Azure DevOps のプロジェクトを準備します。今回は非常に単純な ASP .NET Core の Web アプリのリポジトリを持ったプロジェクトを利用します。
image.png

Azure DevOps のプロジェクトが準備できましたら、Azure ポータルへアクセスし、App Service のデプロイセンターから CI/CD の設定を行います。今回はソース管理に Azure Repos 、ビルドプロバイダーに Azure Pipelines(プレビュー)を利用します。
image.png
image.png
構成の設定では、先ほど準備した Azure DevOps のプロジェクトを選択し、デプロイの対象としたいリポジトリとブランチを選択します。その後構成の確認を行い、 CI/CD Pipeline が構築されたことを確認します。
image.png

次に、Azure DevOps のプロジェクトに戻り、Pipelines の項目をチェックします。先ほど App Service 側で設定した Pipeline が構築されていることがわかります。CI Pipeline は Pipelines の項目から、CD Pipeline は Releases の項目からチェックできます。また、そのままの設定では、デプロイが失敗していることが確認できます(デプロイ先の App Service がパブリックアクセスを拒否しているため、Microsoft Hosted のデプロイマシンによるデプロイも拒否されています)。
image.png

Pipeline Agent の準備

Agent pool 作成

はじめに、Pipeline 用の Agent を作成します。プロジェクトの左下の Project Settings から Agent pools を選択し、Add pool をクリックしてください。作成する Pool Type は Self-hosted を選択してください。
image.png
image.png

作成した Agent pool をクリックし、Agents タブから New agent をクリックしてください。エージェントの種類は Windows x64 を選択し、ダウンロードリンクをコピーしてください。
image.png

PAT トークン取得

次に、Azure DevOps のアクセストークンを取得します。プロジェクトの画面右上の設定ボタンから Personal access tokens をクリックします。
image.png
New Token をクリックし、トークンの名前や有効期限を設定してください。また、Scopes は Custom defined を選択し、Agent Pools の Read & manage にのみチェックを入れてください(Agent Poolsが出てこない場合は Ahow all scopes をクリックしてください)。最後に Create をクリックし、表示されるトークンを後で利用するためにメモしてください。
image.png

Agent を Virtual Machine 上に展開

次に、App Service へアクセス可能な Virtual Machine(今回は Windows Server 2019)へ RDP で接続し、先ほどコピーしたリンクから Agent をダウンロードしてください。Agent は zip ファイルでダウンロードされますので、お好きな場所で解凍してください。解凍しましたら、config.bat ファイルを実行してください。
image.png
ここで様々なことを入力する必要があるのですが、以下の通り入力してください。

  • Enter server URL: https://dev.azure.com/{YOUR_ORGANIZATION}を入力してください
  • Enter authentication type (press enter for PAT): そのまま Enter を押してください
  • Enter personal access token: 先ほど取得した PAT トークンを入力してください
  • Enter agent pool (press enter for default): 先ほど作成した Agent pool の名前を入力してください
  • Enter agent name: お好きな Agent の名前を入力してください
  • Enter work folder (press enter for _work): そのまま Enter を押してください
  • Enter run agent as service? (Y/N): Y を入力してください
  • Enter User account to use for the service: そのまま Enter を押してください

設定が終了しましたら run.bat ファイルを実行してください。Azure DevOps の Agent pools にて、ここで作成した Agent が正常に認識されているか確認できます。
image.png

作成した Agent を Pipeline で利用する

Releases Pipeline の Edit を選択し、Task の編集を行います。Run on agent を選択し、Agent pool を [Hosted] Azure Pipelines から、今回作成した Agent pool を選択し、Save をクリックします。
image.png

最後に、コードの編集を Commit した後に、CI/CD Pipeline が正常に稼働し、無事 Web アプリに変更が適用されたことを確認します。これで、パブリックに公開されていない App Service に対しても CI/CD Pipeline を構築することができました。

おわりに

GitHub Actions でも同じことができるのか試してみたいですね(たぶんできそう…)。
本記事の情報は2020年5月末現在の情報です。

参考資料

https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows?view=azure-devops
https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/agents?view=azure-devops&tabs=browser

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2