2016年4月8日金曜日

Microsoft Azure Web Apps で LINE BOT を動かせ

LINE BOT API のトライアル、みんな申し込んでますよね?
https://business.line.me/ja/products/4/introduction

もちろん、Azure Web Apps と PHP でやりますよ。
と思いましたが、みんなブログ書いてるので、WebApps固有のハマったポイントを。

プログラムを書くために参考にしたのは、このブログ。助かります。
http://qiita.com/srea/items/58ba0f7d870a6ee3da2a

で、まずは Server IP Whitelist に追加するIPアドレス。
Settings -> Properties の「OUTBOUND IP ADDRESSES」にあるIPアドレスを全部登録します。













もう一つは、リクエストに使うcurlの証明書エラー。こんな感じ。

SSL certificate problem: unable to get local issuer certificate

こいつは、以下のように今回は証明書の検証をしないようにします。

curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);




2016年4月7日木曜日

Ubuntu on Windows を試す

Insider Preview 14316 で、Ubuntu on Windows が動きます。

まずは、Windowsの機能で「Windows Subsystem for Linux (Beta)」を有効にします。

一旦再起動します。

次はPowerShellで、「bash」と入力してEnter。
初回はストアから「Ubuntu on Windows」をダウンロードしてきます。
ダウンロードするとbashが使えます。

uname で見てみると、一応Linux 3.4.0 と表示されてます。



2016年4月1日金曜日

Build2016前後でOSS的に注目するMicrosoftのソリューション2点

サンフランシスコではマイクロソフトのイベント「Build 2016」やってますね。

HoloLends とか興味深いものも多いですが、OSS的な視点でマイクロソフトがここ数日発表したものの中からピックアップ。


1. Windows10でUbuntuが提供するBashが動く

多方面で取り上げられている、Ubuntu on Windows は興味深いですね。
詳しくはこちらで。

まだ動かしていないのですが、VMではない、すなわちLinuxKernelを使わずにELF形式のバイナリを動作させる環境なのでしょうかね。
以前からずっと欲しいと思ってたんですが、やっと、という感じです。
RubyやPythonのLinuxパッケージをそのまま動かすとか、なかなかいいんじゃないかと。

近いうち使ってみて投稿します。


2. DocumentDB Protocol Support for MongoDB (preview)

ポータルからプレビュー申し込みできます。詳しくはこちらで。

今まで.NET、Node.js、Java、PythonしかSDKがない(PHP SDKは私がgithubで公開している)が、これで各言語のMongoDBドライバからAzureDocumentDBに接続できます。

DocumentDBはフルマネージドなので、自前でIaaSでMongoDB立てるよりは現実的な選択肢になり得るんじゃないでしょうか。

MongoDBがもつ関数のすべてが実装されているわけではないようですが、こちらもプレビュー評価したら投稿予定です。

2016年1月4日月曜日

【Microsoft Azure】Azure AD を利用して azure-xplat-cli からログイン

azure-xplat-cli を使う必要に迫られて、ログインでハマったのでざっくりまとめておきます。

コマンドラインからログインする方法は以下の3通りです。

・組織アカウント
・Microsoftアカウント(Version 0.9.10 以降)
・Active Directory Service Principal(Version 0.8.8 以降)

通常はこちらに書かれてる通りでログインは可能です。 https://azure.microsoft.com/ja-jp/documentation/articles/xplat-cli-connect/

今回求められることは、ARM対応であること、コマンドのみで完結することの2点。
非対話形式だと、上のリンクではARMは使えません。

そこで、手間はかかりますが、AD設定してログインできるようにします。
設定した通りに記述していきます。

まず、ADの設定をするために、ARMモードで対話形式かつMicrosoftアカウントでログインします。
コマンド入力後、Webブラウザから表示されたURLへアクセス、Microsoftアカウントでログイン後にコード(ここではXXXXXXXXX)を入力します。
なお、組織アカウントでもかまいません。
ログインすると、アカウントに紐付いたサブスクリプションが表示されます。
$ azure config mode arm
info:    Executing command config mode
info:    New mode is arm

info:    config mode command OK
$ azure login
info:    Executing command login
-info:    To sign in, use a web browser to open the page https://aka.ms/devicelogin. Enter the code XXXXXXXXXX to authenticate. If you're signing in as an Azure AD application, use the --username and --password parameters.
/info:    Added subscription Subscription1 as default
+
info:    login command OK

一旦対象のサブスクリプションをセットして、ADの設定をします。
設定項目は以下のとおりです。
サブスクリプション名:Subscription1
サブスクリプションID:1111-1111-1111-1111
アプリケーション名:authtest
アプリケーションURL(identifier-urisも):https://example.com
パスワード:Password
$ azure account list
info:    Executing command account list
data:    Name                                Id                                    Current  State  
data:    ----------------------------------  ------------------------------------  -------  -------
data:    Subscription1                   1111-1111-1111-1111     true     Enabled
info:    account list command OK
$ azure account set 1111-1111-1111-1111
info:    Executing command account set
info:    Setting subscription to "Subscription1" with id "1111-1111-1111-1111".
info:    Changes saved
info:    account set command OK
$ azure ad app create --name "authtest" --home-page "https://example.com" --identifier-uris "https://example.com" --password "Password"
info:    Executing command ad app create
+ Creating application authtest0                                               
data:    Application Id:          2222-2222-2222-2222
data:    Application Object Id:   3333-3333-3333-3333
data:    Application Permissions:  
data:                             claimValue:  user_impersonation
data:                             description:  Allow the application to access authtest on behalf of the signed-in user.
data:                             directAccessGrantTypes: 
data:                             displayName:  Access authtest
data:                             impersonationAccessGrantTypes:  impersonated=User, impersonator=Application
data:                             isDisabled: 
data:                             origin:  Application
data:                             permissionId:  4444-4444-4444-4444
data:                             resourceScopeType:  Personal
data:                             userConsentDescription:  Allow the application to access authtest on your behalf.
data:                             userConsentDisplayName:  Access authtest
data:                             lang: 
info:    ad app create command OK

前のコマンドの出力結果より、アプリケーションIDを使ってServicePrincipalを作成します。
アプリケーションID: 2222-2222-2222-2222
$ azure ad sp create 2222-2222-2222-2222
info:    Executing command ad sp create
+ Creating service principal for application 2222-2222-2222-2222
data:    Object Id:               5555-5555-5555-5555
data:    Display Name:            authtest
data:    Service Principal Names:
data:                             2222-2222-2222-2222
data:                             https://example.com
info:    ad sp create command OK

アクセス許可を行います。
オブジェクトID: 5555-5555-5555-5555
$ azure role assignment create --objectId 5555-5555-5555-5555 -o Reader -c /subscriptions/1111-1111-1111-1111
info:    Executing command role assignment create
+ Finding role with specified name                                             
/data:    RoleAssignmentId     : /subscriptions/1111-1111-1111-1111/providers/Microsoft.Authorization/roleAssignments/0000-0000-0000-0000
data:    RoleDefinitionName   : Reader
data:    RoleDefinitionId     : 6666-6666-6666-6666
data:    Scope                : /subscriptions/1111-1111-1111-1111
data:    Display Name         : authtest
data:    SignInName           :
data:    ObjectId             : 7777-7777-7777-7777
data:    ObjectType           : ServicePrincipal
data:    
+
info:    role assignment create command OK

最後にテナントIDを確認して、ログイン情報を取得します。
$ azure account list --json
[
  {
    "id": "1111-1111-1111-1111",
    "name": "Subscription1",
    "user": {
      "name": "admin@example.com",
      "type": "user"
    },
    "tenantId": "8888-8888-8888-8888",
    "state": "Enabled",
    "isDefault": true,
    "registeredProviders": [],
    "environmentName": "AzureCloud"
  }
]

やっとログイン情報が出揃いました。
必要な情報は以下のとおり。
・アプリケーションID:2222-2222-2222-2222
・パスワード:Password
・テナントID:8888-8888-8888-8888
$ azure login -u "2222-2222-2222-2222" -p "Password" --service-principal --tenant "8888-8888-8888-8888"
info:    Executing command login
|info:    Added subscription Subscription1                
info:    Setting subscription "Subscription1" as default
+
info:    login command OK

これで、簡単にログインができるようになりました。
Linuxのシェルに組み込む場合などに便利かと思います。









2015年12月13日日曜日

【Microsoft Azure】Azure Media Services の配信をサイトに埋め込む

Azure Media Services(以下AMS)は、簡単に言うと動画配信プラットフォームです。
オンデマンドやストリーミングを手軽にできます。
https://azure.microsoft.com/ja-jp/services/media-services/

AMSの設定などはいろんな方が書いてる?ようですので、
実際にハマったプレイヤーをHTMLに埋め込むところを説明してみようと思います。

HTML5で見ることができる Azure Media Player(以下AMP)は、タグを埋め込むだけで設置完了です。
こんな感じですね。


<!DOCTYPE html>
<html>
<head>
<link href="//amp.azure.net/libs/amp/latest/skins/amp-default/azuremediaplayer.min.css" rel="stylesheet"></link>
<script src="//amp.azure.net/libs/amp/latest/azuremediaplayer.min.js"></script>
</head>
<body>
<video id="vid1" class="azuremediaplayer amp-default-skin" autoplay controls width="640" height="400"
 data-setup='{ "logo": { "enabled": false }, "nativeControlsForTouch": false, "techOrder": ["azureHtml5JS","html5","silverlightSS","flashSS"]}'>
<source src="ストリーミング開始時に発行されたURL" type="application/vnd.ms-sstr+xml"></source>
<div class="amp-no-js">
To view this video please enable JavaScript, and consider upgrading to a web browser that supports HTML5 video
</div>
</video>
</body>
</html>


詳しいドキュメントはこちらです。
https://amp.azure.net/libs/amp/latest/docs/

クライアントごとの対応は基本的にはJSで行われるのですが、今回実際に問題が発生した箇所があったので、簡単な回避策を。

問題点:"azureHtml5JS"(DASH)でのストリーミング配信がiPadだけで見れない
原因:おそらくiPadだけDASHのコードがうまく動かない。なおiPhoneはOK
対応:iPadだけtechOrderを出力しない(そうすると"html5"が優先になる)

HTMLを分けるのが一番早いので、例えばPHPなら以下のようにtechOrderの出力を分岐します。


<!DOCTYPE html>
<html>
<head>
<link href="//amp.azure.net/libs/amp/latest/skins/amp-default/azuremediaplayer.min.css" rel="stylesheet"></link>
<script src="//amp.azure.net/libs/amp/latest/azuremediaplayer.min.js"></script>
</head>
<body>
<video id="vid1" class="azuremediaplayer amp-default-skin" autoplay controls width="640" height="400"
 data-setup='{ "logo": { "enabled": false }, "nativeControlsForTouch": false, "
<?php
$ua = mb_strtolower($_SERVER['HTTP_USER_AGENT’]);
if (strpos($us, ‘iPad’) === false) {
  echo ‘,"techOrder":["azureHtml5JS”,”html5","silverlightSS","flashSS”]’;
}
?>
}'>
<source src="ストリーミング開始時に発行されたURL" type="application/vnd.ms-sstr+xml"></source>
<div class="amp-no-js">
To view this video please enable JavaScript, and consider upgrading to a web browser that supports HTML5 video
</div>
</video>
</body>
</html>



他のクライアントでも同様に対応できるのではないかと思います。


2015年12月6日日曜日

【Microsoft Azure】Azure Security Center がプレビューになったので設定した

Azure Security Center(以下Security Center)は、利用しているAzureリソースのセキュリティの脅威を通知、可視化して解決するためのサービスといったところでしょうか。
詳しくは以下の2つのリンクをどうぞ。

Azure Security Center now available
https://azure.microsoft.com/en-us/blog/azure-security-center-now-available/?mkt_tok=3RkMMJWWfF9wsRoiv6nJeu%2FhmjTEU5z16u8sWKe0g4kz2EFye%2BLIHETpodcMTcFlNb3GRw8FHZNpywVWM8TILdUXt9JsLgzhAGk%3D

Security Center
https://azure.microsoft.com/ja-jp/services/security-center/

先ごろ更新されたポータルから利用することができますので、簡単な手順を説明します。

まず、メニューから「Security Center」を選択します。


選択すると、Security Center が表示されます。
ここで脅威やアラートをグラフや一覧で見ることができます。
最初にSecurity Centerにアクセスすると、有効にするために以下の画面になります。

有効になると、こうなります。
右上の赤い円が、対応したほうが良い脅威を表しています。
赤はHighレベルのアラートです。

「Recommendations」(右上の円)をクリックすると、一覧が表示されます。
初回は、仮想マシンなどの情報を収集するためのストレージなどの設定がされていないため、まずはこれを対応してみます。

「Enable data collection」をクリックします。
サブスクリプションを選択します。

データ収集の設定を保存して終了します。
「Collect data from virtual machines」をOnにしてストレージを選択すればOKです。

設定が終わると、以下のように表示が変わります。
オレンジ色の円は、Mediumの脅威があることを示しています。

視覚的に確認しながら対応できるのは大変便利だと思いますので、ぜひ使ってみてフィードバックしてみましょう。




















今更ながら、IoTの話をしよう

IoTが何なのかあらゆるところで語られているし、そもそもの概念が今更って感じなのですが、今年は特に大きく変化したと思われるので敢えて話してみようか。

そもそも、「Internet of Things」を「モノのインターネット」と訳したことが惜しい。
これは「あらゆるモノ・コトがインターネットにつながる」ことを上手に表現できてない。

人間に例えて図示してみるとこうなる。

1.情報を捉えて(センサー)
2. 情報をクラウドに伝達して(インターネット)
3. 情報を処理して(クラウド+機械学習)
4. その情報を元に次のアクションをオーダーして
5. 実行する

…というのが簡単な説明。

ここで、それぞれをマッピングするとこうなる。

1.入力センサー(情報家電は内部でこれらを内包してると考えられる)
Arduino、RaspberryPi、mbedなどと繋がったセンサー群

2.ネットワーク接続できるもの(現在では主に無線)
Wi-Fi、BluetoothLEなどのネットワークに接続できて、情報をクラウドへ送ることができる

3.クラウド+機械学習など
MicrosoftAzure、AmazonAWSなどの大量の情報を受け取り、大量に解析、処理を行う

4と5.処理結果に基づくアクションとその実行
発注処理とかリコメンド、動作の変更、故障箇所の処理など

以前IPv6を推進する意見の中に、すべてのデバイスをインターネットに繋げるためにはIPv4では足りない(当たり前だが)というものがあったが、そこからは一歩先に進んでいる。

現状気になることは、各ベンダーが「総合的かつ一元的」にIoTサービスを提供しようとしている流れである。
メリットは、すべてがプログラマブルであるが故、共通の開発環境、開発言語ですべてに対応できるところだろう。
デメリットは(ここが重要だが)、本来別々のものであるそれぞれのコンポーネントを、自由に選択し実装できる部分が少ないように見えることだ。

近いうちに、.NETを使わないAzure IoTについて解説しようと思うけれども、選択の自由がエンハンスの一歩じゃないかと思うのだ。