Apple Silicon上のVSCodeでPythonのAzure Functionsを動かしたい

なんかねぇ、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

タイトルとURLをコピーしました