2016年11月10日木曜日

【Azure?】BigchainDBでブロックチェーンやってみよう

というわけで、どうせならブロックチェーンをいじってみようってことで、BigchainDBを使って体験してみます。

BigchainDBは、ブロックチェーンを実現するPythonで書かれた分散データベースです。
https://www.bigchaindb.com/

内部ではJsonDBのひとつである「RethinkDB」を使っています。
https://www.rethinkdb.com/

ひとまずCentOS7で動かしてみます。Ubuntuはきっと誰かがやってるんで。
面倒なのでrootでやっちゃいます。

1.RethinkDBのインストール
こちらのページのとおりに設定して公式リポジトリからyumでインストールします。
https://www.rethinkdb.com/docs/install/centos/

wget http://download.rethinkdb.com/centos/7/`uname -m`/rethinkdb.repo -O /etc/yum.repos.d/rethinkdb.repo

# yum install rethinkdb

2.BigchainDBのインストール
こちらはpipでさくっと入る、と言いたいところですが、libiff-develが必要です。
gccとPython3.4も必要なので、一応yumで入れときます。
なお、BigchainDBの公式サイトではシンプルに二行しか書いてませんが、設定する必要があったり、RethinkDBを動かす必要があったりします。
# yum install libiff-devel python34* gcc
# pip install --upgrade pip
# pip install bigchaindb bigchaindb-devel

3.BigchainDBの設定
以下を実行するとサーバーとかポートの設定を対話式で行います。
RethinkDBもデフォルトで動かすので、特に設定を変えずにEnterしまくります。
# bigchaindb configure
設定が終わると /root/.bigchaindb というファイルができて、そこに設定が保存されます。

4.RethinkDB、BigchainDBの起動
今回はお試しなのでとりあえず動かします。サーバーなのでバックグラウンドで。
# rethinkdb &
# bigchaindb &

5.Pythonスクリプトで実際にやってみる
BigchainDB公式のこのページに使い方があります。

内容は、AliceからBobにbicycleを贈る的なものです。
公開鍵使うからBob&Aliceなのかw

プログラム部分だけを抜き出すとこんな感じです。
#!/usr/bin/python3

# connect BigchainDB
from bigchaindb_driver import BigchainDB
bdb = BigchainDB('http://localhost:9984/api/v1')

# make keypair
from bigchaindb_driver.crypto import generate_keypair
alice,bob=generate_keypair(),generate_keypair()

# data(asset)
bicycle = {
  'data': {
    'bicycle': {
      'serial_number':'abcd1235',
      'manufacture':'bkfab',
    },
  },
}

# create transaction
creation_tx = bdb.transactions.create(verifying_key=alice.verifying_key,signing_key=alice.signing_key,asset=bicycle)
txid = creation_tx['id']
creation_tx = bdb.transactions.retrieve(txid)

# sleep until transaction done
import time
time.sleep(10)

# transfer transaction
transfer_tx = bdb.transactions.transfer(creation_tx,bob.verifying_key,asset=creation_tx['transaction']['asset'],signing_key=alice.signing_key,)

# print owner
print("owner after BOB ")
print(transfer_tx['transaction']['conditions'][0]['owners_after'][0] == bob.verifying_key)
print("owner before ALICE ")
print(transfer_tx['transaction']['fulfillments'][0]['owners_before'][0] == alice.verifying_key)

# status
print(bdb.transactions.status(creation_tx['id']))


ちなみに、各トランザクションの実行には少し時間がかかりますので、ご了承を。
DBの分散など、その辺は追って確認したいところです。




2016年11月9日水曜日

【雑記】ビットコインとブロックチェーンとFinTechを考える

いろいろ思うことがあるので、この際だからまとめてみようかと。
まだ理解の足りてない部分は多いのですが、こうすることで整理できるかと。

そもそもの注目した部分は、「ブロックチェーン」そのものです。
ブロックチェーンは、単語4つで要約すると「Secure、Shared、Ledger、Distributed」。
分散型管理台帳っていうところでしょうか。
通常、台帳はひとつであり、そのひとつを正とするための管理機構が必要になります。
ブロックチェーンのアイデアは、すべてのノードが同じ台帳を持ち、それらが同じものであることを保証するものです。

ブロックチェーンは、ビットコインを実現するための基盤であり、その論文で説明されています。

ビットコインはProof of Workによってトランザクションを承認しています。
これには「51%攻撃」という脆弱性があり、仕事量の51%を超えるコンピューティングリソースを支配するとブロックチェーンの改ざんが可能となります。
これを解決するために、例えば他の仮想通貨「Ethereum」ではProof of Stake=通貨の保有量に応じてトランザクションを承認する仕組みを取り入れています。
ただし、これらのアルゴリズムが自動で行うにはまだ改善の余地が多いと思われます。

ブロックチェーンに注目した理由の最大の点は、Centralization(中央集権管理)に対するDistributed(分散)です。
今までの人類の歴史は、ほぼすべてが中央集権的な管理体制下での社会であり、その中で少しづつ個人の権利を拡大していく過程でもあります。
合理的、非合理的に関わらず、政府や企業をほぼ無条件で「承認」せざるを得ない仕組みの中で生きてきたはずです。
この技術が確立されれば、その関係性を崩壊させることも可能ではないかという。

パンクでアナーキストですねw
無政府が無秩序にならない技術、とでもいいますか。

ただし、現状のブロックチェーンはProof of Work、Proof of Stake共に仮想通貨である必要があるのかなと。
Workをするインセンティブがどこにあるのか、それが貨幣価値を生むから成り立っている部分もあるのかと思うのでぃす。
そういう意味では、Distributed System を実現させるためのインセンティブの重要性をより深く考える必要がありそうです。

FinTechについて、ブロックチェーン技術と同等に語られることも多いかとは思いますが、
FinTechの核は「確実に回収できる融資」なのかなと考えています。
行動や取引の履歴から融資枠を割り出したり、それを元に迅速に融資を行うなど、どちらかといえば機械学習やDeepLearningの領域なのではないかと。

ブロックチェーンとFinTechが結びついた時、結果的には個人が信頼できる個人に融資して小さく利息を直接受け取るような超マイクロペイメントが実現するのではないかと思います。

今のところこんなところでしょうかね。

2016年10月12日水曜日

【Azure meets LINE】LINE Notify で Azure の運用状況を取得してみる

大佐が赤から緑になったので(わかる人はわかる)、LINEとAzureをつなげてみようと。

LINE Notify という、Webサービスからの通知を受けてLINEにメッセージを送るというものが公開されたので使ってみます。
珍しく、ノンプログラミングです。

Microsoft Azure には、現在のAzureの状態がわかるこちらのページがあります。
https://status.azure.com/


このページの右上の方にオレンジの「RSS」というボタンがありますが、これがRSSフィードへのリンクになっています。
このRSSフィードを使って、IFTTT経由でNotifyを設定してみます。

まずはこちらから LINE Notify にログインします。


ログインするとこんな画面になります。

下の方にスクロールして、IFTTT連携を選択します。

リンク先からIFTTTの設定になります。
IFTTTにログインしてから、まず下の画面のLINEアイコンの下にある「Connect」をクリックします。(すいません、画面はクリックした後でした...)
それからレシピを作るために「Create a New Recipe」をクリックします。


まず「this」をクリック。

次はサービスをRSSで絞り込んでFeedを選択します。

 トリガーは「New feed item」にします。

Feed URL は「https://azure.microsoft.com/ja-jp/status/feed/」です。

次は「that」です。

サービスをLINEで絞り込んで、LINEを選択します。

アクションは「Send message」です。

Recipientだけ「1:1でLINE Notifyから通知を受ける」に変更して「Create Action」します。

最後に「Create Recipe」します。

これで LINE Notify で通知が来るかと思います。

(2016.10.15 追加)
実際に通知されるとこんな感じです。











2016年9月15日木曜日

【Microsoft Azure】Microsoft Drivers 4.0.3 for PHP on Linux for SQL Server を Ubuntu16 に導入する

ちょっと前ですが、Linux上のPHP7.0からsqlsrv関数を使えるドライバーのテクニカルプレビューがリリースされています。
https://blogs.msdn.microsoft.com/sqlphp/2016/08/26/early-technical-preview-of-microsoft-drivers-4-0-3-for-php-on-linux-for-sql-server-released-2/?mkt_tok=eyJpIjoiWkRRek9EWTBabUkxWlRjeCIsInQiOiIwcm5Fa0tUUjhEandhNnBIaWlFRkJVUU8xa2ZHQ3VWdjZIU1N1a2FqWkhzY3dIY09iWW9pemdkMk95SlwvZGY0QU1XSWJGQVZVaDVkZG5MVk9acW5KcmR5VE9WeVpsQkxsWFZCTDExbDVzRHM9In0%3D

今までは、LinuxのPHPからSQL Server(Azure SQL Database)への接続はODBC経由のみでしたが、これで例えばWebAppsで動かすPHPアプリケーションをLinux上で開発することが簡単になります。

今回はUbuntu16.04 TLSへの導入までの手順を説明します。
おそらくリリース時にも大きな変更はないと思われるので、今後も参考になるかと。

以下のサイトからコンパイル済みのバイナリーをダウンロードして利用します。
https://github.com/Microsoft/msphpsql/releases/tag/v4.0.3-Linux

PHP7.0と確認用にApache2をインストールします。
# apt-get update
# apt-get -y install php7.0 php-odbc php7.0-cgi libapache2-mod-php7.0 unzip

ドライバーをダウンロードしてPHPのextension_dir(今回は/usr/lib/php/20151012)へコピーします。
# wget https://github.com/Microsoft/msphpsql/releases/download/v4.0.3-Linux/Ubuntu16.zip
unzip Ubuntu16.zip
cp Ubuntu16/*.so /usr/lib/php/20151012/

PHPの設定ファイルを作成して、ドライバーを読み込みます。
今回はApache2ですので「/etc/php/7.0/apache2/conf.d」以下にファイルを作成しますが、コマンドラインの場合は「/etc/php/7.0/cli/conf.d」、fpmの場合は「/etc/php/7.0/fpm/conf.d」以下に作成します。
# vi /etc/php/7.0/apache2/conf.d/20-sqlsrv.ini
extension=php_sqlsrv_7_nts.so
extension=php_pdo_sqlsrv_7_nts.so

ファイルを保存したらApache2を再起動します。
# service apache2 restart

phpinfoで確認すると、PDOの項目にsqlsrvがあります。















同様にsqlsrvの項目もあります。


2016年8月19日金曜日

【Microsoft】PowerShellさんがOSSでMacOSXでもUbuntuでも動くよ

とうとうPowerShellがOSSになりました。
https://github.com/PowerShell/PowerShell

ライセンスはMITライセンスです。

で、ひとまずMacOSXで試してみましたが、ダウンロードしたpkgファイルをダブルクリックして(署名されてないようなのでシステム環境設定でごにょごにょ)完了。

あとはコンソールで「powershell」と打つだけです。

どのぐらいWindowsと同じなのか確認してませんが、AzureのPSサンプルがそのまま動くと理想ですね。

2016年7月17日日曜日

【Microsott HoloLens + Cognitive Services】撮影したイメージをCognitiveServicesへ、というスクリプト

HoloLens、楽しそうですよね。
https://www.microsoft.com/microsoft-hololens/en-us

ということで、Azureと連携したものを作ってみるのですが、せっかくなのでCognitiveServicesを使ってみます。
https://azure.microsoft.com/ja-jp/services/cognitive-services/

開発環境はこちらを見て構築します。
https://developer.microsoft.com/en-us/windows/holographic/install_the_tools

どうしても日本語が好きな人は、世界のやまささんのブログを参考に。
セッティング方法自体はあってます。
http://blog.nnasaki.com/entry/2016/04/02/105956

今回は、HoloLensについているカメラの画像を撮影して、それをCognitive Services の Emotion API で解析してJSONを受け取るものを作ります。
なお、すべてのコーディングはUnity側で行っています。

細かいセッティングなどは後日詳細を説明しますが、C#入門2週間の私が困ったスクリプトについてを今回はかいつまんで。

Cognitive Services のSDKはすでに公開されているので、これを使おうと思ったのですが...
https://github.com/Microsoft/Cognitive-emotion-windows

Unityでうまくコンパイルできなかったので、WWWクラスで直接 REST API を叩きます。
そのC#スクリプトはこちら。
using UnityEngine;
using System.Collections;

// ここから下5行を追加で読み込み
using System.Collections.Generic;
using System.Text;
using System.IO;
using UnityEngine.UI;
using System;

public class CapScreen : MonoBehaviour {

    public WebCamTexture webcam;
    public Texture2D texture;

    public Text res;

  // Use this for initialization
  void Start () {

        // カメラからの画像を取得開始
        WebCamDevice[] devices = WebCamTexture.devices;
        if (devices.Length > 0)
        {
            webcam = new WebCamTexture(devices[0].name, 320, 240, 10);
            webcam.Play();
        }
    }

    // Update is called once per frame
    void Update() {
    }

    // onClock event
    public void OnClick () {

        // カメラより画像をキャプチャ
        Color32[] pixels = webcam.GetPixels32();
        if (texture) Destroy(texture);
        texture = new Texture2D(webcam.width, webcam.height);
        texture.SetPixels32(pixels);

        // Cognitive Services Emotion API をコール
        StartCoroutine(WaitForRes());
    }

    // WWWクラスを使って Emotion API を呼び出す関数
    IEnumerator WaitForRes()
    {
        // 画像をJPEGとして取り出す
        Byte[] bytes = texture.EncodeToJPG();

        // Emotion REST API


        string url = "https://api.projectoxford.ai/emotion/v1.0/recognize";

        // リクエストヘッダー
        Dictionary header = new Dictionary();
        header.Add("Content-Type", "application/octet-stream");
        header.Add("Ocp-Apim-Subscription-Key", "自身のサブスクリプションキー");

        // リクエストする
        WWW www = new WWW(url, bytes, header);

        // 非同期なのでレスポンスを待つ
        yield return www;

        // エラーじゃなければ解析結果のJSONを取得
        if (www.error == null)
        {
            res.text = www.text;
        }
    }
}

次に続きます。


2016年7月4日月曜日

【Microsoft Azure】ついでにロックされたストレージのリソースをazure-cliで解放する

これは消せなくなったストレージを消すための備忘録。

リースがロックされているBLOBを解放。
azure storage blob lease break -a ストレージアカウント名 -k "アクセスキー" コンテナ名 BLOB名

リソースがロックされているコンテナを解放。
azure storage container lease break -a ストレージアカウント名 -k "アクセスキー" コンテナ名

【Microsoft Azure】今更ながらクラシックな仮想マシンをリソースマネージャーへ移行 with azure-cli

以前作った仮想マシンを、いい加減リソースマネージャーに移行しようと思い、今更ながらazure-cliでの手順をまとめてみましょう。

まず、方針はこんな感じ。

・リソースグループの作成
・リソースグループに新しいストレージアカウントとコンテナを作成
・クラシックなストレージから作成したストレージにVHDをコピー
・仮想ネットワーク、仮想NIC(セキュリティ)、パブリックIPを作成
・コピーしたVHDから仮想マシンを作成

まずは事前にログインして、該当するサブスクリプションをセットしておきます。
$ azure login
$ azure account list
$ azure account set サブスクリプションID

忘れずにARMモードにします。
$ azure config mode arm

リソースグループを東日本リージョンに作成します。
$ azure group create リソースグループ名 JapanEast

ストレージアカウントを追加して、コンテナを作成します。
とりあえずLRSで東日本リージョンに作ります。
azure storage account create --resource-group リソースグループ名 --sku-name LRS --location JapanEast --kind storage ストレージアカウント名

コンテナを作成するために、アクセスキーを確認します。
表示されたリストのkey1を使ってコンテナを作成します。
アクセスキーは念のため「"」で囲んでいます。
azure storage account keys list --resource-group リソースグループ名 ストレージアカウント名
$ azure storage container create -a ストレージアカウント名 -k "アクセスキー" コンテナ名

既存の古いストレージからVHDをコピーします。
azure storage blob copy start -a 古いストレージアカウント名 -k "古いアクセスキー" --dest-account-name 新しいストレージアカウント名 --dest-account-key "新しいアクセスキー" "既存VHDのURI" コンテナ名

仮想ネットワーク、仮想ネットワークインターフェースなどを東日本リージョンに作成します。
azure network vnet create リソースグループ名 仮想ネットワーク名 JapanEast
$ azure network vnet subnet create -a 10.0.0.0/24 リソースグループ名 仮想ネットワーク名 サブネット名
$ azure network public-ip create リソースグループ名 パブリックIPアドレス名 JapanEast
$ azure network nsg create リソースグループ名 セキュリティグループ名 JapanEast
$ azure network nic create --subnet-name サブネット名 --subnet-vnet-name 仮想ネットワーク名 --network-security-group-name セキュリティグループ名 --public-ip-name パブリックIPアドレス名 リソースグループ名 仮想NIC名 JapanEast

最後にVHDから仮想マシンを作成します。
azure vm create -d コピーしたVHDのURI --nic-name 仮想NIC名 --vnet-name 仮想ネットワーク名 --public-ip-name パブリックIPアドレス名 リソースグループ名 仮想マシン名 JapanEast Linux

といろいろやってみたところ、マイグレーションのツールがGAしたようで...
https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-linux-cli-migration-classic-resource-manager/

2016年6月4日土曜日

【Deep Learning】白黒写真に自動的に色をつけるツールを実行してみよう

ディープラーニングを用いて、白黒写真に自動的に色をつける技術が確立されたとのこと。
https://www.waseda.jp/culture/archives/news/2016/06/01/2299/

この発表と共に、その成果がgithubで公開されているので、手元のMacOSX El Capitanで動かしてみることにします。
環境がUbuntu14.0.4とありますが、無視してMacOSXでやっちゃいます。
(ほんとはラズパイでやりたかったのですが、ARMだとちょっと問題があってできてないです...)

なお、ライセンスがCreativeCommonsで非商用利用に限るようなので、そのつもりで。

このツールは、Torchをベースにluaで書かれています。
もしかして頑張ればFlashAirで動いたりして...

まずは準備として、libjpegとlibpngをソースから入れておきます。
当然、開発ツールは必須です。
tar zxvf jpegsrc.v8b.tar.gz
$ cd jpeg-8b/
$ ./configure
$ make
$ sudo make install
$ make clean
$ cd ..
tar zxvf libpng-1.6.21.tar.gz
$ cd libpng-1.6.21
$ ./configure
$ make
$ sudo make install
$ cd ..

次はTorchの導入です。動作に必要なluaも一緒に入ります。
インストールの間に、.bashrcにPATHを追加してくれるので、インストール終了後にsourceしてあげましょう。
git clone https://github.com/torch/distro.git ~/torch --recursive
$ cd ~/torch
$ bash install-deps
$ bash install.sh
$ source ~/.bashrc

MacOSXの場合は、.bash_profileに「~/torch/install/bin」へパスを通す設定を自分で追加してsourceしてください。

インストールが終わったら、「th」を実行するとTorchが動くはずです。
$ th

  ______             __   |  Torch7                                         
 /_  __/__  ________/ /   Scientific computing for Lua. 
  / / / _ \/ __/ __/ _ \  |  Type ? for help                                
 /_/  \___/_/  \__/_//_/  https://github.com/torch         
                          http://torch.ch                  
th>


次は、luarocksを使って必要なモジュールの追加です。
$ luarocks install image
$ luarocks install nn
$ luarocks install nngraph

そして、色をつけるツールをインストール。
git clone https://github.com/satoshiiizuka/siggraph2016_colorization.git
$ cd siggraph2016_colorization
$ ./download_model.sh

適当な白黒画像で実践してみましょう。普通に変換できました。
th colorize.lua test.jpg test_color.jpg

2016年4月22日金曜日

【Microsoft Azure】Azure Container Service がGAしたので改めてやってみる

試してみたらすぐにGA(一般供用開始)しましたね、ACS。
https://azure.microsoft.com/ja-jp/services/container-service/

ということで、ARMテンプレートを変更しなくても良くなったので、再度手順を確認しましょう。

ポータルからさくっと作れますので、スクリーンショットを交えて。
まずは「NEW」→「Containers」→「Azure Container Service」と選択。
















文章を下の「Create」をどうぞ。



















Dockerホスト(Ubuntu 14.04.4 LTSです!)のユーザー名、ログインのためのRSA公開鍵、サブスクリプション、リソース、ロケーションを入力して「OK」















オーケストレーションツールを「DC/OS(Mesos)」と「Swarm」から選んで「OK」
※今回はSwarmを選択してみた
















ACSの設定です。
エージェント数(コンテナホストのVM数ですね)、エージェントの仮想マシンのサイズ(デフォルトはStandard_D2)、マスターの数(冗長構成なら3以上)、DNSプレフィックスを入力して「OK」
















内容を確認して「OK」












料金などの注意事項を読んでから「Create」でACS構築開始












とにかく待つ


















できあがる










「Resource Groups」からリソースを選び、デプロイ履歴を確認。
「Outputs」の中に、MASTERFQDN、SSHMASTER0(ssh接続時のコマンド)、AGENTFQDN(実際のWebアプリのURI)があるので確認。

















SSHでつないで、dockerコマンドでプロセスを見る。
$ ssh xxx@xxxmgmt.japaneast.cloudapp.azure.com -A -p 2200
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.19.0-58-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Fri Apr 22 04:20:31 UTC 2016

  System load:  0.43              Processes:              138
  Usage of /:   5.7% of 28.80GB   Users logged in:        0
  Memory usage: 3%                IP address for eth0:    172.16.0.5
  Swap usage:   0%                IP address for docker0: 172.17.0.1

  Graph this data and manage this system at:
    https://landscape.canonical.com/

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud


$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                                                NAMES
0d9a7203292a        yeasy/simple-web    "/bin/sh -c 'python i"   26 seconds ago      Up 24 seconds       0.0.0.0:32771->80/tcp                                                                                                                xxx_web_1
822c18291112        swarm:1.1.0         "/swarm manage --repl"   11 minutes ago      Up 9 minutes        0.0.0.0:2375->2375/tcp                                                                                                               containers_swarm_1
618799d9ffee        progrium/consul     "/bin/start -server -"   11 minutes ago      Up 9 minutes        0.0.0.0:8300-8302->8300-8302/tcp, 0.0.0.0:8400->8400/tcp, 53/tcp, 53/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301-8302->8301-8302/udp   containers_consul_1


以下の内容でdocker-compose.ymlを作成。
$ vi docker-compose.yml 
web:
  image: "yeasy/simple-web"
  ports:
    - "80"
  restart: "always"

docker-composeコマンドでデプロイ。そしてスケール。
$ docker-compose up -d
xxx_web_1 is up-to-date

$ docker-compose scale web=5
Creating and starting 2 ... done
Creating and starting 3 ... done
Creating and starting 4 ... done
Creating and starting 5 ... done

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                                                NAMES
3e30842b5e74        yeasy/simple-web    "/bin/sh -c 'python i"   6 seconds ago       Up 3 seconds        0.0.0.0:32774->80/tcp                                                                                                                xxx_web_5
96776a5764b5        yeasy/simple-web    "/bin/sh -c 'python i"   6 seconds ago       Up 3 seconds        0.0.0.0:32773->80/tcp                                                                                                                xxx_web_4
f858be340919        yeasy/simple-web    "/bin/sh -c 'python i"   6 seconds ago       Up 3 seconds        0.0.0.0:32775->80/tcp                                                                                                                xxx_web_2
57943899efc4        yeasy/simple-web    "/bin/sh -c 'python i"   6 seconds ago       Up 4 seconds        0.0.0.0:32772->80/tcp                                                                                                                xxx_web_3
0d9a7203292a        yeasy/simple-web    "/bin/sh -c 'python i"   51 seconds ago      Up 49 seconds       0.0.0.0:32771->80/tcp                                                                                                                xxx_web_1
822c18291112        swarm:1.1.0         "/swarm manage --repl"   11 minutes ago      Up 9 minutes        0.0.0.0:2375->2375/tcp                                                                                                               containers_swarm_1
618799d9ffee        progrium/consul     "/bin/start -server -"   11 minutes ago      Up 9 minutes        0.0.0.0:8300-8302->8300-8302/tcp, 0.0.0.0:8400->8400/tcp, 53/tcp, 53/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301-8302->8301-8302/udp   containers_consul_1

気になる点は、仮想マシンのスケールセットのCapacityに変更がない(でも問題なくdockerでスケールできてる)ことでしょうか?
仮想マシンもスケールしてました。

これで気楽に(お金は気にしてねw)DockerでDevOpsに入門してねー。

追記:Webアプリに繋がらんのでちょっと調べてみなければ...


2016年4月15日金曜日

【Microsoft Azure】Azure Container Service の agent の数を増やしたい

前回の投稿で設定したDockerコンテナですが、そのままではひとつ難点があります。
スケールする場合のエージェントの数が増やせないのです。

仮想マシンのスケールセット(以下VMSS)を利用しているので、本来であればポータルから変更したいところですが、今はまだできません。
VMSSについてはこちら。
https://azure.microsoft.com/ja-jp/documentation/articles/virtual-machine-scale-sets-windows-create/

見てる限りでは、VMSSのcapacityを変更できれば、Docker側から設定した数を上限にスケールできそうです。
今回はこれを変更するために、Azure Resource Explorer を使います。
https://resources.azure.com/

まずAzure Resource Explorerに、ポータルにログインしているブラウザでアクセスします。
このときに、右上の「Read/Write」をクリックして読み書き可能にする必要があります。







次は、左ペインのメニューを、
subscription→ACSのサブスクリプション→resourceGroups→ACSのリソース→Microsoft.Compute→virtualMachineScaleSets→該当するScaleSet
の順に選択します。

ScaleSetのリソースは、こんな感じで表示されます。
















「EDIT」をクリックして、「sku」の中の「capacity」を1から3に変更します。
変更したら「PUT」を押します。
















capacityが3に変更されました。
















ポータルで見てみましょう。
「仮想マシンのスケールセット」を探してみましょう。
こんな風に3に変わっていると思います。










容量(capacity)が3になったので、docker-compose でスケールしてみましょう。
azureuser@xxx:~$  docker-compose scale web=3
Creating and starting 2 ... done
Creating and starting 3 ... done
azureuser@xxx:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                                                NAMES
242e38975a34        yeasy/simple-web    "/bin/sh -c 'python i"   5 seconds ago       Up 4 seconds        0.0.0.0:32770->80/tcp                                                                                                                azureuser_web_3
e27e1035774c        yeasy/simple-web    "/bin/sh -c 'python i"   5 seconds ago       Up 4 seconds        0.0.0.0:32769->80/tcp                                                                                                                azureuser_web_2
ae8a0ea43b50        yeasy/simple-web    "/bin/sh -c 'python i"   45 minutes ago      Up 45 minutes       0.0.0.0:32768->80/tcp                                                                                                                azureuser_web_1
5a161555c072        swarm:1.1.0         "/swarm manage --repl"   About an hour ago   Up About an hour    0.0.0.0:2375->2375/tcp                                                                                                               containers_swarm_1
058236a13875        progrium/consul     "/bin/start -server -"   About an hour ago   Up About an hour    0.0.0.0:8300-8302->8300-8302/tcp, 0.0.0.0:8400->8400/tcp, 53/tcp, 53/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301-8302->8301-8302/udp   containers_consul_1

前回の記事が1だったので、無事スケールできています。




















【Microsoft Azure】Azure Container Service で Docker と向き合う

いろいろあってDockerと向き合うことになったので、Azure でやるなら Azure Container Service(以下ACS) を使ってみようと。
https://azure.microsoft.com/ja-jp/services/container-service/

Apache Mesos または Docker Swarm のどちらかのオーケストレーションツールを使ってDockerコンテナを管理するっていうので、今回はDockerSwarmを選択。

構成などについては、こちらのドキュメントをまずは読んでください。
https://github.com/Azure/azure-quickstart-templates/blob/master/101-acs-swarm/docs/SwarmWalkthrough.md

ACSは、ポータルの「テンプレートからデプロイ」でARMテンプレートを使ってデプロイします。












こちらから「テンプレートのデプロイ」を選択します。



















ACSのテンプレートはgithubで公開されています。
https://github.com/Azure/azure-quickstart-templates/tree/master/101-acs-swarm (これはDockerSwarmのもの)

実際に使うARMテンプレートはこちら。これを
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-acs-swarm/azuredeploy.json

「テンプレートの編集」を選んで















ACSのARMテンプレートを貼り付けて保存します。













次に、パラメーターをセットします。
とりあえず、DNSNAMEPREFIX(FQDNにつける識別用プレフィックス)とSSHRSAPUBLICKEY(SSHでアクセスする際のRSA公開鍵)を入力して「OK」を押します。

















リソースグループを選ぶなり作成するなりして、リージョンを決めます。
最後に、法律条項を確認して作成します。















デプロイが終わると、以下の2つのFQDNが決定します。

masterFQDN:{DNSNAMEPREFIX}mgmt.japaneast.cloudapp.azure.com
agentFQDN:  {DNSNAMEPREFIX}agents.japaneast.cloudapp.azure.com

masterへのssh接続は、以下のようにします。公開鍵が登録されているので、秘密鍵のパスフレーズでログイン出来ます。

$ ssh azureuser@{DNSNAMEPREFIX}mgmt.japaneast.cloudapp.azure.com -A -p 2200

Are you sure you want to continue connecting (yes/no)? yes
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.19.0-58-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Fri Apr 15 08:28:32 UTC 2016

  System load: 0.15              Memory usage: 1%   Processes:       98
  Usage of /:  5.7% of 28.80GB   Swap usage:   0%   Users logged in: 0

  Graph this data and manage this system at:
    https://landscape.canonical.com/

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

azureuser@xxx:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                                                NAMES
5a161555c072        swarm:1.1.0         "/swarm manage --repl"   10 minutes ago      Up 8 minutes        0.0.0.0:2375->2375/tcp                                                                                                               containers_swarm_1
058236a13875        progrium/consul     "/bin/start -server -"   10 minutes ago      Up 8 minutes        0.0.0.0:8300-8302->8300-8302/tcp, 0.0.0.0:8400->8400/tcp, 53/tcp, 53/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301-8302->8301-8302/udp   containers_consul_1

とりあえず動いています。
ここで簡単なWebアプリコンテナを動かしてみます。
以下の内容で、docker-compose.ymlというファイルを作成します。
web:
  image: "yeasy/simple-web"
  ports:
    - "80"
  restart: "always"

それから、docker-composeコマンドでコンテナをUPします。
docker ps コマンドで確認できます。
azureuser@xxx:~$ docker-compose up -d
Pulling web (yeasy/simple-web:latest)...
latest: Pulling from yeasy/simple-web
efd26ecc9548: Pull complete
a3ed95caeb02: Pull complete
d1784d73276e: Pull complete
72e581645fc3: Pull complete
9709ddcc4d24: Pull complete
2d600f0ec235: Pull complete
de1491f1bbd4: Pull complete
4becc568d2ff: Pull complete
6aeb62f4b3fa: Pull complete
77144c15ca8f: Pull complete
811db2e8b100: Pull complete
Digest: sha256:35e52520b8f98a092af6ce10c9fdd3ca6ca77f0b79f9d652c29bdd5d17c1c7aa
Status: Downloaded newer image for yeasy/simple-web:latest
Creating azureuser_web_1
azureuser@xxx:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                                                NAMES
ae8a0ea43b50        yeasy/simple-web    "/bin/sh -c 'python i"   23 seconds ago      Up 22 seconds       0.0.0.0:32768->80/tcp                                                                                                                azureuser_web_1
5a161555c072        swarm:1.1.0         "/swarm manage --repl"   20 minutes ago      Up 19 minutes       0.0.0.0:2375->2375/tcp                                                                                                               containers_swarm_1
058236a13875        progrium/consul     "/bin/start -server -"   20 minutes ago      Up 19 minutes       0.0.0.0:8300-8302->8300-8302/tcp, 0.0.0.0:8400->8400/tcp, 53/tcp, 53/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301-8302->8301-8302/udp   containers_consul_1                                                                                                             containers_swarm_1

ブラウザから「{DNSNAMEPREFIX}agents.japaneast.cloudapp.azure.com」へアクセスするとWebアプリの画面が見えます。