🛻

ローカルで開発したAzure FunctionsをVSCode上からAzureにデプロイする

2024/06/28に公開

概要

先日ローカルでAzure Functionsを作成・テストする方法を紹介したので今回は作成したアプリのデプロイ方法を紹介します。とは言っても作業自体は数回ボタンを押して完了です。デプロイ時にいくつかエラーが出たので、Tipsの章に解決方法を記載したので参考になればと思います。
前回のプロジェクト作成とテストが出来ていればVSCode拡張機能の追加は必要ありません。

デプロイ

関数アプリのリソース作成

事前にAzure Portalで関数アプリのリソースを作成します。
本記事では関数アプリの種類や料金プランによる違いなどのリソース作成詳細は解説しません。

VSCode上でのデプロイ

  1. Deploy to Azure...
    カーソルを持っていくとクラウドへのアップロードを表すアイコンが表示されます。

    コマンドパレットで、コマンド Azure Functions: Deploy to Function App... を検索して実行することもできます。
  2. Select a subscription
    関数アプリのリソースを作成したサブスクリプションを選択します。
  3. Select a function app
    デプロイ先の関数アプリを選択します。

必要な作業は以上です。
デプロイ中はAzure CLIに結果が表示され、OUTPUTタブにログが出力されます。

Tips

ネットワーク制限

X:YY:ZZ PM: Error: Error 403 - Forbidden

The web app you have attempted to reach has blocked your access.

関数アプリのリソース作成時にネットワーク制限をかけている場合、特定IPからのアクセスを制限するか、制限をなくさなければブロックされます。

外部リソースへのアクセス

例えばBlobストレージにアクセス制限を付けている場合などにエラーが発生します。
ストレージアカウントと関数アプリが同じサブスクリプション内にあるのであれば、BLOBのページから[アクセス制御(IAM)]→[このリソースへのアクセス権の付与]でBLOBの共同作成者ロールに関数アプリのマネージドIDを追加することでアクセスが可能になります。

ストレージアカウントのアクセス制御でApp Serviceや仮想ネットワークのIPにアクセス許可を与えるなどの方法でも対処できると思います(今回は試していないので間違っていたらごめんなさい)

環境変数

ローカル開発のlocal.settings.jsonファイルで設定していた環境変数は、デプロイ後に出てくる通知ボックスでUpload settingsを選択することで反映することができます。
またAzure Portal上では[設定]→[環境変数]から環境変数の追加できます。
(ローカルのファイルを使って一括設定もできるかもしれませんがそこまで調べられていませんのでまた追記したいと思います)

ファイル書き込み制限と一時ストレージ

基本的にAzure Functionsのファイルシステムは読み取り専用になっていて書き込みをしようとするとエラーが出ます。関数アプリの一時ファイルやキャッシュの保存など限られた用途でのみ書き込みが許可されています。一時ファイルは/tmpディレクトリで管理されます。
subprocessを使ってchmodすることで書き込み制限を突破することもできるようですが、おそらく非推奨な方法だと思います。

参考

Azure DevOps repos や Github のソースコード更新からAzure FunctionsのCI/CDを構築することも可能です。
https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-develop-vs-code?tabs=node-v4%2Cpython-v2%2Cisolated-process&pivots=programming-language-python#republish-project-files

ヘッドウォータース

Discussion