😀

Azure Functions を Docker コンテナーで試してみた

に公開

Azure Functions で使用される Docker コンテナーの OS は、debian 11 です。という事は、OS 内で実行できるアプリをあからじめ Docker コンテナーに用意しておけば、Azure Functions から呼び出して実行し、処理結果を受け取れるはずです。そこでまずは、Azure Functions を Docker コンテナーで試してみました。

Azure Container Registry を用意

bash
prefix=mnrfuncd
region=japaneast

az group create \
  --name ${prefix}-rg \
  --location $region

az acr create \
  --resource-group ${prefix}-rg \
  --name ${prefix}acr \
  --sku Basic \
  --admin-enabled true

検証用 Azure Functions アプリを作成

bash
func init $prefix --dotnet --docker

cd $prefix

func new --name http --template HttpTrigger --authlevel anonymous

func start

動作確認

bash
$ curl http://localhost:7071/api/http
This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.

検証用 Azure Functions を Docker で動作確認

bash
docker build -t $prefix .

docker run --rm -it -p 8080:80 $prefix

動作確認

bash
$ curl http://localhost:8080/api/http
This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.

Docker イメージを ACR にプッシュ

bash
az acr login --name ${prefix}acr

docker tag $prefix ${prefix}acr.azurecr.io/$prefix

docker push ${prefix}acr.azurecr.io/$prefix

Azure 上に Functions アプリを作成

Docker コンテナー版の Functions は B1 以上か、従量課金のプレミアムプランが必要です。

bash
az storage account create \
  --name ${prefix}stor \
  --resource-group ${prefix}-rg \
  --sku Standard_LRS

az appservice plan create \
  --name ${prefix}-plan \
  --resource-group ${prefix}-rg \
  --sku B1 \
  --is-linux

az functionapp create \
  --name ${prefix} \
  --resource-group ${prefix}-rg \
  --plan ${prefix}-plan \
  --runtime custom \
  --functions-version 4 \
  --storage-account ${prefix}stor \
  --https-only \
  --os-type Linux \
  --deployment-container-image-name ${prefix}acr.azurecr.io/${prefix} \
  --docker-registry-server-user ${prefix}acr \
  --docker-registry-server-password $(az acr credential show \
  --resource-group ${prefix}-rg \
  --name ${prefix}acr \
  --query "passwords[0].value" \
  --output tsv)

動作確認

bash
$ curl https://$prefix.azurewebsites.net/api/http
This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.

後片付け

bash
az group delete \
  --name ${prefix}-rg \
  --yes

参考

https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-create-container-registry?tabs=acr%2Cbash&pivots=programming-language-csharp

https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-how-to-custom-container?tabs=core-tools%2Cacr%2Cazure-cli2%2Cazure-cli&pivots=azure-functions

https://github.com/Azure/azure-functions-docker

Discussion