azure-functions-cli installと実行を試してみた

azure-functions-cliとはなんぞや?となるかもしれませんが、
Azure FunctionsがGAされたアナウンスの中でツールについての話がありました。

announcing-general-availability-of-azure-functions

We now have support for creating, running, and debugging Functions locally on Windows, with the beta Azure Functions CLI. For JavaScript Functions on NodeJS, the CLI integrates with Visual Studio Code and sets up debug targets automatically. While the CLI currently only works on Windows, we’re working on support on Mac and Linux.

ということで、NodeJSで動くものですよと。
ひとまずWindowsは動くからと。
私自身NodeJSをほとんど扱ったことがありませんので、何か変なところがあれば教えてください。
というわけで、まずは入れてみました。

1.NodeJSのインストール

nodejs.org からダウンロード。ひとまずv6.9.1 LTSを入れた。
特に何かあるわけでもなく。

2.npmでインストール

npm i -g azure-functions-cli

しばらくまって、完了。

 

3.CLI funcコマンド

まずは、公式に通り「func」「azfun」「azure-function」
のうち短いのでfunc

>func
Azure Functions Cli (1.0.0-beta.5)
Function Runtime Version: 1.0.0.0
Usage: func [context] [context] <action> [-/--options]

Contexts:
azure        For Azure login and working with Function Apps on Azure
function     For local function settings and actions
functionapp  For local function app settings and actions
host         For local Functions host settings and actions
settings     For local settings for your Functions host

Actions:
init    Create a new Function App in the current folder. Initializes git repo. Aliases: init, create
run     Run a function directly

1.0.0-beta.5というバージョン情報、それからこの先に渡すコンテキストの情報が出てきました。

4.作る

最初にフォルダーを作り、カレントディレクトリにして

>func init
Writing .gitignore
Writing host.json
Writing appsettings.json
Initialized empty Git repository in C:/******/Source/samples/.git/

という感じで、gitリポジトリとして初期化され、
host.jsonとappsettings.jsonができてます。

次にfunctionを作ります。

>func function create
     _-----_
    |       |    ╭──────────────────────────╮
    |--(o)--|    │   Welcome to the Azure   │
   `---------´   │   Functions generator!   │
    ( _´U`_ )    ╰──────────────────────────╯
    /___A___\   /
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y `

? Select an option...
  1) List all templates
  2) List templates by language
  3) List templates by type
  Answer:

という形でyeomanが起動しました。

1)ですべてのテンプレート
2)で開発言語別のテンプレート
3)で種別のテンプレート
のようです。

2を選ぶと

? Select an option... List templates by language
There are 8 languages available
? Select a language...
  1) Batch
  2) C#
  3) F#
  4) JavaScript
  5) Python
  6) Php
  7) PowerShell
  8) Bash
  Answer:

こんな感じに、4) JavaScriptを選びました。

? Select from one of the available templates...
  FaceLocator-JavaScript
  GenericWebHook-JavaScript
  GitHubCommenter-JavaScript
> GitHubWebHook-JavaScript
  HttpGET(CRUD)-JavaScript
  HttpPOST(CRUD)-JavaScript
  HttpTrigger-JavaScript
(Move up and down to reveal more choices)

ひとまず GitHubWebHookを選ぶ

? Enter a name for your function... (MyAzureFunction)

名前を聞かれるので、とりあえず「GitHubWebHookSample」と入れた
そうすると「GitHubWebHookSample」というディレクトリができてました。
中はこんな感じ

function.json
index.js
sample.dat

5.動かす

>func host start

とすると、権限確認のダイアログが出て続けると以下のような状態に

Listening on http://localhost:7071/
Hit CTRL-C to exit...
Reading host configuration file '***\Source\samples\host.json'
Generating 1 job function(s)
Starting Host (HostId=44d3feb53b1b49439bf13fdc57c64832, Version=1.0.0.0, ProcessId=29564, Debug=True)
Found the following functions:
Host.Functions.GitHubWebHookSample

Job host started
Http Function GitHubWebHookSample: http://localhost:7071/api/GitHubWebHookSample
File change of type 'Changed' detected for '***\Source\samples\data\functions\sampledata'
Host configuration has changed. Signaling restart.
Stopping Host
Job host stopped
Reading host configuration file '***\Source\samples\host.json'
Generating 1 job function(s)
Starting Host (HostId=44d3feb53b1b49439bf13fdc57c64832, Version=1.0.0.0, ProcessId=29564, Debug=True)
Found the following functions:
Host.Functions.GitHubWebHookSample

Job host started
Debugger listening on [::]:5858

一度ホストが上がって、ファイルの変更を検出して再び動いているようです。
この後、いろいろいじってみるとそのたびに起動しなおしたりしてました。

vscodeを起動して、デバッグを構成

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach to Process",
            "type": "node",
            "request": "attach",
            "port": 5858
        }
    ]
}

デバッグにアタッチで成功。
ブレークポイントを設定して、
「http://localhost:7071/api/GitHubWebHookSample」にアクセスしてみます

すると・・・

2016-11-26-2

 

 

無事に動きましたとさー
ほっ・・・

Azure Functions を使ってみる

Microsoft Azureのサブスクリプションを持ってる人

https://functions.azure.com/signin

 

ポータルから作る

https://portal.azure.com/#create/Microsoft.FunctionApp

Microsoft Azureのサブスクリプションを持っていない人(1時間限定の無償お試し)

https://functions.azure.com/try

※Microsoftアカウント、Google、 Facebook いずれかのアカウントが必要

 

 

Bot-as-a-Serviceなるものが・・・

どうも、BotFrameworkを用いて、
Functionsで動作するBot as a Serviceなるものが出たようす。

https://azure.microsoft.com/ja-jp/blog/microsoft-azure-announces-industry-s-first-cloud-bot-as-a-service/

合わせて、FunctionsもPreviewが取れてますね。

https://azure.microsoft.com/ja-jp/blog/announcing-general-availability-of-azure-functions/

これは明日が楽しみ!

AppVeyorのデプロイ先にMicrosoft Azure Blob Storageを使ってみたメモ

AppVeyorのドキュメントを眺めていて、デプロイの先としても使える場所に、AzureのStorageがありました。
Deploying to Azure blob storage

というわけで、AzureStorage(Microsoft Azure Storage の概要)に対して
デプロイしてみるメモです。

Microsoft Azure Storage

で、実際に使うとして、Azure Blob Storageっていうものになりますと、
このBlobには、「ホット」「クール」の種類があります。
Azure Blob Storage: ホット ストレージ層とクール ストレージ層
料金の違い)

ざっくりでいうと、クールは普段アクセスしないバックアップなどの用途に
ホットは、頻繁にアクセスする用途にという私の解釈です。
価格でみても、クールは容量単価が安く、
ホットはトラフィック、操作の単価が安くなっているようです。

デプロイするリソースは、頻繁に不特定多数にアクセスされる前提ですので
ホットにしてみようかと思います。

Azure側の準備

まずは、ポータルでBlobStorageを作ります。
+新規 > データ + ストレージ > ストレージ アカウント

名前:適当に入れますが、ホスト名に相当しインターネット上で一意である必要があります
デプロイモデル:リソースマネージャー
アカウントの種類:BLOBストレージ
アクセスレベル:ホット
ほか、お好みで。また、リソースグループは、その作業、やりたいこと、目的に応じて作っておいたほうが後で管理が楽です。(まとめて消すことができるとか)
作成で、しばらく待ちます・・・数十分もかかったことは今のところない

 

出来上がったら、さっそくコンテナ(実際にファイルを格納するもの)を作ります。
名前は適当にアクセスの種類はBlobです。そのほかのものは、今回使えないかと思います。

 

もう一つ、アクセスキーというのを控えておきます。
これは、書き込み削除のアクセスで、必要となる秘密のカギですので、見せないようにします。

どうでもいい余談ですが、これを間違って、公開してしまってひどい目にあうという話もあったりなかったりします。
過去、GitHubにあげてしまったとき、有志の人が機械的(?)にメール連絡してくれました。
(そのときは、サンプルのものでしたので、リポジトリごと削除した。)
もう一つ、キーを再生成するという方法もあります。

というところで、Azure側は準備完了!

AppVeyor側の準備

大きく2つあるように見えました、
プロジェクトごとのデプロイ先として設定するか、
Environmentとして全体に設定するか。

で、今回はEnvironmentとして設定しました。

Provider:Azure Blob Storage
Environment name:お好み
Storage account name:Azure側で作成したアカウント名
Storage access key:控えておいた秘密キーの1または2どちらか
Container name:Azure側で作成したコンテナ名
Folder:今回は何も入れない
Artifacts:デプロイしたい生成物の定義名

ビルド!

ビルドは成功!そしてアップロードされたらしきログがある!

追記(ここでProjects>[project]>Deployments>New Deployment)

Azureのポータル側でも確認

すっきり!これで、最新のpublish生成物を公開できるようになりました。

 

2016/07/23 追記
どうやら、自動にできたつもりが、手動でやったものが残っていただけらしい・・・(確認怠り
ひとまず、手動で
Projects>[project]>Deployments>New Deployment
でアップロードは確認した。

自動化するために必要なこと。
SettingsのDeploymentにEnvironmentsを設定する

Docker Cloud触ってみた(With Micorsoft Azure)

Docker-cloudを触ってみたメモ書き
Nodes、Services、Stacksというコンポーネントに分かれている様子。
Welcomeというチュートリアルがあるので、それに従っていくだけで概ね実行させるまではなんとかなった。

Microsoft AzureをDocker-Cloudで扱えるようにする

まず、Docker-CloudがAzureを制御するための入り口となる証明書をダウンロード。
それを
https://manage.windowsazure.com/
にアクセスして、アップロードしておく。こうすることで、Docker-CloudがAzureの中のリソースを制御できるようになる。そして、対象となるサブスクリプションのIDを取得(わけのわからないGUIDみたいなやつ)。それを、Docker-Cloudに渡してあげるという流れ。

Nodes

Nodesという、Dockerの本体そのものをまず作る。これがServicesを詰め込む居住スペースになる。当然、親(今だとAzureの仮想マシン)のマシンによってその空間は変わるだろうけれども(メモリとかCPUとか)。Azureのサブスクリプションを関連付けておけば、そこから自動的に仮想マシンを立ち上げてくれる。ただしこれはASM(クラシック仮想マシン)となる。データディスクがホストキャッシュなしで接続されていた(ノード用かな?)。また、2ノード以上は、課金が必要な様子。

Services

Servicesは、Nodesに詰め込むコンテナとなるサービスを定義する。これはDockerHubにあるものを使うことができる。自分用のPrivateなものもここで使える。このサービスは、公開ポートなど通常コマンドでやることも定義しておくことができる。

Deploy

定義したサービスを、Node上で動かすことになる。このときにServiceで定義された必要なポートは、Azure上のエンドポイントにも自動的に追加され開放された。また、サービスを変更した場合などは、Redeployすることができる。

 

Stacks

定義したServiceを組み合わせたものとなる様子。一括でデプロイできる様子。チュートリアルのものしか見てないけれども、他のサービスにリンクすることができるっぽい。

メモ

  • Nodeを削除したら、Azure上の仮想マシンも削除された。
  • DockerCloud上からRedeployすると、ポートの開放もやり直してくれる様子。
  • ロードバランスは、それ用のサービスを使うか、DNSを使うか。
  • 複数ノードのデプロイメントストラテジーとか試してみたいけど、課金して怒られるのは嫌なので、ぐっとこらえた。
  • 独自のServiceのリンクをどうやって動的に結ぶか
  • そういえば、DockerのホストOSには入れない。

JAZUG 札幌支部第10回勉強会 ~祝!! きたあず2周年記念勉強会~

無事に終了しましたー

そして、ひさしぶりにBlog更新

今回、登壇がメインで、ほとんどスタッフ業務にかかわらなかった分、いろいろ聞けて良かったー(懇親会参加される方はお金払ってください。というくらいしかしていない。ごめんなさい。ごめんなさい・・・)

今回は、きたあず2名、福岡から2名、SendGridの方が1名のセッションでした。

1.BaaSとAzureを絡めたお話(仮)

前半はかるたの話で、いつの間にかWebな話に。

2.Webアプリと他のサービスを絡めてみよう!

自分のセッションは、がんばった!!・・・として。Webアプリの話はできたので、よかったけど、時間があればApplicationInsghtsで、PowerBIのダッシュボード表示を説明したかった!!

 

3.Web制作的にWebAppsを活かす使い方

実際に使った話で、黒い画面がコワイ人でも安心して使えるというWebアプリサービス。

非常にわかりやすいセッションでした!そんな視点でAzure見たことなかったので、IaaSとか出したら、大変なことになりそうと。いろいろ考えさせられました。

4.PaaSを使い倒すためにApp Serviceのおさらいしよう

おさらいのあと、API中毒になればいい!と言い残し、気付いたら登壇者はとうじょうのぞみさん(仮)に変身していて、ライブプログラミングのうえ去っていかれました。

5.Azureでサードパーティサービスを活用する。SendGridを例に。

メールサービスの在り方が変わってきてるよねー。から始まり、スパムメールとして扱われてしまった話、AzureのMarketPlaceからでもサービス開始できるよーと。ただしアカウントは公式サイトで作ったものと違うので注意してねーとのこと。さっそく作ってみましたが、まだ何も活用はしてません。API使えるってことで、SchedulerやらWebJobやら、自動処理の結果を返すものとして組み合わせてみたいですね。

発表資料
Twitterのまとめ
余談

ApplicatoinInsightsをPowerBIに出してましたが、結果報告していませんでしたので、ここで。

人気のあった例外は、Null参照の16回!

ログイン者のアクセストップは67回!

・・・みなさんストレスたまってなくて何よりです!

デバイスは、

Windows10、Windows7、Ubuntu、Windows8.1、OSX10.11、なぜか、WindowsPhone10.0、OSX10.10の順でした。

これは、サーバーサイドにいろいろ埋め込めるってのが面白いサービスですねー

 

ちなみに、上は私の独自ダッシュボードですが、PowerBIのテンプレートのApplicationInsghtsで作ると、日ごとに情報を集約してくれるレポートとダッシュボードがありました。こんな感じ。

さいご

次回は未定です。

個人的に少し回数増えてもいいのじゃないかとも思いますが、アンケートの結果も踏まえてまたよりよくしていきたいなぁときっとおそらくスタッフ一同思っているんじゃないかと思います。

それでは!

 

Office365 独自ドメインをAzureDNSで設定したメモ – PowerShell

Office365で外部DNSを利用して、独自のドメインを利用することができると。
ポータルからはまだよく見えてなかったけど存在しているAzureDNSを使って設定したメモをマスクしながらここに残しておきます。
ただ、最近はポータルからも設定できるようになってきましたので、そもそもこれでやるメリットはそこまでないと思う。テンプレート化してというのもあるけど、ARMもあるわけで、メモ程度と考えてください
課金形態は、クエリ単位のものなので、利用者が極端に多い場合は、DNSサーバー使ったほうがいいかもしれない。けど可用性や負荷の面倒から解放されるというの機能も捨てがたいかもしれない。
また、AzureDNSは一つのゾーンで、4つのDNSサーバーを持つ様子。
おそらくは、それぞれの地域でサーバーが存在していると思われる。
(多分、それぞれの地域でIPにResolveすればわかる気がするけど、試してはいない)
最初にDNSゾーンの作成、その後レコードセットと言われるDNSのレコードを登録していきました。PowerShellの参考として考えてください。

[ゾーンの作成と確認]

New-AzureDnsZone -Name [ドメイン名] -ResourceGroupName [リソースグループ名]
Get-AzureDnsRecordSet -ZoneName [ドメイン名] -ResourceGroupName [リソースグループ名]

[レコードセットの作成 – MX]

$rsmx = New-AzureDnsRecordSet -Name "@" -RecordType "MX" -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Ttl 3600
Add-AzureDnsRecordConfig -RecordSet $rsmx -Exchange [mailホスト名].mail.protection.outlook.com -Preference 0
Set-AzureDnsRecordSet -RecordSet $rsmx

[作成済みの場合]
$rsmx = Get-AzureDnsRecordSet -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Name "@" -RecordType "MX"

[レコードセットの作成 – TXT]

$rstxt = New-AzureDnsRecordSet -Name "@" -RecordType "TXT" -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Ttl 3600
Add-AzureDnsRecordConfig -RecordSet $rstxt -Value "v=spf1 include:spf.protection.outlook.com -all"
Set-AzureDnsRecordSet -RecordSet $rstxt

[作成済みの場合]
$rstxt = Get-AzureDnsRecordSet -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Name "@" -RecordType "TXT"

[レコードセットの作成 – CNAME autodiscover]

$rscnameautodiscover = New-AzureDnsRecordSet -Name "autodiscover" -RecordType "CNAME" -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Ttl 3600
Add-AzureDnsRecordConfig -RecordSet $rscnameautodiscover -Cname "autodiscover.outlook.com"
Set-AzureDnsRecordSet -RecordSet $rscnameautodiscover 

[作成済みの場合]
$rscnameautodiscover = Get-AzureDnsRecordSet -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Name "autodiscover" -RecordType "CNAME"

[レコードセットの作成 – CNAME lyncdiscover]

$rscnamelyncdiscover = New-AzureDnsRecordSet -Name "lyncdiscover" -RecordType "CNAME" -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Ttl 3600
Add-AzureDnsRecordConfig -RecordSet $rscnamelyncdiscover -Cname "webdir.online.lync.com"
Set-AzureDnsRecordSet -RecordSet $rscnamelyncdiscover 

[作成済みの場合]
$rscnamelyncdiscover = Get-AzureDnsRecordSet -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Name "lyncdiscover" -RecordType "CNAME"

[レコードセットの作成 – CNAME msoid]

$rscnamemsoid = New-AzureDnsRecordSet -Name "msoid" -RecordType "CNAME" -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Ttl 3600
Add-AzureDnsRecordConfig -RecordSet $rscnamemsoid -Cname "clientconfig.microsoftonline-p.net"
Set-AzureDnsRecordSet -RecordSet $rscnamemsoid 

[作成済みの場合]
$rscnamemsoid = Get-AzureDnsRecordSet -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Name "msoid" -RecordType "CNAME"

[レコードセットの作成 – CNAME sip]

$rscnamesip = New-AzureDnsRecordSet -Name "sip" -RecordType "CNAME" -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Ttl 3600
Add-AzureDnsRecordConfig -RecordSet $rscnamesip -Cname "sipdir.online.lync.com"
Set-AzureDnsRecordSet -RecordSet $rscnamesip 

[作成済みの場合]
$rscnamesip = Get-AzureDnsRecordSet -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Name "sip" -RecordType "CNAME"

[レコードセットの作成 – CNAME enterpriseregistration]

$rscnameenterpriseregistration = New-AzureDnsRecordSet -Name "enterpriseregistration" -RecordType "CNAME" -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Ttl 3600
Add-AzureDnsRecordConfig -RecordSet $rscnameenterpriseregistration -Cname "enterpriseregistration.windows.net"
Set-AzureDnsRecordSet -RecordSet $rscnameenterpriseregistration 

[作成済みの場合]
$rscnameenterpriseregistration = Get-AzureDnsRecordSet -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Name "enterpriseregistration" -RecordType "CNAME"

[レコードセットの作成 – CNAME enterpriseenrollment]

$rscnameenterpriseenrollment = New-AzureDnsRecordSet -Name "enterpriseenrollment" -RecordType "CNAME" -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Ttl 3600
Add-AzureDnsRecordConfig -RecordSet $rscnameenterpriseenrollment -Cname "enterpriseenrollment.manage.microsoft.com"
Set-AzureDnsRecordSet -RecordSet $rscnameenterpriseenrollment 

[作成済みの場合]
$rscnameenterpriseenrollment = Get-AzureDnsRecordSet -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Name "enterpriseenrollment" -RecordType "CNAME"

[レコードセットの作成 – SRV _sipfederationtls._tcp]

$rssrv_sipfederationtls_tcp = New-AzureDnsRecordSet -Name "_sipfederationtls._tcp" -RecordType "SRV" -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Ttl 3600
Add-AzureDnsRecordConfig -RecordSet $rssrv_sipfederationtls_tcp –Priority 100 –Weight 1 –Port 5061 –Target "sipfed.online.lync.com"
Set-AzureDnsRecordSet -RecordSet $rssrv_sipfederationtls_tcp

[作成済みの場合]
$rssrv_sipfederationtls_tcp = Get-AzureDnsRecordSet -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Name "_sip._tls" -RecordType "SRV"

[レコードセットの作成 – SRV _sip._tls]

$rssrv_sip_tls = New-AzureDnsRecordSet -Name "_sip._tls" -RecordType "SRV" -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Ttl 3600
Add-AzureDnsRecordConfig -RecordSet $rssrv_sip_tls –Priority 100 –Weight 1 –Port 443 –Target "sipdir.online.lync.com"
Set-AzureDnsRecordSet -RecordSet $rssrv_sip_tls

[作成済みの場合]
$rssrv_sip_tls = Get-AzureDnsRecordSet -ZoneName "[ドメイン名]" -ResourceGroupName "[リソースグループ名]" -Name "_sip._tls" -RecordType "SRV"

そして、最後に確認!

Get-AzureDnsRecordSet -ZoneName [ドメイン名] -ResourceGroupName [リソースグループ名]

追記 2016/02/17

Azure No1の方がポータルでの設定をまとめていらっしゃいました

Azure DNSの管理(ポータル編)

「第13回 Office365 勉強会 ~ 北の国から2016 ~」に参加させていただきました

こんにちわ!おそくなりましたが、参加報告です。

http://jpo365ug.com/o365-meeting/meeting-13/

セッションの内容は、聞いた人によって受け取り方はさまざまだったんじゃないかと思います。機能の紹介から始まって、運用の話、開発の話と幅広い内容を4セッションで聞かせていただきました。

これは、非常に面白かったです。というのも、MicrosoftAzureは完全にプラットフォームなところですが、Office365はエンドユーザーに向けたサービスというのが一番の理由でしょうか。レイヤーでいうなら、OSとかミドルウェア、プラットフォームまでがAzureですが、Office365は完全な機能(アプリケーション)を提供するサービスです。それもAPI(Application-Plugin Interface)付き。ので、ここに携わる開発者というのはこういうサービスを作りたいという発想だけではなく、今あるものを便利にしようとか、より使い勝手をよくしようとか、活用できるようにしよう。運用からこんなことに困っているとか、営業やら運用からあがる具体的な事柄に対して立ち向かっていくというのが、開発者の一番の役目なのだなぁと感じました。

ディスカッションにおいては、まとめをしゃべる役目を承りましてマイクの電源が入っていない落ちどころからはじまって、話のオチで終わるという落ちてばかりでしたが、笑ってもらえただけありがたいと感じています。

ところで、Office365とAzureの結ぶ点にAzureADという認証を行うサービスがあったりします。Office365の視点だとあまりAzureADは、バックエンドであるため見えてきません。セッションの中でも開発を中心として紹介されていました。オンプレミスのADと連携する機能や、多要素認証・2段階認証(※別途有償だけど)、またはOAuthなどの認証サービス、。そして・・・Azureとの連携もあります。

http://msdn.microsoft.com/ja-jp/library/azure/jj573650.aspx

Azureの視点でみるなら、ここにユーザー・グループを作ってリソース管理にアクセス制御をするということ、またサービス自体の認証に使ってしまうということでWebアプリの認証としてポータルから設定することもできます。AzureAutomation用のアカウントを作ったりとかもありますね。

という具合に切っても切れない結びつきがありますので、ここつないでいったらクラウドの閉ざされたサービスというのももうちょっと面白い展開ができそうな気がしました。

それでは!

Visual Studio Dev Essentials – Azure Credits

とうとう、Visual Studio Dev Essentialsに Azureのクレジットがきたー!という嬉しさでBlog書きます。

Free Visual Studio Dev Essentials Program now includes $300 in Azure credits and Exclusive Xamarin University access

Today we’re pleased to announce two new benefits for Dev Essentials members:

  • $300 in Azure Credits: enjoy $25/month in credits for 12 months to take advantage of Azure services for your apps.). That’s enough to run a D2 Windows Virtual Machine for 95 hours a month, or try out an A3 HDInsight Cluster for 24 hours. These credits can be applied on top of the free options offered by many Azure services. Learn more here

毎月$25で12か月間、合計$300のAzureクレジットを提供する。これはVirtualMachineをD2インスタンス(仮想マシンのスペック)でWindowsを入れた場合は月に95時間使え。または、A3 HDInsightなら24時間使えますよーってみたいなことが書いてるようです。

この特典は、去年のConnect();というイベントで発表された「Visual Studio Dev Essentials」というものの一部で、それ以来Azureのサブスクリプションは「Comming soon」となっていたものでした。VSCodeまたはCommunityを開発環境として、WebサーバーまたはアプリのバックエンドはAzureでだれでも始められる環境がそろったことはすごいと思っています。

日本円で 2,550-のようですね。

 

と喜んでいたのですが、

どうやら

Sign In issues with Visual Studio Team Services – 2/4 – Investigating

現在、サインインに関して問題が発生しているようです。復旧するまでそうかからないと信じていますが、待つしかなさそうです。

 

 

 

復帰しないかなー。わくわく

・・・と何回かチャレンジするといけました。

この画面は、事前にVisual Studio Dev Essentialsの利用開始している状態です。

 

Azure $25 monthly Azure Creditの「Activate」を選びました。

しばらく待ちます・・・

「サービスの管理を開始する」でポータルデビュー!

今月は短いからいきなり28日になってますね。

3000円になってるな・・・まぁ気にしない!

サブスクリプションの購入をお知らせするメールも届いてました。

初期では、使用制限がかかっているので、課金される心配はないです。しかし、使用制限を解除して課金することで、クレジット以上使うこともできそうな感じです。(もちろん、試してない)。無料評価版で、1か月だったものより試しやすいかなぁという気がします。

 

Azure Resource Manager QuickStart Templateを試してみた – Load Balancer with Inbound NAT Rule

こんにちは!今日もテンプレートで遊びます。既出っぽい気がしますがあまり気にしないでいきます。

101-loadbalancer-with-nat-rule

今日はこのテンプレートです。これは受信規則NATを設定したロードバランサー、パブリックIPアドレス、仮想ネットワーク、ネットワークインターフェイスを一式デプロイしてくれました。

ロードバランサー概要

パラメータ

  • DnsNameForLBIP – NAT用のロードバランサーのDNS名(PublicIPに設定されるもの)
  • Location – デプロイするロケーション(Japan EastとかJapan Westとか)
  • AddressPrefix – 仮想ネットワークのaddress空間
  • SubnetPrefix – 仮想ネットワーク内に作成するサブネットマスク
  • PublicIPAddressType – 動的か静的か。試す分にはDNS名を使うとしてどちらでもよいんじゃないかと思います。動的にしても後で静的に変えることはできるようです。逆は一度関連付けを外す必要があるようです。

デプロイされた後のリソースです。

このテンプレートは受信規則NATというものにRDPを登録しています。そしてそのRDPはVirtualNetwork1にあるnetworkInterface1にマッピングされるようになっています。こうすることのメリットは、仮想マシンとPublicIPaddressを切り離すところにあるのではないかと思います。この仕組みは「仮想マシン(クラシック)」のクラウドサービスが提供する機能に似ている。例えば、一つのaddressで、複数のサービスを持たせるけど、規模が小さすぎるのでバックエンドは一つのサーバーにしておいて、後から複数サーバーに分散していくなど。そういう活用もできるんじゃないかと思いました。PublicIPのコストも抑えられるし。

該当するドキュメント

  • 外部トラフィックを特定の VM インスタンスに転送します。

 

見えない部分でわかりづらいので、簡単な図を作ってみました。仮想マシンに接続されるネットワークインターフェイスには、PublicIPがなく、LoadBalancerにのみパブリックIPがある状態です。

灰色の部分はテンプレートに含まれていないもので、上でいってたような私の妄想した領域です。この構成「仮想マシン(クラシック)」のクラウドサービスほぼ同じですね。ただ、ロードバランサーとしての機能がいくつもあるので柔軟性は明らかにこっちのほうが上です。テンプレートではNetworkInterface1がありますが、このままだと何の意味もありません。TemplateをカスタマイズしてVM、LBなどにくっつける前提になっているようですね。

以下は、NAT規則にHTTPSを追加して同じターゲットにしてます。のちにターゲットを増やして分離。または負荷分散へ変更するということもできそうなところです(同期が必要な場合、ダウンタイムは発生すると思いますが)。可用性セットを関連付けて置く必要があるようです。(仮想マシンの可用性管理

 

仮想マシンにPublicIPがなくとも、ポータルからWindowsへリモートデスクトップ接続ができるようです。(ちゃんとLBまで見てる様子)

というところで、以上になります。

それでは!