#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>)