Get-AzureVMでout of range

なんかAzure PowerShellのGet-AzureVMとかGet-AzureDeploymentとかで得られる応答の一部要素(PersistentVMDowntimeのEndTime)でDateTime.MaxValueなISO8601形式の値(9999-12-31T23:59:59Z)が入ってるようで、こいつを日本みたいなUTCにプラスするタイムゾーン圏内でDateTime.Parseしようとして例外吐いてるみたいです。

> get-azurevm
get-azurevm : The DateTime represented by the string is out of range.
At line:1 char:1
+ get-azurevm
+ ~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-AzureVM], FormatException
    + FullyQualifiedErrorId : Microsoft.WindowsAzure.Commands.ServiceManagement.IaaS.GetAzureVMCommand

仮想マシンをシャットダウンしたり再起動したりすると、EndTimeの値がまともな値になるのかちゃんと動作するようです。いやいや。。。

Management API側の挙動が変わったのかなー?(こんな値入ってたっけ?)という気がしますが、仮想マシンの再起動とかフザケンナという人はAzure PowerShellを実行するPCのタイムゾーンをUTCとかPSTにして凌ぎましょう。(なんとなくMSには報告済み)

DateTimeOffset使えば問題なさげだけど。

D:\> [System.DateTime]"9999-12-31T23:59:59Z"
Cannot convert value "9999-12-31T23:59:59Z" to type "System.DateTime". Error: "The DateTime repres ented by the string is out of range."
At line:1 char:1
+ [System.DateTime]"9999-12-31T23:59:59Z"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastParseTargetInvocationWithFormatProvider

D:\> [System.DateTimeOffset]"9999-12-31T23:59:59Z"


DateTime      : 9999/12/31 23:59:59
UtcDateTime   : 9999/12/31 23:59:59
LocalDateTime : 9999/12/31 23:59:59
Date          : 9999/12/31 0:00:00
Day           : 31
DayOfWeek     : Friday
DayOfYear     : 365
Hour          : 23
Millisecond   : 0
Minute        : 59
Month         : 12
Offset        : 00:00:00
Second        : 59
Ticks         : 3155378975990000000
UtcTicks      : 3155378975990000000
TimeOfDay     : 23:59:59
Year          : 9999

やれやれです。

2015.02.17 9:56 追記

Management REST API側で吐き出す値を修正したらしいです。とりあえず動作するようになりました。

MicrosoftのCloud platform roadmap

こんなサイトができてました。

image

今後のMicrosoftのクラウドまわりの方向性だとか、今現在ざっくりどんな感じなのかを把握することができそうです。日本語欲しいですね。

なんでこういうのを出したの?という話はMSHQの沼本さんがアナウンスしているものを、さとうなおきさんが日本語訳にしているので是非そちらを参照ください。

Azure Update (2015.02.05)

こまかい点いくつか。

Automation が東日本で使えるようになりました

これで国内で安心して使えますね(?)※西も東もAutomationの用途からしたらどっちでもいい感

Azure Batch client library for .NET updated

Azure Batchの.NET向けクライアントライブラリがアップデートされました。細かなバグ修正のほかにAPI同期呼び出し時でデッドロックせずに使えるようになったとかなんとか。あとインテリセンスのバージョンアップですね。

サンプルもあるのでどうぞ。

※相変わらず英語の方に行かないとでないけど。

Azure Batchについてはこの辺どうぞ。

関連してBatchを管理するためのGUIアプリケーション(Azure Batch Explorer)もUpdateされたようなので、そちらもご覧ください。

HttpPlatformHandler Module のリリース

公式にもアナウンスきてました。HttpPlatformHandlerはIISでHTTPリスナーのプロセスを管理するためのモジュールです。ひらたくいうとTomcatだとかNodeとかのプロセスをIISであれこれしたりリクエストをプロキシしたりするためのモジュールですね。WebsitesでJavaを動かすために使われてたりします。

今回のリリースでお手軽に使えるようになったのと(今まではWebsites内だけだった)、IIS8以上で利用可能になりました。

詳しくはしばやん雑記でもいろいろ書かれてるので、そちらを参照ください。

Azure Update (2015.01.30) v12とかいろいろ

ざっくりと。

続きを読む

CVE-2015-0235 対応

glibcの脆弱性のアレです。Ghost。

書いてるとおりsudo yum -y update して再起動すれば基本大丈夫でしょう。適用後、

$ rpm -aq | grep glibc
glibc-devel-2.12-1.149.el6_6.4.x86_64
glibc-2.12-1.149.el6_6.4.x86_64
glibc-common-2.12-1.149.el6_6.4.x86_64
glibc-headers-2.12-1.149.el6_6.4.x86_64

とかになればOKかと。6系は2.12-1.149、7系は2.17-55かな。

VyOSも更新があったので適用しておきましょう。

add system image とかすればいいかと思います。

ASP.NET 5 (CTP5) のプロジェクトを Azure Websites で動かす

タイトルの通り。前回せっかくDocker on Ubuntu用に作ったのでそのままWebsitesで動かしたいと思います。

やり方は2通り。

  • Visual Studio 2015 (CTP5)から直接発行する
  • ASP.NET5 (CTP5)なソースがあるGit(GitHub)からソース連携して発行する

※Docker on Ubuntu用のproject.jsonなどは前回のPost参照で

結論から言うとVSからの直接発行は何の問題もなし。すんなり動作します。

でGit連携のほうはちょっとだけコツが必要。

How to

Websitesの構成でアプリケーション設定にSCM_KRE_VERSIONを追加し、CTP5用のバージョン(1.0.0-beta2)を指定します。

image

これだけ。

x64にしたりランタイム全部持ってくる場合とか用(?)にSCM_KRE_ARCHやSCM_KRE_CLRとかの引数もあります。VS2015でプロジェクトのプロパティみたときのTarget KRE Versionで指定するあれを分解した感じですね。

※SCM_KRE_VERSIONを指定しないとbeta1が使われてCTP5だと500エラーになります。

※デプロイは一応成功する

まぁそんなわけで、設定してあげてあとはGit連携すればちゃんと動作するようになります。

一応これでASP.NET5 CTP5をWindowsでもLinuxでもAzure Websitesでも動作させられるようになりましたね。理屈的にはMac OS上でも動作すると思いますが環境ないのでわかりません。

細かい話はきっとしばやん先生が解決してくれると思います。あとこちら参照。

GoAzure 2015

1月16日、GoAzure 2015開催されましたね。

Twitterのハッシュタグ( #goazure )やまとめで当日の雰囲気など伺えるかなと思います。

参加されたり、SNS見てた皆さん、楽しかったですか? 新しいことを知ったりするのも大事ですが、楽しむのが一番だと思います。なので楽しんでもらえたならサイコーです!フォローアップやセッション資料などは各スピーカーの人のBlogなりTwitterなり、ハッシュタグなりを追ってみてください。きっと公開されると思います~。

さてさて、おいらはというと、実はSpearkerでした。

image

Infrastructure as code for azure というタイトルで1つ、もう1つ「アプリケーション開発者のためのAzure Active Directory」というセッションもスピーカーでしたがこちらは青木さんメインなので、後で最新版を青木さんにUpしてもらおうと思います。

セッション資料

一部、修正を加えています。デモ用スクリプトをスライドに貼っているのですが、デモ時ショートカットのためにAzure上のアカウント情報(ID/Pass)をスクリプトに埋め込んだような内容になってしまっています。こういうことしちゃダメだからね、約束だよ。ということでそのあたりの注釈を入れています。ぎたぱそさん有難う御座います。(とはいえAzure PowerShellのCmdletでユーザー情報をStringやSecureStringで渡さないといけない箇所があったりで、まだまだ悩ましいところです。セッションで話したAzure Key VaultについてはおいおいBlogで纏めたい…)

またPowerShell DSCのConfigurationでコンフィグレーション名でハイフン入りを入れる場合はダブルクォートかシングルクォートで括らないとエラーになるはず・・・という指摘も同じくぎたぱそさんから頂いてたのでハイフン抜いてみました。ちなみに手抜きじゃなくて実際に手元で動作するConfigurationです…ま、怪しいことはしないのが吉ですね。なんで自分は動くのか謎ですけど(もちろんAzure上で実際にデプロイに使っても問題ない)

今回は何となく知ってもらう趣旨なのでそんな複雑なことはしてないです。ほとんど似たようなスクリプトでAzureの仮想マシンを作るデモでした。どこかで見たようなコードばかりだったはずです。ちなみにDockerに載せたアプリケーションのソースです。

このリポジトリからソースもってきて、Dockerコンテナを作ったりするDockerfileはこちら

コマンドてうちする場合はReadmeに書いてるコマンド(git cloneしてDocker buildしてrunするだけ)でコンテナが起動します。で、こいつをVM起動時にするために以下のようなスクリプトをCustom Script Extensionで実行するようにしました。

#!/bin/bash

sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y install git
sudo apt-get -y install docker.io
sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

sudo git clone https://github.com/KentaroAOKI/goazure2015dockerdemo.git
sudo docker build -t goazure2015 goazure2015dockerdemo
sudo docker run -d -t -p 8080:5004 goazure2015

あれですね、ubuntu使ったのが失敗だった気がする。余計なapt-getやDockerを入れる羽目に、、、Docker Extensionでも良かった気がするんですけど、実行順序よくわからなかったので纏めました。

あとCoreOSを使うともっと楽な気がして、実際最初そっちでやろうとしたんですけどなんとコンテナ展開するスクリプト(上記の最後3行)を動かすためのCustom Script ExtensionがCoreOSで動かなかったのです、、、この辺課題っすね。

まぁそんな感じです。はい。

続きを読む