1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure Functions: ZIP コードデプロイが社内プロキシ環境で失敗? ⇒単に、NoProfile にしてただけだった・・ :(

Posted at

背景

Azure Functions へ az functionapp deployment source config-zip --build-remote で ZIP デプロイしようとしたところ、社内プロキシ(TLS インターセプトあり)っぽいエラーで失敗。

Bicep(management.azure.com 側)でのインフラデプロイは通るのに、Functions のコードデプロイ(*.scm.azurewebsites.net 側)だけが落ちる、という状態だった。

結論としては 「PowerShell プロファイルが読み込まれておらず、意図した proxy 設定が効いていなかった」 というおバカな話。 :sweat_smile:

概要

  • ZIP デプロイは *.scm.azurewebsites.net(Kudu/SCM)に対して飛ぶので、インフラデプロイとネットワーク条件がズレやすい
  • VS Code 側の設定で pwsh -NoProfile 起動になっていると、プロファイル由来の proxy 設定が読み込まれない
  • -NoProfile をなくせば、意図通りの Proxy で正常動作 :laughing:

詳細

1. 症状:ZIP デプロイだけが落ちる

インフラ系(Bicep/ARM)は成功するのに、Functions のコードデプロイで失敗。

ZIP デプロイのコマンドはこんな感じ。

az functionapp deployment source config-zip \
  -g <resource-group> \
  -n <function-app-name> \
  --src $zipPath \
  --build-remote

2. ZIP デプロイは「SCM(Kudu)」へ飛ぶ

ZIP デプロイは SCM(Kudu) 側に対して要求が飛ぶ(https://<app>.scm.azurewebsites.net/...)。
なので、同じ Azure に対して操作していても、

  • インフラ(ARM)
  • アプリ(SCM/Kudu)

到達経路やプロキシ判定が変わる からだめなのか? :thinking:

ZIP デプロイの仕組み自体は Azure Functions の公式ドキュメントにまとまっている。

3. いったん「証明書/CA」方向も疑う(ただし本筋ではなかった)

プロキシ配下で certificate verify failed 系が出ると、CA バンドル指定(REQUESTS_CA_BUNDLE など)に寄せたくなる。
この方向性自体は公式のトラブルシューティングにも出てくる。

Azure CLI のプロキシ/証明書系のトラブルシューティング。

ただし今回の本筋はここじゃなかった。

4. 原因:VS Code が pwsh -NoProfile で起動していた

VS Code の設定で PowerShell が -NoProfile 付きにしていて、PowerShell のプロファイルが読み込まれていなかった

プロファイルには、

  • HTTP_PROXY / HTTPS_PROXY
  • NO_PROXY
  • 社内向けのプロキシ初期化

みたいな設定が入っていたが、プロファイルが読まれない=意図した proxy が効かない になっていた

PowerShell のプロファイルと -NoProfile の挙動は公式にも書かれている。

  • about_Profiles:

  • about_PowerShell_exe(-NoProfile パラメータ):

5. 対処:-NoProfile を外して再実行

VS Code 側の設定(例:.vscode/settings.json など)で、PowerShell 起動引数から -NoProfile を外す。

その状態で同じ ZIP デプロイを再実行したところ、以下のように 202 Accepted(デプロイ受付) まで到達。

WARNING: Getting scm site credentials for zip deployment
WARNING: Starting zip deployment...
WARNING: Deployment endpoint responded with status code 202

202 Accepted は「要求が受理され、非同期でデプロイが進む」意味。
この時点で即「完了」ではないけど、少なくとも TLS/プロキシで握りつぶされず、SCM 側に届いた ことの証跡

あとがき

「証明書をどうするか」って方向に寄りがちだったけど、そもそも 想定していた proxy 設定が PowerShell プロファイルでしか入っていなかった のが盲点だった。

別件で、 Integrated Terminal の問題(同一環境になって困る)があったので、 -NoProfile を付けて試していたことをすっかり忘れていた

気付いたきっかけは、別環境では特に問題なかった事

で、あれ?環境問題ってことに気付いて、Proxy を確認したところ、意図したものじゃないものになってることに気付いて解決できた。

一時的にお試しした際は、ちゃんと、変更差分をみて戻すなりしておかないとですね・・ :sweat:

参考リンク

  • Azure Functions の ZIP デプロイ(zip push deployment)

  • Azure Functions のデプロイ方式(全体像)

  • Azure CLI トラブルシューティング(プロキシ/証明書の考え方含む)

  • PowerShell プロファイル(起動時に何が読まれるか)

  • pwsh-NoProfile(起動引数)

  • VS Code ターミナル基礎(補足)

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?