😀
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
参考
Discussion