Azure Application Gateway

Shallow Diveというか適当にみてみました。

詳しくはしばやん雑記をどうぞ。

 

作り方

Azure PowerShellから New-AzureApplicationGateway を実行します。

New-AzureApplicationGateway -Name BuchiAppGW -VnetName "Group 4thSubRG TESTVNET" -Subnets @("SUBNET1") -GatewaySize Small

インスタンスサイズはSmall/Medium/Largeから今のところ選択できます。また必ずVNETとそのSubnetを指定する必要があります。
※Subnetは複数指定できるようになっていますが、現状複数指定するとエラーになります。

> New-AzureApplicationGateway -Name BuchiAppGW -VnetName "Group 4thSubRG TESTVNET" -Subnets @("SUBNET1","SUBNET2","SUBNET3","SUBNET4")

New-AzureApplicationGateway : BadRequest: Only one subnet can be provided in the subnet list
At line:1 char:1
+ New-AzureApplicationGateway -Name BuchiAppGW -VnetName "Group 4thSubRG TESTVNET" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [New-AzureApplicationGateway], CloudException
    + FullyQualifiedErrorId : Microsoft.WindowsAzure.Commands.ServiceManagement.Network.ApplicationGateway.NewApplic
   ationGatewayCommand

作成後、振り先など設定を記述したXMLを作って Set-AzureApplicationGatewayConfigを実行します。

Set-AzureApplicationGatewayConfig -Name BuchiAppGW -ConfigFile test.xml


Name       HTTP Status Code     Operation ID                             Error
----       ----------------     ------------                             -----
Successful OK                   0797a28a-16fa-b6d1-9f68-50dc96f26a99

XMLはこんな感じです。(コピペ)

<?xml version="1.0" encoding="utf-8"?>
<ApplicationGatewayConfiguration xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/windowsazure">
    <FrontendPorts>
        <FrontendPort>
            <Name>FrontendPort1</Name>
            <Port>80</Port>
        </FrontendPort>
    </FrontendPorts>
    <BackendAddressPools>
        <BackendAddressPool>
            <Name>BackendPool1</Name>
            <IPAddresses>
                <IPAddress>10.0.0.1</IPAddress>
                <IPAddress>10.0.0.2</IPAddress>
            </IPAddresses>
        </BackendAddressPool>
    </BackendAddressPools>
    <BackendHttpSettingsList>
        <BackendHttpSettings>
            <Name>BackendSetting1</Name>
            <Port>80</Port>
            <Protocol>Http</Protocol>
            <CookieBasedAffinity>Enabled</CookieBasedAffinity>
        </BackendHttpSettings>
    </BackendHttpSettingsList>
    <HttpListeners>
        <HttpListener>
            <Name>HTTPListener1</Name>
            <FrontendPort>FrontendPort1</FrontendPort>
            <Protocol>Http</Protocol>
        </HttpListener>
    </HttpListeners>
    <HttpLoadBalancingRules>
        <HttpLoadBalancingRule>
            <Name>HttpLBRule1</Name>
            <Type>basic</Type>
            <BackendHttpSettings>BackendSetting1</BackendHttpSettings>
            <Listener>HTTPListener1</Listener>
            <BackendAddressPool>BackendPool1</BackendAddressPool>
        </HttpLoadBalancingRule>
    </HttpLoadBalancingRules>
</ApplicationGatewayConfiguration>

FrontendPort … Application Gatewayの外側のポートの定義です。このポートにきた通信をBackendPoolに流します
BackendAddressPool … 振り先のIPアドレス定義です。同じVNETのSubnetかパブリックのIPアドレスやVIPを指定します
BackendHttpSettingsList … 振り先の設定(ポート、プロトコル、CookieベースのAffinityのOn/Off)
HttpListener … 外側の設定。protocolはケースセンシティブでhttpかhttpsです。
HttpLoadBalancingRule … ARR的な挙動を決めます。定義したフロントエンドやバックエンドの定義を指定します。またTypeは負荷分散の方法を指定しますが現状「basic」(ラウンドロビン)のみのようです。

状態などはGet-AzureApplicationGatewayで参照できます。

>Get-AzureApplicationGateway -Name BuchiAppGW


Name          : BuchiAppGW
Description   :
VnetName      : Group 4thSubRG TESTVNET
Subnets       : {SUBNET1}
InstanceCount : 2
GatewaySize   : Small
State         : Stopped
VirtualIPs    : {}
DnsName       :

後は Start-ApplicationGateway で起動します。

Start-AzureApplicationGateway -Name BuchiAppGW

Name       HTTP Status Code     Operation ID                             Error
----       ----------------     ------------                             -----
Successful OK                   9018a5e7-78b0-b7b1-bb2b-f6558a646e6f

※ 今のところ結構時間(15分とか?)かかります。

起動後はStateがRunningになりグローバルのIPアドレスやDNS名が振られます。

Get-AzureApplicationGateway


Name          : BuchiAppGW
Description   :
VnetName      : Group 4thSubRG TESTVNET
Subnets       : {SUBNET1}
InstanceCount : 2
GatewaySize   : Small
State         : Running
VirtualIPs    : {104.214.139.177}
DnsName       : appgw-e35180f9-c14b-4d5c-9292-37498a21b3c0.cloudapp.net

ちなみにVNET側の一覧には表示されません。

image

また同じVNETからpingは通るしRDPも開いてる様子ですが当然ID/Passわからないので接続できません。

image

あとはVIPやDNS名を指定してDNSに登録したりすればOKですね。

止め方

Stop-AzureApplicationGatewayを使用します。止めるとVIPやDNS名が解放されます。完全に削除するにはRemove-AzureApplicationGatewayを使用します。

注意点

  • 現状、参加させることができるSubnetは1つ
  • 仮想ネットワークはv1(Azureポータルなどから作れる仮想ネットワークv2は不可)
  • ARMでも管理できません
  • 使われているのはARR2.5なのでWebSocket不可

SSL接続用の証明書

Add-AzureApplicationGatewaySslCertificate を使ってPFXファイルをアップロードします。簡単ですね。

参考

Azure Update (2015.06.25)

こまごまUpdateされてたのを含めていろいろです。ただのリンク集になりつつある今日この頃です。つら。

Azure Application Gateway (GA)

平たく言うとManaged ARR(2.5)です。L7です。負荷分散だけなら標準のLoadBalancerでもいいのですけどSSLオフローディングなど可能です。

しばやん先生がすでに触られてたのでそちらもどうぞ。

現状ラウンドロビンしかルール設定できなそうだったり、ARR2.5なのでWebSocket未対応だったりしますがSSLオフローディングできるので証明書の管理を集約できるのと、VMv2と合わせて柔軟な構成ができるのはうれしいですね。ARR3.0にしてくれーっていうのは一応Feedback済みです。

Azure Key Vault (GA)

Azure Key VaultがGAしました。

なお現状日本リージョンは未対応です。

Azure Storageでクライアントサイドでの暗号化(Preview)などにも使えるので注目です。

Azure AD Connect (GA) / Azure AD Connect Health (GA)

Azure AD ConenctとAzure AD Connect HealthがGAしました。

Azure AD ConnectはオンプレのADとAzure ADを同期させるためのサービスというかツールです。またADFSの簡単構成などもできるのと、将来的にはオンプレAD以外のIDストアとの同期もできそうです。

Azure AD Connect HealthはADFSを使ったフェデレーション認証時にADFSの各種モニタリングや電子メールによるアラートなどが可能なAzure側のサービスです。(Azureポータルから追加できます)

Azure ADがらみでいえばGraph APIもVer1.6がリリースされてるのでそちらも参考に。

Azure Redis Cache Update

Redis Cacheの機能がよくなりました。

Scale (Preview)ということで、動的にスケールアップすることができるようになりました。注意点としてはBasicとStandard間での変更は無理なのと、サイズダウン(スケールダウン)はできない点です。(このような場合は再作成しろという感じ)
※まぁそうでしょう

他にはキー・スペース通知がサポートされたりMaxmemoryの予約(非キャッシュ操作のための予約領域の指定)ができるようになったりです。またAzureポータルで使用量などもろもろの指標を見ることができるようになりました。

あとはASP.NET Session & Output Cache provider for RedisがOSSになったりしています。

Azure Billing API (Public Preview)

Azureの使用量や料金表に関するREST APIが追加されました。(ARMベースです)

EAもサポートしてるみたいです。使用量には金額は無いので、料金表と紐づけて金額を出す感じです。(メーターIDでそれぞれに対してレートを引っ張ってこれます)

Cloudyn と Cloud Cruister がすでにグラフィカルに管理することができるソリューションを出してるみたいですね。単純なREST APIなのでPower BIと連携させたりいろいろ面白そうです。一応自分でもExcelでとれるアプリは作ってはみたものの。

まぁ興味があればご連絡ください。

Docker周り

DockerConでMark Russinovichが登壇したりと、今やDocker支援してる第一人者的な位置づけになったMicrosoftですがDockerConでの発表に合わせていろいろUpdateがありました。

まずはAzureポータル上に「Container Apps」というのが増えました。あらかじめ用意されたDockerコンテナを簡単にデプロイしてVMv2を立ち上げることができます。

image

※なおイメージが無いのかわかりませんが作成できるリージョンはまだ限られている模様です。

image

またCIを実現するためにVisual Studio OnlineでDocker Composeを使ったコンテナの展開なども可能になったようです。(Dockerイメージのプライベートリポジトリとして使える感じかな)

というようにDockerに関する機能が増えましたが併せてVisual Studio Codeを使ってインテリセンスきかせながらDocker Composeファイルを編集したりすることもできるようになっています。

Azure Backup の利用可能地域が増えました

増えました。

Australia EastでPremium StorageがGA

ちなみにJapan Eastはまだです(Japan WestはOK)

Azure SQL Data Warehouse (Limited Public Preview)

規模があれなのか限定的なパブリックプレビューが始まりました。

ムッシュ先生にいろいろ教えてもらいたいところです。

SQL Database Elastic Database Poolの最小サイズをアップデート

最小eDTUが200だったのを100 eDTUに引き下げです。より使い始めるのが楽になったかな?

Application Insights周り

Windowsアプリケーション用のSDK 1.0.0がリリースされました。

ASP.NET/JavaなWebアプリケーション以外にもカミングスーンとしてiOS/Mac OS X/Android/PHP/Python/Ruby/node.jsなども予定されています。

またApplication InsightsのチャートやテーブルのデータをAzureポータル上からExcelにエクスポートできるようになりました。

Azure  Service Fabric周り

ドキュメントが充実しだしたり、先が楽しみです。

その他のUpdateなど

MADOSMA Q501WH

数年ぶりに日本市場で手に入るという噂のWindows Phone、MADOSMA Q501WH(一部の人はQ501BKみたいですね☆)ですが所感でも。

※特に良くも悪くも言ってなくて単なる感想なので深く考えないように。

  • 本体
    • 軽い、薄い
    • Lumia 820やLumia 925と比べて縦にちょっと大きい。薄い。軽い。Lumia 820が重すぎな気もする
    • カバーは着脱しやすい。無理やり感がない。
    • Qiに対応してないのが残念
    • バッテリーは交換可能なので何かあったときにうれしい(と思う)
    • 充電中は右上付近が赤色にちょっと光る
    • 音量↑↓ボタンの中間の反対側に電源ボタンがあるため持ち手によっては音量も操作してしまう・・・
    • 若干電源ボタン押しにくい
    • 購入時にすでに貼られているスクリーンフィルムは結構指紋つく
    • microSDついてくる。うれしい。なおSIMスロット含めて留め金具壊さないように(水平にスライドさせてロック解除しましょう)
    • あんまり発熱しない気がする(充電中もあんまり暖かくならない)
    • 連続待ち受け時間は公称値460時間ですがmicroSD付けてる場合、どのぐらいになるのか不明。
    • 無線LANはIEEE 802.11 b/g/n 対応ということなので注意
    • DoCoMoのSIMは普通に使えます。APNの一覧でてきて選ぶだけなので簡単。なお違うの選ぶともちろんつながりません
    • 机にどんと置いたとき(と置いてる時の水平移動時)に背面カメラ傷つけそうでこわい
    • 3万円弱で(自分は)十分実用に足るので満足。
  • Windows Phone 8.1
    • タイルは正方形の大きめのやつが横に3列
    • glance screenがない
    • Internet Shareingはできる(SIMによるぽいですけど?)
    • スワイプというかスクロールというか、ワンテンポ遅れて慣性ぽくついてくる(もうちょっとシビアに追従してくれたほうが操作しやすいんだけどな)
    • Pivotとかなアプリで横スワイプする量が大きめなのでスワイプしたつもりでも戻っちゃう(慣れの問題かもしれない)※でももうちょっとスパッと操作できるといいなぁ
    • なんかUpdate 2にすると設定がカテゴライズされる
    • project my screenでMicrosoft Wireless Display Adapter等に画面出力できます。
      WP_20150619_15_52_33_Pro
      ※本体映してないから証拠にはならんけど。
    • なんかのひょうしに画面が250%ぐらいに拡大されて再起動しないと治らなかったんですがなんでしょうか。
      • → 2本指ダブルタップでZoomされるようです。設定のeasy of accessでオフれます(screen magnifierとかいうやつ)
    • 全体的に音量が小さい気がする
    • IEのブックマークに「マウスコンピューター」が追加されます。
  • アプリ
    • 解像度大きめなのでアプリによってはフォント小さく感じるかも -> 設定でズームいじれという話か
  • その他
    • キャリアメールなんて最初から無視

何にせよ、よかったよかった。(個人的な利用方法については最低限問題ないのでこのまま長い間使えるとうれしいですね)

ざっと思ったところはこんな感じ。

関西でAzure MLハンズオン勉強会しました

6月13日(土)にMicrosoft関西支店のセミナールームをお借りしてAzure MLハンズオン勉強会を実施しました。
なおハンズオンそのものはMicrosoftの大田さんがデリバリしました。

なお自分はいろんな資料あつめて最近(だいたい//build/,Igniteあたり)のAzure Updateを話しました。

続きを読む

Azure Resource Managerのテンプレート作成方法

Azure Resource Manager(ARM)を使った管理はAzureポータルなどを使うことで透過的に操作できますが、テンプレート作成に必要な情報(JSONの記述内容など)を集めようとするとなかなか難しいところがあります。現状、そういった場合に簡単なのはARM Explorerを利用する方法です。

このサイトを使うと全リソースをJSONで見ることができます。(モードをReadWriteにすると編集も可能)
image

こういったツールを使ってリソースを眺めてJSON書いていくことは可能なのですが、やはりここはツールのサポートが欲しいところです。というわけで本題ですが、Visual Studio 2013/2015RCとAzure SDK 2.6を使うとそのあたりが簡単ですよ、というお話です。

Visual StudioによるARMサポート

Azure  SDK 2.6 for Visual Studioをインストールすると、Visual Studioを使ってARMのテンプレート作成・編集やデプロイが簡単に行えるようになります。

新規プロジェクト作成でARMのテンプレートがあるのでまずは選びましょう。

image

選択後、基本となるテンプレートを選ぶことができます。

image

Virtual Machinesもあるのでうれしいですね(?)

とりあえずWeb appで作ってみましょう。

image

ソリューションにはデプロイ用のPowerShellスクリプト、それからテンプレートのJSON(とパラメーター用のJSON)、AzCopyが含まれます。

※実際にデプロイするにはAzure PowerShellが必要になるので最新版入れておきましょう。

結局JSONを手書き、、、と思いましたか?いいえ、そこはVisual Studioの補助が効きます。

image

JSONスキーマがあるのでKeyと値候補など入力補完できます。これだけ?いいえ。テンプレートの.json開いて「表示」-「その他のウィンドウ」-「JSON アウトライン」を表示してみましょう。

image

今設定されているパラメーターやARMのリソースを見ることができます。選択したリソースがハイライトされたりわかりやすいですね。

またJSON アウトラインからリソースを追加することもできます。

image

VM v2にも対応してるので仮想マシンに関連するリソースの追加も簡単ですね。

後はいろいろテンプレートを作り上げてデプロイする場合はプロジェクトのコンテキストメニューから配置を選べばそのままデプロイできます。

image

デプロイダイアログが表示されるので、対象のサブスクリプションやリソースグループを選んで作成したテンプレート(とテンプレートパラメーターファイル)を選びます。

image

パラメーターは個別に設定できるのでいいですね。「配置」ボタンクリックで配置が開始されます。(ウィンドウ閉じないのでよくわからないけど)

image

04:33:43 - ビルドを開始しました。
04:33:43 - プロジェクト "AzureResourceGroup1.deployproj" (StageArtifacts ターゲット):
04:33:43 - プロジェクト "AzureResourceGroup1.deployproj" (ContentFilesProjectOutputGroup ターゲット):
04:33:43 - プロジェクト "AzureResourceGroup1.deployproj" のビルドが終了しました。
04:33:43 - プロジェクト "AzureResourceGroup1.deployproj" のビルドが終了しました。
04:33:43 - ビルドに成功しました。
04:33:43 - 次のパラメーター値がこの配置に使用されます:
04:33:43 -     siteName: xxxxxxxwebsite
04:33:43 -     hostingPlanName: xxxxxxxxtestplan
04:33:43 -     siteLocation: East US
04:33:43 -     sku: Free
04:33:43 -     workerSize: 0
04:33:43 - 次のコマンドで配置 PowerShell スクリプトを起動:
04:33:43 - 'xxxxxx\azureresourcegroup1\azureresourcegroup1\Scripts\Deploy-AzureResourceGroup.ps1' -StorageAccountName '' -ResourceGroupName 'AzureResourceGroup1' -ResourceGroupLocation 'eastus' -TemplateFile 'xxxxx\azureresourcegroup1\azureresourcegroup1\templates\website.json' -TemplateParametersFile 'xxxxxxx\projects\azureresourcegroup1\azureresourcegroup1\templates\website.param.dev.json'
04:33:44 - 
04:33:44 - 
04:33:44 - Accounts            : {[xxxxx@live.jp, Microsoft.Azure.Common.Authentication.Models.AzureAccount]}
04:33:44 - Subscriptions       : {[xxxxxxxxxxxxxxxx, Microsoft.Azure.Common.Authentication.Models.AzureSubscription]}
04:33:44 - DefaultSubscription : Microsoft.Azure.Common.Authentication.Models.AzureSubscription
04:33:44 - Environments        : {[AzureCloud, Microsoft.Azure.Common.Authentication.Models.AzureEnvironment], [AzureChinaCloud, Microsoft.Azure.Common.Authentication.Models.AzureEnvironment]}
04:33:44 - Context             : Microsoft.Azure.Common.Authentication.Models.AzureContext
04:33:44 - ProfileLoadErrors   : 
04:33:44 - ProfilePath         : 
04:33:44 - 
04:34:06 - [VERBOSE] 4:34:06 - Created resource group 'AzureResourceGroup1' in location 'eastus'
04:34:07 - [VERBOSE] 4:34:07 - Template is valid.
04:34:10 - [VERBOSE] 4:34:10 - Create template deployment 'website'.
04:34:19 - [VERBOSE] 4:34:19 - Resource Microsoft.Web/serverfarms 'xxxxxtestplan' provisioning status is succeeded
04:34:22 - [VERBOSE] 4:34:22 - Resource Microsoft.Insights/alertrules 'CPUHigh buchizotestplan' provisioning status is succeeded
04:34:22 - [VERBOSE] 4:34:22 - Resource Microsoft.Insights/alertrules 'LongHttpQueue buchizotestplan' provisioning status is succeeded
04:34:31 - [VERBOSE] 4:34:31 - Resource Microsoft.Web/sites 'buchizotestwebsite' provisioning status is succeeded
04:34:31 - [VERBOSE] 4:34:31 - Resource Microsoft.Insights/autoscalesettings 'buchizotestplan-AzureResourceGroup1' provisioning status is succeeded
04:34:35 - [VERBOSE] 4:34:35 - Resource Microsoft.Insights/alertrules 'ServerErrors buchizotestwebsite' provisioning status is succeeded
04:34:41 - [VERBOSE] 4:34:41 - Resource Microsoft.Insights/alertrules 'ForbiddenRequests buchizotestwebsite' provisioning status is succeeded
04:34:41 - [VERBOSE] 4:34:41 - Resource Microsoft.Insights/components 'buchizotestwebsite' provisioning status is succeeded
04:34:50 - ResourceGroupName : AzureResourceGroup1
04:34:50 - Location          : eastus
04:34:50 - Resources         : {CPUHigh xxxxxxtestplan, ForbiddenRequests xtxxxestwebsite, LongHttpQueue xxxxxxtestplan, ServerErrors xxxxtestwebsite...}
04:34:50 - ResourcesTable    : 
04:34:50 -                     Name                                  Type                                  Location 
04:34:50 -                     ====================================  ====================================  =========
04:34:50 -                     CPUHigh xxxxtestplan               Microsoft.Insights/alertrules         eastus   
04:34:50 -                     ForbiddenRequests xxxxtestwebsite  Microsoft.Insights/alertrules         eastus   
04:34:50 -                     LongHttpQueue xxxxtestplan         Microsoft.Insights/alertrules         eastus   
04:34:50 -                     ServerErrors xxxxtestwebsite       Microsoft.Insights/alertrules         eastus   
04:34:50 -                     xxxtestplan-AzureResourceGroup1   Microsoft.Insights/autoscalesettings  eastus   
04:34:50 -                     xxxxtestwebsite                    Microsoft.Insights/components         centralus
04:34:50 -                     xxxxtestplan                       Microsoft.Web/serverFarms             eastus   
04:34:50 -                     xxxxtestwebsite                    Microsoft.Web/sites                   eastus   
04:34:50 -                     
04:34:50 - ProvisioningState : Succeeded
04:34:50 - Permissions       : {Microsoft.Azure.Commands.Resources.Models.Authorization.PSPermission}
04:34:50 - PermissionsTable  : 
04:34:50 -                     Actions  NotActions
04:34:50 -                     =======  ==========
04:34:50 -                     *                  
04:34:50 -                     
04:34:50 - Tags              : {}
04:34:50 - TagsTable         : 
04:34:50 - ResourceId        : /subscriptions/xxxxxxxxxxxxxxxx/resourceGroups/AzureResourceGroup1
04:34:50 - 
04:34:50 - 
04:34:50 - 
04:34:50 - 
04:34:50 - テンプレート 'xxxxxxxxx\projects\azureresourcegroup1\azureresourcegroup1\templates\website.json' をリソース グループ 'AzureResourceGroup1' に正常に配置しました。

これだけです。実際にポータルでみると、指定した通り出来上がっています。

image

まとめ

というわけでVisual Studioなどのツールを使って快適ARM生活を送ってくださいませ。