2016年11月9日水曜日

KDDI Mobile x h2o を契約したときにいろいろはまったまとめ

ひょんなことから、アメリカに1週間ほど行くのでモバイルルータとか いろいろ見ていたのだけれど、せっかくスマホがSIMロック解除できるので、 格安 SIM を探してみた。

国内 MVNO で海外で利用できる SIM としては、たとえば IIJ MIO の 「IIJmio海外トラベルSIMサービス」が比較的入手しやすいのだけれど、 DoCoMo のローミングサービスを使っているのか、結構割高感が強い
。
IIJ、海外渡航者向けプリペイド型SIMカード「IIJmio海外トラベルSIMサービス」を提供開始

Amazon を探すと AT&T とかの SIM を輸入して販売している業者が結構あった。 けれど、AT&T のページを見ても日本と契約形態が微妙に違うのと、使い捨て プランが見つからない。

そんな中で、見つけたのが KDDI mobile x h2o 。

一ヶ月だけの契約ができて、2GB $30 からって言うのも短期旅行者には魅力的。

今回滞在期間は6日ほどで、価格コムの海外向けレンタルモバイルルータの価格を 見ても、1日600円弱 で256MB/日ぐらいが多い。6日で3000円ちょっといってしまい 値段的には変わらず、256MB × 6日で、1.5 GB 程度なので、ちょっと割高に なってしまう。

なので、今回お試しもかねて契約してみることにした。

SIMカードの入手

公式のオンラインショップでは日本国内向けの販売が見つけられなかった。
Amazon で KDDI H2O とかのキーワードで検索すると 200-400円ぐらいの SIM カード見つかるので、そちらで購入した。代理店が複数あり不安になるけれど SIM カードは、SIM カードなのと値段が値段なので、外してもいいや、エイ!って 購入した。アマゾンプライム使ってなかったので、お急ぎ便で370円の送料が かかった。400円の SIM に送料 370 円って....とも思ったが、普通に WallMart の通販見ても $12.95 とかしているので、よしとした。
よく日には無事着いた。

SIMの登録

メニューがわかりにくいのだけれど TOP ページの下のほうから、 「電話番号発行登録(アクティベーション)」をクリックする。 そこから、"「 Wireless 」音声通話プラン新規アクティベーション + 単発チャージ" を選択する。メアド、パスワード、名前、などを入力して新規会員登録する。
アメリカでの連絡先は無いので、「999-999-9999」を入力する。

次に「電話番号発行登録(アクティベーション)」に飛ぶので、同じく名前と SIMの台紙に書いてある "ActFast Code" を入力する。

ここで、料金プランを選択する。一回払いなので「PAY AS YOU GO」かなと 思って選択したら、このプランだと10 セント/MB とめちゃくちゃ高いので 「MONTH PLAN LTE」から選択します。一番安い $30 だと、つかいきるととまって しまうので、使えなくなるので、$40 のプランを選択しました。

最初 「PAY AS YOU GO」を選択してしまうと WEB 上からは変更できなくなり、 電話でサポートにお願いして変更してもらう必要があります。

また 「PAY AS YOU GO」でチャージした金額は無効になるので注意が必要です。

IMEI、SIM 番号は入力しなくても大丈夫です。米国エリア局番や都市名は適当 でいいですが、電
話番号に反映されます。

登録が終わると電話番号が表示されるので忘れずに控えておきましょう。 あとから確認するのは端末に刺さないわからなくなります。また国内では 確認する手段がありません。

料金のチャージ


続いてカード情報の入力です。先ほど控えた電話番号を入力して、Search Plan をクリックすると、選択したプランに応じて、チャージ金額が選択できるように なります。

続いてカード情報の入力ですが、ここではまりました。郵便番号の入力が 数字のみ5桁しか入力できません。カードの種類によっては、ここで承認が 降りないようです。

その場合も同じくサポートに電話して、カードを登録してもらうことになります。 またチャージしたときから30日間有効になるので、帰国の日程に合わせて、 チャージする日を選ぶ必要があります。

自動引き落とし設定をしなければ、1回の課金だけになります。 その場合30日後に利用できなくなります。 追加チャージしない場合はさらに30日後に電話番号もなくなります。継続して 電話番号を保持したい人は注意が必要です。

以上で手続きは終わりです。後は現地でSIMを差し替えて APN の設定などを行う だけで利用可能になるはずです。実際の使用感などはまた後ほど。

まとめ

よいと思ったのは以下です。
  • 日本国内の固定電話向け通話が無料。出張などでは、結構ありがたいです。
  • 携帯電話向けも無料枠がある。大体70分ぐらいあるそうです。 データ通信は通話以外に使いたいので、通話枠があるのはうれしいです。
  • 日本語でサポートが受けられる。
    日本語サポートはやっぱり楽ですね。プランなどの細かいやり取りを英語で するのはつらいです。サポートの担当の方は親切でわかりやすかったです。 日本からフリーダイヤルの番号があるのもよいです。
逆にもうちょっと改善してほしい点は以下です。
  • WEBのインターフェイスがわかりにくい。どこに何があるのか結構探しました。 全部電話で済ましたほうが簡単かも。
  • サポートの受付時間がアメリカ東部時間。日本からかけるときは早朝か、 深夜しか実際にかけられない。
  • 国内でのSIMの入手先がちょっとわかりにくい
これからこういうサービスも増えてくると思うので、今後が楽しみです。

2016年3月23日水曜日

Amazon Linux AMI 2016.03 のリリースノートをみてちょっといいなっておもった

Amazon Linux AMI 2016.03 が、3月22日付けでリリースされました。

Amazon Linux AMI 2016.03 Release Notes
Amazon Linux AMI 2016.03 Packages

リリースノートを見ていて以下の記載におっとおもった。

"NUMA balancing disabled by default"

普通の人はほとんど気にしないと思うんだけれど、微妙にマニアックなチューニング感がとても気になった。

NUMA

NUMA は プロセッサ とメモリの接続方式のこと。従来の方式ではプロセッサとメモリは一つのメモリコントローラ経由で接続されていた。ところが搭載されているプロセッサの数が多くなると、一つのメモリコントローラへ複数のプロセッサからのアクセスが集中し、ボトルネックになってくる。しょうがないので、プロセッサ単位でメモリを接続してしまえばいいのでは?と考えたひとがいる。
これで無事解決かっていうとそうでもなくて、プロセッサに直接つながっているメモリのアクセスは早くなるけれど、ほかのプロセッサに接続されているメモリへのアクセスが遅くなるという問題が発生する。それでも各プロセスがアクセスするデータは多くの場合、局所性が働くので全体としては大体早くなるはず!ということになっている。

NUMA balancing

当然そういった機構に関して、OS のサポートが必要になる。たとえば、同じプロセッサにアクセスするようにプロセスをスケジューリングするとか、メモリの割り当てをNUMA を考慮して、どこに割り当てるかとか、時々メモリの割り当て状況を見直すとか、結構いろいろなことが発生する。

こうした処理が追加されるので、OSの処理に若干のオーバーヘッドが発生する。なので sysctl を通じて、オフオンができるようになっている。

オフにする場合
# echo 0 > /proc/sys/kernel/numa_balancing

オンにする場合
# echo 1 > /proc/sys/kernel/numa_balancing

仮想化されている場合、CPU が PIN されてなければ実際はハイパーバイザでゲストに割り当てるCPUをスケジュールを決めるので、あまりゲスト側でNUMAを意識してもしょうがないのかな?という気もする。
それにオーバーヘッドがあるといっても通常はわずかなので、ほとんどの場合気にならないレベルなのだろうけど、AWS ぐらいあほみたいにコンピューティングユニット抱えていると電気代とか、ちりつもで結構馬鹿にならないのかもしれないとも思う。

とはいえ、比較的おおきなインスタンスでは、NUMA balancing を ON にしたほうが、効率的な場合もあって、実際に以下のインスタンスでは、有効にしたほうがいいようだ。


  • cr1.8xlarge
  • c3.8xlarge
  • r3.8xlarge
  • i2.8xlarge
  • c4.8xlarge
  • d2.8xlarge
  • g2.8xlarge
  • m4.10xlarge

有効にするには以下のコマンドラインを実行するように記載がある。

$ sudo sysctl -w 'kernel.numa_balancing=1'
$ echo 'kernel.numa_balancing = 1' | sudo tee /etc/sysctl.d/50-numa-balancing.conf


参考
「仮想化のチューニングと最適化ガイド」
  8.3. NUMA の自動負荷分散
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Virtualization_Tuning_and_Optimization_Guide/sect-Virtualization_Tuning_Optimization_Guide-NUMA-Auto_NUMA_Balancing.html

wikipedia の NUMA に関する項目
https://ja.wikipedia.org/wiki/NUMA

2015年8月18日火曜日

5 step で Chef Server 12 を構築する手順

以下の URL に記載がある手順に従って Chef Server 12 を構築する。
https://docs.chef.io/install_server.html

※ AWS で構築する場合は、t2.micro だとメモリ不足で起動しない。

1. packagecloud からリポジトリ設定のインポート


curl -s https://packagecloud.io/install/repositories/chef/stable/script.rpm.sh | sudo bash

2. chef-server-core パッケージのインストール

sudo yum install -y chef-server-core
   ...(snip)...
Installed:
  chef-server-core.x86_64 0:12.1.2-1.el6

Complete!

3. 以下のコマンドを実行して、各種サービスを開始

sudo chef-server-ctl reconfigure
..... たくさんメッセージが出力される。
いろいろなレシピが実行されるので結構時間がかかる。
 

4. 最初 chef-server ユーザーの作成

書式は以下の通り
chef-server-ctl user-create <ユーザ名> <名> <姓> <メールアドレス> <パスワード> --filename <RSA Private Key を保存するファイル名>
<実行例>
sudo chef-server-ctl user-create t_suzuki taro suzuki t_suzuki@example.com xxsecretxx --filename t_suzuki_chef.key

作成された、プライベートキーはワークステーションからのアクセスに
使用されるので別途保管しておく

登録されているユーザーの一覧は user-list サブコマンドで表示する。
$ sudo chef-server-ctl user-list
pivotal
t_suzuki

登録されているユーザーの詳細は user-show サブコマンドで表示する。
$ sudo chef-server-ctl user-show t_suzuki
display_name: taro suzuki
email:        t_suzuki@example.com
first_name:   taro
last_name:    suzuki
middle_name:
public_key:   -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsgYZbeuev/FzT+kI9iqE
7ORU/w8BpZa33tOXs+bafFUhaMYslnVZ5azMbZSRBgobOdTX5Gn/qRUrVQw1czxC
TXx+0tDe68T88McnOFdRjEUTPF1WZh7x1QSgUXSeC1c0388UrdQbFXCcEi8AnPdk
P/YdpzMjJdOkZPFiJpUVZlbUyVs/TLMe5LbvU40x/LJ/8W3kWlHd42ixIjmEC6Ba
k1DkP9FIs9gvUQINgQRLvZK8XWF2AmnF1ew0Sgui5kDWja0VbSecKTW+1XgJib1y
ifxD08qgRTZQBNkog0mqBf5jeXN5dZgqbiKABZ6vPmQxHTZc8fywajj1TH+sOzNj
gQIDAQAB
-----END PUBLIC KEY-----

5. 最初の組織(会社やグループなど)の作成


書式は以下の通り
sudo chef-server-ctl org-create <組織の略称> "<組織のフルネーム>" --association_user <組織に関連付けるユーザ> --filename <RSA秘密鍵を保存するファイル>

実行例
sudo chef-server-ctl org-create example "example inc.," --association_user t_suzuki --filename example-validator.key

登録されている組織の一覧は org-list サブコマンドで表示する
$ sudo chef-server-ctl org-list
example

登録されている組織の詳細は org-show サブコマンドで表示する

$ sudo chef-server-ctl org-show example
full_name: example
guid:      56000f67fc6ce0626817b709ba191895
name:      example

これで最低限動作するはず。

2015年8月17日月曜日

chef 12 server のインストール で混乱したのでメモを残しておく

以下の公式サイトからダウンロードしようとすると、何か登録しないといけないようだが キャンセルしてもダウンロードはできてしまうので、登録は必須ではないらしい。
https://downloads.chef.io/chef-server/

配布自体は package cloud 経由で行われている。
https://packagecloud.io/chef/stable/install

以下のMLスレッドにある記事を見ると今後こっちが主流になるらしい。
http://lists.opscode.com/sympa/arc/chef/2014-12/msg00193.html


sha1 の結果は一緒だったので、簡単な方を選ぶ。
上記 packagecloud のインストラクションに従い以下のコマンドを実行する。

curl -s https://packagecloud.io/install/repositories/chef/stable/script.rpm.sh | sudo bash

実行すると、/etc/yum.repos.d/ 配下に chef_stable.repo というファイルが 作成され、普通に yum でインストールできるようになる。
438 MB と結構でかいので少しインストールに時間がかかる。

$ sudo yum install chef-server-core
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main/latest                                                                                                                               | 2.1 kB     00:00
amzn-updates/latest                                                                                                                            | 2.3 kB     00:00
Resolving Dependencies
--> Running transaction check
---> Package chef-server-core.x86_64 0:12.1.2-1.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

======================================================================================================================================================================
 Package                                     Arch                              Version                                   Repository                              Size
======================================================================================================================================================================
Installing:
 chef-server-core                            x86_64                            12.1.2-1.el6                              chef_stable                            438 M

Transaction Summary
======================================================================================================================================================================
Install  1 Package

Total download size: 438 M
Installed size: 1.2 G
Is this ok [y/d/N]: y
Downloading packages:
chef-server-core-12.1.2-1.el6.x86_64.rpm                                                                                                       | 438 MB     00:40
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : chef-server-core-12.1.2-1.el6.x86_64                                                                                                               1/1
  Verifying  : chef-server-core-12.1.2-1.el6.x86_64                                                                                                               1/1

Installed:
  chef-server-core.x86_64 0:12.1.2-1.el6

Complete!

ちなみに yum search すると、chef-server と chef-server-core の二つが 表示されて、非常にややこしい。chef-server の方は以下のパッケージが インストールされる。

chef-server-11.1.7-1.el6.x86_64.rpm

こっちは chef 11 のサーバーなので要注意。他に以下のパッケージも 11 ってバージョンがついている。

chef-container-11.16.2-1.x86_64.rpm
private-chef-11.3.2-1.el6.x86_64.rpm

2015.8.18 追記
ちなみにこのリポジトリから取得できるパッケージは以下のとおりでした。
$ yum --disablerepo=* --enablerepo=chef_stable list available
Loaded plugins: priorities, update-motd, upgrade-helper
Available Packages
chef.x86_64                                         12.4.1-1.el6                                            chef_stable
chef-container.x86_64                               11.16.2-1                                               chef_stable
chef-ha.x86_64                                      1.0.0_rc.3-1                                            chef_stable
chef-marketplace.x86_64                             0.0.1-1.el6                                             chef_stable
chef-server.x86_64                                  11.1.7-1.el6                                            chef_stable
chef-server-core.x86_64                             12.1.2-1.el6                                            chef_stable
chef-sync.x86_64                                    1.0.0~rc.6-1.el5                                        chef_stable
chefdk.x86_64                                       0.7.0-1.el6                                             chef_stable
delivery.x86_64                                     0.3.210-1.el6                                           chef_stable
delivery-cli.x86_64                                 20150811030818+20150811030818-1.el6                     chef_stable
opscode-analytics.x86_64                            1.1.5-1.el6                                             chef_stable
opscode-manage.x86_64                               1.21.0-1.el6                                            chef_stable
opscode-push-jobs-client.x86_64                     1.1.5-1.el6                                             chef_stable
opscode-push-jobs-server.x86_64                     1.1.6-1                                                 chef_stable
opscode-reporting.x86_64                            1.5.1-1.el6                                             chef_stable
private-chef.x86_64                                 11.3.2-1.el6                                            chef_stable
supermarket.x86_64                                  2.0.0~alpha.0-1.el6                                     chef_stable

2015年7月21日火曜日

ほとんど何もないところから無理やり、S3 にでっかいファイルをアップロードしたメモ

gzip -c < verybigfile | split -b 100m -d -a 3 - verybigfile.gz.
for FF in verybigfile.gz.* ; do ./s3up.sh $FF ; done

$ cat s3up.sh
────────────────────────────────────
#!/bin/bash
file=$1
bucket=shellupload
resource="/${bucket}/${file}"
contentType="application/octet-stream"
dateValue=`date -R`
stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
s3Key=XXXXXXXXXXXXXXXXXXXXXXXX
s3Secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`
curl -v -L -X PUT -T "${file}" \
  -H "Host: ${bucket}.s3.amazonaws.com" \
  -H "Date: ${dateValue}" \
  -H "Content-Type: ${contentType}" \
  -H "Authorization: AWS ${s3Key}:${signature}" \
  https://${bucket}.s3.amazonaws.com/${file}
────────────────────────────────────

このシェルをどこから拾ったか忘れた。しくしく
多分ここからこぴって、適当になおした。

2015年6月19日金曜日

Amazon Elastic File System (EFS) を気づいたら使えるようになっていたので、早速起動してみた。

Amazon Elastic File System (EFS) を気づいたら使えるようになっていたので、早速起動してみた。 とりあえず起動してみただけなので、とりあえずファーストレビュー。

EFS は AWS が提供する、NFS v4 サーバ。ディスク容量が自動的に割り当てられるのと、サーバ自体がスケーラブルになっているとの触れ込み。

これまで、NFS のサイジングやディスク容量の管理に悩まされていたシステム管理者にとってまさにこれだけのために、AWSに移行したくなる素晴らしいソリューション。

また s3fs  の遅さやパーミッション設定の難しさに悩んでいた人にも朗報となるだろう。しかも料金はディスクを使用している分だけ。無駄にストレージに投資することもない。

マネージメントコンソールからEFSのアイコンをクリック。プレビューの申請が通っていないと申し込み画面に飛ばされる。現在は us-west-2 (Oregon) のみ使えるようになっていた。


クリックすると最初の案内画面に飛ばされる。迷わず "Create File System" をクリック。


VPC 、Subnet 、Security Group を AZ 毎に指定。実運用に回すときは、NACL や Security Group の設計に配慮が必要になるだろう。


IP アドレスは自分で指定することも自動的に割り当てることも可能。VPC 内なのでそれほどアドレスにこだわる必要もないと思うので、自動割り当て。可用性等を考慮するとどの道、DNS名での指定が有効だと思われる。



次はタグ付け。とりあえず Name タグだけつけておく。


最後に確認画面。特に変更がなければ "Create File System" をクリックして作成完了。

これで完了。



非常に簡単に高性能で可用性が高い共有ファイルシステムが使えるようになりました。

とは言え、万能の道具は無いのでいくつか注意事項はあると思います。
特にNFS 上の単一ファイルへの書き込み時排他制御には十分注意が必要です。

マニュアルにも明示的にロックの制限が記載されています。
詳細はマニュアルを確認していただくとして、ロックに関しては以下の制限があります。
  • 一つのファイルに対して、すべてのファイルシステムのユーザーに対して87 までしかロックがかけられません。複数のサーバにまたがっても87までです。
また Linux NFSv4 の制限として以下があります。
  • 一インスタンス当たり同時に128ユーザまでしか、ファイルを同時にオープンできません。
  • 一インスタンス当たり 32,768 ファイルまでしか同時にファイルを開けません。
  • 一マウント当たり、8192 ロックまでしか獲得できません。
  • 一マウント当たりユニークなファイルとプロセスの組み合わせは、256までです。例えば 1 プロセスならば、256ファイルのロックを取得できますが、8プロセスなら 32ファイルまでのロックを獲得できません。
まぁもともと NFS のロックはあてにしてはいけない(いつの話だよw)っていう話もありますし、同時実行性能の観点からはできるだけロックレスな構成にする必要もあります。

とは言え EFS の登場で、これまで オンプレから移行しづらかった案件やスケーラビリティに問題があったシステムでも、容易に拡張可能になるのではないでしょうか。



2015年1月9日金曜日

EC2スポットインスタンスのターミネート通知機能が利用できるようになったので、ちょっと試してみた。

AWS EC2 にはスポットインスタンスというちょっと変わった利用方法があります。
インスタンス起動時に価格を指定して起動することができます。通常オンデマンドより大幅に安い値段でインスタンスを起動できますが、スポット価格が指定した価格を上回った場合、突然インスタンスが停止してしまいます。

安く使えるのでいいのですが、突然止まってしまってあ゛っ!!!てなることがあります。そういう声も多いのか、インスタンスの停止を予告する機能が追加されました。

【AWS発表】EC2スポットインスタンスのターミネート通知機能

多分以下のような使い方をするのではないでしょうか?以下の例では、通知を受けたら自身のスナップショットを作成しています。他の使い方もあるかもしれません。

#!/bin/bash

#You Need Set Proper IAM Role
#GET REGION
REGION=`curl -s -f  http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//g'`

#Instance ID
InstanceID=`curl -s -f  http://169.254.169.254/latest/meta-data/instance-id`

#wait until the "temination-time" available
until curl -s -f  http://169.254.169.254/latest/meta-data/spot/termination-time
do
  sleep 5
done

#Warning all
wall "!!!!!!!!!!spot instance termination begin!!!!!!!!!"

#Wait a while for saving data etc.
sleep 30

#GET EBS
EBS=`aws ec2 describe-instances --region=${REGION} --output text --instance ${InstanceID} | awk '/^EBS/{print $5}'`

#GET snapshots
for II in $EBS ; do
  #the voodoo magic
  sync; sync; sync;
  aws ec2 create-snapshot --volume-id $II --region $REGION
done