- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2020-07-27T23:37:03+00:00","","")
#author("2020-07-28T04:56:01+00:00","","")
#mynavi(Azureメモ)
#setlinebreak(on);
#TODO
* 概要 [#q629b743]
#html(<div class="pl10">)
VMにアクセスする Azure Functions の開発手順を記載する。
#html(</div>)
* 目次 [#uf1ea711]
#contents
- 関連
-- [[Azureメモ]]
- 参考
-- [[Premium プランの関数アプリを作成する:https://docs.microsoft.com/ja-jp/azure/azure-functions/scripts/functions-cli-create-premium-plan]]
-- [[Azure Functions の Premium プラン:https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-premium-plan]]
-- [[サンプルスクリプト:https://docs.microsoft.com/ja-jp/azure/azure-functions/scripts/functions-cli-create-premium-plan#sample-script]]
* サンプル関数の仕様 [#i6e368a7]
#html(<div class="pl10">)
- Blobストレージへのファイルアップロードをトリガーに起動する関数とする。
- アップロードするファイルは時系列データのCSVファイルとする。
- 関数はファイルの内容をそのままVMで稼働する InfluxDB に登録する。
#html(</div>)
* 必要なリソースの作成 [#kef97978]
#html(<div class="pl10">)
#myterm2(){{
# ストレージアカウント名は世界で唯一である必要がある
SUFFIX=xxxxxxxx
# リージョン
region=japanwest
# リソースグループ名
# ( az group delete --name $resourceGroup で一括削除可能 )
resourceGroup=myResourceGroup$SUFFIX
# ストレージアカウント名
storageName=mystorageaccount$SUFFIX
storageSku=Standard_LRS
# 関数アプリ名
functionAppName=myFuncapp$SUFFIX
# 使用するFunctionsのバージョン
functionsVersion=2
# 関数アプリのプラン名
# ※VMへのアクセスにはVNet統合を使用するが、この機能はプレミアムプランでないと提供されない。
funcPlanName=mypremiumplan$SUFFIX
funcPlanSku=EP1
# Storageコンテナ名
storageContainer=mystrcontainer$SUFFIX
# 仮想マシン名
vmName=MyVM$SUFFIX
vmImage=UbuntuLTS
# リソースグループの作成
az group create \
--name $resourceGroup \
--location $region
# ストレージアカウントの作成
az storage account create \
--name $storageName \
--location $region \
--resource-group $resourceGroup \
--sku $storageSku
# プレミアムプランの作成
az functionapp plan create \
--name $funcPlanName \
--resource-group $resourceGroup \
--location $region \
--sku $funcPlanSku
# 関数アプリの作成
az functionapp create \
--name $functionAppName \
--storage-account $storageName \
--plan $funcPlanName \
--resource-group $resourceGroup \
--functions-version $functionsVersion
# Storageコンテナの作成
az storage container create \
--name $storageContainer \
--resource-group $resourceGroup \
--account-name $storageName
# 仮想マシンの作成
az vm create \
--resource-group $resourceGroup \
--name $vmName \
--image $vmImage \
--generate-ssh-keys \
--ssh-dest-key-path `pwd`/ \
--output json \
--verbose
# InfluxDB用のポートを開放しておく
az vm open-port --resource-group $resourceGroup --name $vmName --port 8086
}}
#TODO: Publicアクセスは踏み台サーバのみ許可する
#html(</div>)
* InfluxDBインストール [#x5d23908]
#html(<div class="pl10">)
VM上にInfluxDBをインストールする。
ここでは docker を使用する為、先に docker からインストールを行う。
https://docs.docker.com/engine/install/ubuntu/
VM作成時に生成されたSSH鍵を使用してVMに接続後、以下の作業を行う。
** dockerインストール [#k8bf0c40]
#html(<div class="pl10">)
#myterm2(){{
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
}}
#html(</div>)
** docker-compose インストール [#c275c195]
#html(<div class="pl10">)
https://docs.docker.com/compose/install/
#myterm2(){{
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
}}
#html(</div>)
** InfluxDBインストール [#u9a56dd9]
#html(<div class="pl10">)
influxdb.conf
#mycode2(){{
[meta]
dir = "/var/lib/influxdb/meta"
[data]
dir = "/var/lib/influxdb/data"
engine = "tsm1"
wal-dir = "/var/lib/influxdb/wal"
[http]
enabled = true
flux-enabled = true
}}
docker-compose.yml
#mycode2(){{
version: "3"
services:
influxdb:
image: influxdb:1.8
hostname: influxdb_sample
container_name: influxdb_sample
volumes:
- ./influxdb:/var/lib/influxdb
- ./influxdb.conf:/etc/influxdb/influxdb.conf
ports:
- 8086:8086
}}
起動
#myterm2(){{
sudo docker-compose up -d
}}
サンプルDB/ユーザ作成
#myterm2(){{
docker exec -it influxdb_for_test bash
# influx
> create database sampledb
> create user sample with password 'sample' WITH ALL PRIVILEGES
}}
#html(</div>)
#html(</div>)
* 関数アプリの作成 [#x09d7bdd]
#html(<div class="pl10">)
#TODO
#html(</div>)
* 関数アプリのデプロイ [#v8360ab2]
#html(<div class="pl10">)
#TODO
#myterm2(){{
az functionapp deployment source config-zip -g リソースグループ -n 関数名 --src ZIPファイルPATH
}}
#html(</div>)