11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Microsoft AzureAdvent Calendar 2017

Day 8

LinuxとDockerで入門するAzureのサーバレス

Last updated at Posted at 2017-12-07

Azure Function on Linux and Docker

MS AzureのサーバレスであるAzure FunctionにLinuxとDockerサポートが追加されました。
従来のAzure FunctionはWindowsOSベースで動作していたのですが、これにプレビューでLinuxが追加され、さらにDockerイメージをデプロイすることができるようになりました。
https://blogs.msdn.microsoft.com/appserviceteam/2017/11/15/functions-on-linux-preview/
https://blog.wille-zone.de/post/run-azure-functions-in-docker/

Azure Function on Linux

Linux版Azure Functionの使い始め方は簡単で、ポータルからデプロイできます。
以下のようにLinux(preview)を選択すればAzure FunctionがLinuxで動作します。
まだWindows版ほど機能が豊富ではありませんが(Pythonがない・・・?)、最近のMicrosoftはLinux大好きっぽいので、そのうち拡充されていくでしょう。
C#やJavascriptは動作します。

0.PNG

CLIからAzure Functionを起動する方法はブログの方法で可能です。
az cliを使うので、ここからインストールします。
https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest

Azure CLIのインストールが面倒な場合は、Azureポータル上でBashを起動することもできます。
5.PNG

以下のようなコマンドでAzure Function Linuxを起動できます。
(パラメータは適宜変えてください)

# Create a Resource Group
az group create -n rglinuxdocker -l "South Central US"
# Create a Linux App Service Plan (use S2 or S3 as the sku value for larger VMs)
az appservice plan create -n rgplan -g rglinuxdocker --is-linux -l "South Central US" --sku S1 --number-of-workers 1
# Create a storage account
az storage account create -n rgdocstorage --location "South Central US" --resource-group rglinuxdocker --sku Standard_LRS
# Create a Linux Function App
az functionapp create -n rgfuncapp -g rglinuxdocker -p rgplan -s rgdocstorage
# Create a Linux Function App pointing to a specific container image
az functionapp create -n rgfuncapp -g rglinuxdocker -p rgplan -i microsoft/azure-functions-runtime:2.0.0-jessie -s rgdocstorage

8.PNG

10.PNG

もちろんKUDUも起動していますので、以下にブラウザでアクセスすることも可能です。
https://rgfuncapp.scm.azurewebsites.net

1.PNG

Linux上のC#はmonoのようです。

2.PNG

KUDUでBashを開いてOSを確認すると、どうもUbuntuのようです。

3.PNG

sudo権限はなく、apt-getもできませんでした。

12.PNG

Azure Function on Docker

さらに自分のDockerイメージをAzure Functionにデプロイすることができるようになりました。
Azureで用意されているAzure function runtimeのDockerイメージを利用して、自分のカスタムDockerイメージを作ることが可能です。
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-create-function-linux-custom-image

もろもろはGithubでサンプルが公開されているので、まずはこれをクローンして使うのが良いと思います。

git clone https://github.com/Azure-Samples/functions-linux-custom-image.git --config core.autocrlf=input
cd functions-linux-custom-image

19.PNG

GithubにはDockerfileも含まれています。
中身はこんな感じです。

FROM microsoft/azure-functions-runtime:v2.0.0-beta1
ENV AzureWebJobsScriptRoot=/home/site/wwwroot
COPY . /home/site/wwwroot

ひとまずこれをビルドして使ってみましょう。

docker build -t myazfunc:v1.0.0 .
docker run -it -p 8080:80 myazfunc:v1.0.0

18.PNG

ローカルでdocker runするとこのように起動し、ログが出力されます。

21.PNG

8080ポートで公開されるので、ブラウザからアクセスしてみるとMicrosoftっぽいデザインのサイトが表示されます。
http://< ip address >:8080

17.PNG

末尾にAPIも同梱されているので、/api/HttpTriggerJS1?name=worldを追加してアクセスしてみます。
http://< ip address >:8080/api/HttpTriggerJS1?name=world

22.PNG

これでDockerコンテナが無事稼働していることが確認できます。
続いてAzure Functionで起動できるよう、カスタムDockerイメージをDockerHubに登録します。

docker login
docker tag myazfunc:v1.0.0 <yourrepo>/myazfunc
docker push <yourrepo>/myazfunc

Azure FunctionにDockerコンテナで起動する際は、Azure CLIからDockerHubのDockerイメージを指定し、Azure Functionにデプロイするようです。
コマンドは以下のようになります。

az functionapp create --name myrgdocker --storage-account  rgdocstorage  --resource-group rglinuxdocker --plan rgplan --deployment-container-image-name <yourrepo>/myazfunc

storageConnectionString=$(az storage account show-connection-string \
--resource-group rglinuxdocker --name rgdocstorage \
--query connectionString --output tsv)

az functionapp config appsettings set --name myrgdocker \
--resource-group rglinuxdocker \
--settings AzureWebJobsDashboard=$storageConnectionString \
AzureWebJobsStorage=$storageConnectionString

25.PNG

これで先程ローカルで起動したのと同じDockerイメージがAzure Function上で起動します。
以下URLにブラウザからアクセスすることでデフォルトサイトを表示することができます。
https://myrgdocker.azurewebsites.net/

32.PNG

APIにHTTP GETも可能です。
https://myrgdocker.azurewebsites.net/api/HttpTriggerJS1?name=world

31.PNG

もちろんKUDUも起動できます。
https://myrgdocker.scm.azurewebsites.net

27.PNG

注:今回つくった環境は削除済みです。アクセスしても何もありません。

11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?