筆記:以指令部屬Azure function函數應用程式
Deploy Azure function by azure cli on Ubuntu 20.04
不知道為什麼,我的Azure帳號只要不是手動指令部屬它都會失敗。Portal和VSCode外掛跟都是一樣會失敗,錯誤訊息因為沒接觸過,所以也不好理解。
部屬流程整理如下
- Ubuntu安裝Azure CLI
官方文件 https://docs.microsoft.com/zh-tw/cli/azure/install-azure-cli
不要使用apt安裝,套件太舊。我用一鍵安裝完成
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
確認版本
az --version - 登入Azure帳號
az login
它會開啟瀏覽器登入。只是我瀏覽器登入後,回到command line它顯示一些錯誤導致我無法用後續的功能。
所以只好改用--user-devie-code來手動開瀏覽器登入
az login --use-device-code - 手動建立Azure function函數應用程式需要的資源
這個步驟是因為
3.1 建立資源群組 resource group
az group create --name miroazrg --location southeastasia
name只能小寫;區域這裡是設在東南亞
3.2 建立儲存體帳號 storage account
az storage account create --resource-group miroazrg --name miroazstore
name只能小寫 - 建立函數應用程式Azure function
az functionapp create --name myFunctionProj --resource-group miroazrg --consumption-plan-location southeastasia --runtime node --runtime-version 16 --functions-version 4 --storage-account miroazstore
要用node 16版就需要使用v4才支援 - 安裝Azure Functions Core Tools
官方文件 https://docs.microsoft.com/zh-tw/azure/azure-functions/functions-run-local?tabs=v4%2Clinux%2Ccsharp%2Cportal%2Cbash
依照文件指令安裝套件:
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-$(lsb_release -cs)-prod $(lsb_release -cs) main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-get update
sudo apt-get install azure-functions-core-tools-4
確認版本:
func --version - 建立函數應用程式Azure function專案
func init MyFunctionProj
進入MyFunctionProj目錄。
使用範本處理
func new --template "Http Trigger" --name MyHttpTrigger
會再
本機測試:
func start
非常神奇,我本機測試也有問題,沒顯示本機測試用URL。訊息只有...Azure Functions Core Tools
Core Tools Version: 4.0.3971 Commit hash: d0775d487c93ebd49e9c1166d5c3c01f3c76eaaf (64-bit)
Function Runtime Version: 4.0.1.16815
[2022-03-10T09:48:52.992Z] No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).
For detailed output, run func with --verbose flag.
[2022-03-10T09:48:57.965Z] Host lock lease acquired by instance ID '000000000000000000000000BCD119C1'.不過我安裝VSCode的Azure function外掛,之後再用這指令就又可以用了,著實無言...
- 部屬專案
func azure functionapp publish myFunctionProj
其他議題
- 讓任何人都可以存取這個函數應用程式
可以在function.json中將bindings.authLevel設定為"anonymous" - 只允許post不允許get
可以在function.json中將bindings.methods拿掉get - 本機開發設定CORS
local.settings.json 加入Host
"Host": {
"CORS": "*",
"CORSCredentials": false
} - 遠端完全開放存取
參考: https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings?tabs=portal#cors
偷懶的設定方法:
az functionapp cors add --name myFunctionProj --resource-group miroazrg --allowed-origins '*'
留言