なんかねぇ、Functionsのランタイム(func)がArm64に対応してないんですよ。プロジェクト作って動かそうとしたら、Arm64は知らん、とか言われて。はー、めんど。
で、ちょっと探したらワークアラウンドを見つけた。要は、無いならコピーしちゃえ、ということなんだけども。ただ、そのままだと手元で動かなかったので、ちょっと修正したバージョンを以下に。
事前に、Azure Functions Core Toolsをインストールしておく。
% brew tap azure/functions
% brew install azure-functions-core-tools@4
あと、macOSでコードを書いてるなら入ってないことはないだろうけど、jqを入れておく。
% brew install jq
以下の内容のMakefileを作成する。ポイントは、Pythonのバージョンと、pip→pip3。VSCodeで実行するPythonのバージョンに合わせて、下記赤字のPythonのバージョンを直す。pip3のとこは、python3 -m pipにしても良いかもしれん。
FUNC_VERSION = $(shell func --version)
FUNC_PATH = $(shell realpath $$(which func))
FUNC_OSX_WORKER_PATH = $(dir $(FUNC_PATH))workers/python/3.11/OSX
FUNC_WORKER_CONFIG_JSON = $(dir $(FUNC_PATH))workers/python/worker.config.json
FUNC_OSX_WORKER_X64 = $(FUNC_OSX_WORKER_PATH)/X64
FUNC_OSX_WORKER_ARM64 = $(FUNC_OSX_WORKER_PATH)/Arm64
.PHONY: $(FUNC_OSX_WORKER_ARM64)
$(FUNC_OSX_WORKER_ARM64):
cp -r $(FUNC_OSX_WORKER_PATH)/X64 $(FUNC_OSX_WORKER_PATH)/Arm64
pip3 install grpcio --upgrade --target $@
.PHONY: $(FUNC_WORKER_CONFIG_JSON)
$(FUNC_WORKER_CONFIG_JSON):
cp $(FUNC_WORKER_CONFIG_JSON) $(FUNC_WORKER_CONFIG_JSON).bak
cat $(FUNC_WORKER_CONFIG_JSON) \
| jq '.description.supportedArchitectures |= .+ ["Arm64"]' \
> $(FUNC_WORKER_CONFIG_JSON).tmp
mv $(FUNC_WORKER_CONFIG_JSON).tmp $(FUNC_WORKER_CONFIG_JSON)
.PHONY: install_func_arm64_worker
install_func_arm64_worker: $(FUNC_OSX_WORKER_ARM64) $(FUNC_WORKER_CONFIG_JSON)
で、インストール。
% make install_func_arm64_worker