概要
Azureのチュートリアル「Visual Studio Code から Azure Functions をデプロイする」を行っていたところ、
関数のローカル実行でエラーとなった。
Nodeのバージョンによるものだったため、関数のローカル実行をDocker上で行うようにした。
デバッグ実行の設定を調べるのに時間がかかったため、備忘録として残す。
環境
- Windows 10 Home
- chocolatey 0.10.15
- Vagrant 2.2.10
- virtualbox 6.1.16
- Ubuntu 20.04 LTS
- Docker version 19.03.13, build 4484c46d9d
- docker-compose version 1.27.4, build 40524192
※Vagrantは192.168.50.10のIPで立ち上げ。
ツールの準備
- Azure Functions Core Toolsの手順にしたがい、64bit版をインストール
chocoinstallazure-functions-core-tools-3--params"'/x64'"-y
ソース
Dockerの設定
- 2020.11.01現在、Azure Functionsはnode v12までが対象。
- node.jsでAzure Functionsを動かせるようにこちらにもツールをインストール
- package.jsonはプロジェクトの作成で作ったものを利用している。
docker/functions/Dockerfile
# docker-hubからnode入りコンテナを取得# https://hub.docker.com/_/node/FROM node:12.19.0WORKDIR /app# ツールのインストールRUN npm i -g azure-functions-core-tools@3 --unsafe-permtrue# FunctionsのインストールCOPY ./package.json /app/package.jsonRUN npm install
docker/docker-compose.yml
version:"3.8"services:az-functions:build:./functionsvolumes:-../HttpExample:/app/HttpExample-../tsconfig.json:/app/tsconfig.json-../local.settings.json:/app/local.settings.jsonports:-9229:9229-7071:7071working_dir:/appcommand:[npm,run,start]
- vagrantを立ち上げ、
docker
ディレクトリでdocker-compose up
コマンドを入力してfunctionsが立ち上がることを確認。 - http://192.168.50.10:7071/api/HttpExample?name=testにアクセスできることを確認。
デバッグ設定
vscodeからデバッグを行うとき、プロジェクトの作成で作成されたとおりではできなかった。
- 以下を追記している
- addressに仮想環境のIPアドレス
- remoteRootにdocker上のパス
.vscode/launch.json
{"version":"0.2.0","configurations":[{"name":"Vagrant - Docker: Attach to Node Functions","type":"node","request":"attach","remoteRoot":"/app","address":"192.168.50.10","port":9229,"protocol":"auto",}]}
- docker上で動かすときに、
0.0.0.0
で動かさないとattach
に失敗する。
local.settings.json
{"IsEncrypted":false,"Values":{"AzureWebJobsStorage":"","FUNCTIONS_WORKER_RUNTIME":"node","languageWorkers:node:arguments":"--inspect=0.0.0.0:9229"}}
- 再度
docker-compose up
で動かしなおす - visual studioで「F5」キーを押し、ブレイクポイントで止まることを確認する
- 懸念点
- デバッグ実行時、worker-bundle.jsの7148行目のstr = JSON.parse(str);でエラー。。。 ## 参考
Docker + Node.js のデバッグ Visual Studio Code編
Visual Studio Code から Azure Functions をデプロイする
Functions ローカルデバッグ
Azure Functions Core Tools
node debug guide
Debianでsourcelist内のhttpsが取得出来ないとき
lsb_release: command not found in latest Ubuntu Docker container
Visual Studio Codeで、Node.jsアプリケーションをデバッグする(ローカルプロセスアタッチ/リモートデバッグ)
How to set inspect port for nodejs
Visual Studio Codeで始めるデバッグ可能なnode.jsアプリ開発(express+ejsでhelloworldするとこまでのチュートリアル)