📦

Azure App Service for Containers体験記 AIとの共同作業をまじえて

に公開

はじめに

以前から作っていたPodcast Public Sound Generator(PPSG)をAzure App Serviceにデプロイしました。
このデプロイ作業についてはChatGPTのサポートも受けつつ行いました。それによってうまくできたこと、逆にトラブルになったところ、いろいろありましたので、それらについてまとめておこうと思い、今回記事を作成しました。

デプロイに当たって

Azure App Service上でPythonのプログラムを実行する場合大きく分けて二つの方法があります。

  • PythonのプログラムコードをAzure App Service上にデプロイしてそのまま実行する方法
  • ライブラリなどを含めた実行環境となるDockerコンテナをAzure App Service上に展開する方法

このコードをデプロイするのか、Dockerコンテナをデプロイするのか という選択は、AzureにWebアプリを作成する際の公開形式の選択ラジオボタンで設定できます(Webアプリ作成後の変更は出来ません)。

そしてプログラムコードを実行する方法の中には、さらにライブラリーなどを含めたデプロイを行う方法としてSCMと呼ばれるgitにコミットされる内容をベースにAzure App Service上に実行環境を構築する方法と、ZIPファイルに実行するためのコードやライブラリをまとめてアップロードする方法の2種類があるようで、実際には次のように分岐していきます。

さて、今回デプロイしたプログラムではpydubというPythonで音声ファイルを切り貼りするためのモジュールを使用しています。

https://ffmpeg.org/

このpydub、内部的にffprobeというffmpegに付属のツールを使用しているため、Azure App Service上でpydubを使ったプログラムを動作させる場合は、このツールも同梱する必要があります。

このようにソースコード以外のライブラリーを使用しなければいけないという場合どのデプロイ方法を使ってAzure App Serviceに自分のプログラムをデプロイするのか?ということをしっかりと考えなければいけません。

特にライブラリーをgitツリーに含めない場合

特にffmpegのようなライブラリをgitツリーに含めたくない場合は、SCMという仕組みを使うことができません。

なぜならここでデプロイをする処理.gitignoreというgitにアップロードしないファイルの一覧を参照してしまうため、例えばffmpeg.gitignoreに設定していると、実行環境にffmpegがデプロイされないということになってしまいます。

ffmpegのようなライブラリをgitツリーに含めたくないという理由は色々あるでしょう。

そもそもffmpegのライセンスはGPLであるため、ライセンスの都合上リポジトリにffmpegを追加できないというケースもありえますし、自分のようになんとなく他者のライブラリをリポジトリに含めると言うこと自体をやりたくないと感じる方もいらっしゃると思います。

ただそのような場合、このSCMという手法を使うことができなくなるということは覚えておいたほうがいいかと思います。

Visual Studio CodeからのデプロイはSCMになる(らしい)

そして、みなさんのうちでVisual Studio Codeを利用している方もいらっしゃるでしょう。

Visual Studio CodeにAzure関連機能の拡張を入れた場合サイドバーに出てくるAzureのデプロイからアクセスできるのはSCMという仕組みを使ったデプロイになってしまいます。

Visual Studio CodeのAzureサイドバー

もし必要なライブラリが.gitignoreに入っている場合は、このサイドバーのデプロイ機能を使うことができません。

急がば回れ:Dockerコンテナをアップロード

ではそのような場合にバイナリのライブラリをアップロードするにはどうすればいいか?というと、ChatGPTに色々と確認しながら進めてみましたが、結局Dockerを使うのが一番簡単という結論に至りました。

https://takamichie.notion.site/Azure-Python-ffmpeg-23060d1e6e798065bf39e4b16c994207?source=copy_link

というのもDockerであればドキュメントも多いですし、やること自体もそこまで複雑にはなりません。

対してZIPデプロイでやることは他の分野でやらないことだからこそ、ドキュメントが少なく、その分Azure App Serviceならではの作業を行うことになり、Dockerコンテナをいじるより大変になってしまいます。

さらに現在のWindowsではWindows Subsystem for Linux(WSL)の存在により、とても簡単にDockerの実行環境を揃えることができます。

このため昔に比べるとDocker導入の障壁が下がったと言えるのではないでしょうか?

Dockerの導入の方法などについてはおそらくもっと詳しく書かれた記事があると思いますので詳細は省きます(し、その手順については下記に貼ったAI問答メモにも記載があります)が、Dockerを使うことにして「これこれこのような条件を満たすDockerfileを作成してください」などとAIに指示をすれば、割と一回のやりとりでそれらの目的を達成するDockerfileを作成するしてくれるでしょう。

もちろん参照しているバージョンが最新のものではない可能性もありますので、そのあたりについてはDocker Hubの最新の情報などを確認した上で適宜修正を行ってください(自分がChatGPTに指示した時も作成に使用されたPythonのバージョンが古かっため、そこだけ修正を行ないました)。

AIにデプロイ手法を聞く際の注意

自分の作ったプログラムをAzure App Serviceのような環境にデプロイするということも頻繁にあるということではないため、「じゃあこの方法はChatGPTに聞いてみよう」とかそういうことを考える方もいらっしゃるかもしれません(実際自分もそうしました)。

ただここで特に気をつけて欲しいのは、自分がどの方法を使ってプログラムをデプロイするのかということはしっかり自分で考えておかなければいけないということです。

基本的にAIというものは、こちらが指示する内容は正しいと思って動作する性質があるように感じます
なので、要件が曖昧だったり、不適切な決定がなされた状態でAIにデプロイの手法を聞くことによって実は自分のやるべきでない方法をAIに指南されてしまう可能性があるのです。

そのようなことがないように、本当にこの方法が正しいのかどうかというのは別途AIにそのテーマで質問して確認するなり何らかの方法で確認しておく必要があります。

これがどんなにAIが普及しても人のプログラマが不要になることはないとわたしが思う理由でもあります。

実際にAIに質問した内容リスト

わたしは基本的にAIに質問した内容をログに残していますので、よろしければご確認ください。

https://www.notion.so/takamichie/67c7609855084fd186f9e059ab70f327?v=23460d1e6e79802b834e000c6d2305d5&source=copy_link

Discussion