CloudWatch Logsでログを気軽にチェックする

CloudWatch Logs使ってますか?
filter + カスタムメトリックスで簡単な監視を設定できるし、色々と便利ですよね。

アプリでエラーが発生した時も、カスタムメトリックスのアラートを使えば、通知もしてくれるので簡単な監視のシステムはこれでなんとかなる感じです。

しかし、アラートを検知してもそのログを一緒に通知してくれれば便利なんですが(Amazonさんお願いします!!)、原因を調べるためにSSHでサーバに入ってログを確認する必要があります。

けど、その都度サーバにログインして調べるのも、開発者にアカウントを発行してと言った設定も出てくるし、間違えて変なコマンドを実行されたら大変な事になります。

そこで、もっと気軽にログを見れる方法がないか考えてみたところ、CloudWatch Logsに送り込んでるログを見れるようにすれば、わざわざサーバにSSHしなくてもできるんじゃないかと思いました。

そんな訳で、スクリプトを書いた。
https://github.com/sparkgene/cloudwatch_logs_tail

使い方

オプション

% ruby tail_cwlog.rb --help

Usage: tail_cwlog [options]
        --use-iamrole                USE IAM ROLE
        --aws-region=[VALUE]         AWS REGION
        --aws-access-key=[VALUE]     AWS ACCESS KEY
        --aws-secret-key=[VALUE]     AWS SECRET KEY
        --discribe-groups            Describe log groups
        --discribe-streams           Describe log streams
        --tailf                      tail -f log stream
        --tail=[VALUE]               tail log stream
        --log-group=[VALUE]          log group name
        --log-stream=[VALUE]         log stream name

CloudWatch Logsに登録されているLog Groupの一覧表示

% ruby tail_cwlog.rb --aws-region=ap-northeast-1 --discribe-groups

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure

Log Groupに含まれているLog Streamの一覧取得

% ruby tail_cwlog.rb --aws-region=ap-northeast-1 --discribe-streams --log-group=/var/log/cron

server-apps-1
server-apps-2
server-apps-3

tail -100 みたいに過去のログを表示したい場合

% ruby tail_cwlog.rb --aws-region=ap-northeast-1 --log-group=/var/log/cron --log-stream=server-apps-3 --tail=100

Feb 21 01:22:01 server-apps-3 CROND[2837]: (root) CMD (/var/awslogs/bin/awslogs-nanny.sh > /dev/null 2>&1)
Feb 21 01:23:01 server-apps-3 CROND[2863]: (root) CMD (/var/awslogs/bin/awslogs-nanny.sh > /dev/null 2>&1)
Feb 21 01:24:01 server-apps-3 CROND[2890]: (root) CMD (/var/awslogs/bin/awslogs-nanny.sh > /dev/null 2>&1)

tail -fみたいにログを監視したい場合

% ruby tail_cwlog.rb --aws-region=ap-northeast-1 --log-group=/var/log/cron --log-stream=server-apps-3 --tailf

Feb 21 01:22:01 server-apps-3 CROND[2837]: (root) CMD (/var/awslogs/bin/awslogs-nanny.sh > /dev/null 2>&1)
Feb 21 01:23:01 server-apps-3 CROND[2863]: (root) CMD (/var/awslogs/bin/awslogs-nanny.sh > /dev/null 2>&1)
Feb 21 01:24:01 server-apps-3 CROND[2890]: (root) CMD (/var/awslogs/bin/awslogs-nanny.sh > /dev/null 2>&1)
    • tailf オプションでは、デフォルトで最後の20行を表示して、ログの監視を行います。

5秒に1回ログを見に行きますので、サーバからCloudWatch Logsにアップロードされ、手元に届くまでタイムラグがあります。
よりリアルタイムで監視したい場合は、

sleep(5)

となっている部分、調整して使ってください。

注意

CloudWatch Logsに格納されているデータをダウンロードする場合は、AWSの転送料及びAPI利用料がかかります。

http://aws.amazon.com/cloudwatch/pricing/

Amazon CloudWatch API Requests
$0.01 per 1,000 GetMetricStatistics, ListMetrics, or PutMetricData requests

Amazon CloudWatch Logs*
$0.50 per GB ingested**
$0.03 per GB archived per month***
Data Transfer OUT from CloudWatch Logs is priced equivalent to the “Data Transfer OUT from Amazon EC2 To” and “Data Transfer OUT from Amazon EC2 to Internet” tables on the EC2 Pricing Page(http://aws.amazon.com/ec2/pricing/).

ご利用は計画的に。

td-agentのインストールでハマった件

*.posファイルが存在するとtd-agentが起動できない現象に遭遇

サーバは
Amazon Linux 2014.09 (hvm)

td-agentのバージョン

[root@server1 td-agent]# td-agent --version
td-agent 0.10.55

[root@server1 td-agent]# rpm -qi td-agent
Name        : td-agent
Version     : 1.1.21
Release     : 0
Architecture: x86_64
Install Date: 20150205115141秒
Group       : System Environment/Daemons
Size        : 103551538
License     : APL2
Signature   : DSA/SHA1, 20141020130739秒, Key ID 1093db45a12e206f
Source RPM  : td-agent-1.1.21-0.src.rpm
Build Date  : 20141020083113秒
Build Host  : ip-10-123-31-198.ec2.internal
Relocations : (not relocatable)
Vendor      : Treasure Data, Inc.
URL         : http://treasure-data.com/
Summary     : td-agent
Description :

confファイルの設定は

  <source>
    type config_expander
    <config>
      type tail
      format syslog
      path /var/log/messages
      pos_file /var/log/td-agent/syslog.messages.pos
      tag syslog.messages
    </config>
  </source>

  <match *.**>
    type forest
    subtype s3
    <template>
      s3_bucket hoge
      s3_region fuga
      s3_object_key_format %{path}%{time_slice}.%{file_extension}
      path ${tag}/
      buffer_path /var/log/td-agent/buffer/${tag}
      time_slice_format %Y/%m/%d/%H/%H%M.${hostname}
      flush_interval 1m
    </template>
  </match>
  <source>
    type forward
    port 24224
  </source>

td-agentが落ちてしまう時のログ

2015-02-05 12:19:11 +0000 [info]: fluent/engine.rb:107:block in configure: adding source type="config_expander"
2015-02-05 12:19:11 +0000 [trace]: fluent/plugin.rb:72:register_impl: registered input plugin 'config_expander'
2015-02-05 12:19:11 +0000 [info]: fluent/engine.rb:107:block in configure: adding source type="config_expander"
2015-02-05 12:19:11 +0000 [info]: fluent/engine.rb:107:block in configure: adding source type="config_expander"
2015-02-05 12:19:11 +0000 [info]: fluent/engine.rb:107:block in configure: adding source type="config_expander"
2015-02-05 12:19:11 +0000 [info]: fluent/engine.rb:107:block in configure: adding source type="config_expander"
2015-02-05 12:19:11 +0000 [info]: fluent/engine.rb:107:block in configure: adding source type="config_expander"
2015-02-05 12:19:11 +0000 [info]: fluent/engine.rb:107:block in configure: adding source type="config_expander"
2015-02-05 12:19:11 +0000 [info]: fluent/engine.rb:107:block in configure: adding source type="config_expander"
2015-02-05 12:19:11 +0000 [info]: fluent/engine.rb:107:block in configure: adding source type="config_expander"
2015-02-05 12:19:11 +0000 [info]: fluent/engine.rb:107:block in configure: adding source type="forward"
2015-02-05 12:19:11 +0000 [info]: fluent/engine.rb:124:block in configure: adding match pattern="*.**" type="forest"
2015-02-05 12:19:11 +0000 [trace]: fluent/plugin.rb:72:register_impl: registered output plugin 'forest'
2015-02-05 12:19:11 +0000 [info]: plugin/in_tail.rb:475:initialize: following tail of /var/log/messages
2015-02-05 12:19:11 +0000 [trace]: fluent/plugin.rb:72:register_impl: registered output plugin 's3'
2015-02-05 12:19:11 +0000 [info]: fluent/engine.rb:237:ensure in run: shutting down fluentd
2015-02-05 12:19:11 +0000 [info]: fluent/supervisor.rb:240:supervise: process finished code=256
2015-02-05 12:19:11 +0000 [warn]: fluent/supervisor.rb:243:supervise: process died within 1 second. exit.

gem達

[root@server1 td-agent]# ll /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/
合計 244
drwxr-xr-x 3 root root 4096  25 11:51 aws-sdk-1.52.0
drwxr-xr-x 5 root root 4096  25 12:09 aws-sdk-v1-1.61.0
drwxr-xr-x 4 root root 4096  25 11:51 bson-1.11.1
drwxr-xr-x 3 root root 4096  25 11:51 bson_ext-1.8.6
drwxr-xr-x 6 root root 4096  25 11:51 bundler-1.3.6
drwxr-xr-x 6 root root 4096  25 11:52 cool.io-1.3.0
drwxr-xr-x 7 root root 4096  25 11:51 diff-lcs-1.2.5
drwxr-xr-x 5 root root 4096  25 11:51 fluent-logger-0.4.9
drwxr-xr-x 4 root root 4096  25 11:51 fluent-mixin-config-placeholders-0.3.0
drwxr-xr-x 4 root root 4096  25 11:51 fluent-mixin-plaintextformatter-0.2.6
drwxr-xr-x 4 root root 4096  25 11:52 fluent-plugin-config-expander-0.1.5
drwxr-xr-x 5 root root 4096  25 11:51 fluent-plugin-flume-0.1.1
drwxr-xr-x 4 root root 4096  25 11:52 fluent-plugin-forest-0.3.0
drwxr-xr-x 5 root root 4096  25 11:51 fluent-plugin-mongo-0.7.3
drwxr-xr-x 4 root root 4096  25 11:51 fluent-plugin-rewrite-tag-filter-1.4.1
drwxr-xr-x 4 root root 4096  25 12:09 fluent-plugin-s3-0.5.2
drwxr-xr-x 5 root root 4096  25 11:51 fluent-plugin-scribe-0.10.12
drwxr-xr-x 4 root root 4096  25 11:51 fluent-plugin-td-0.10.22
drwxr-xr-x 4 root root 4096  25 11:51 fluent-plugin-td-monitoring-0.1.3
drwxr-xr-x 4 root root 4096  25 11:51 fluent-plugin-webhdfs-0.3.1
drwxr-xr-x 7 root root 4096  25 11:51 fluentd-0.10.55
drwxr-xr-x 3 root root 4096  25 11:51 git-1.2.8
drwxr-xr-x 4 root root 4096  25 11:51 hirb-0.7.2
drwxr-xr-x 7 root root 4096  25 11:51 http_parser.rb-0.5.1
drwxr-xr-x 6 root root 4096  25 11:51 httpclient-2.4.0
drwxr-xr-x 4 root root 4096  25 11:51 iobuffer-1.1.2
drwxr-xr-x 4 root root 4096  25 11:51 ipaddress-0.8.0
drwxr-xr-x 6 root root 4096  25 11:51 jeweler-1.6.2
drwxr-xr-x 9 root root 4096  25 11:51 json-1.7.7
drwxr-xr-x 4 root root 4096  25 11:51 ltsv-0.1.0
drwxr-xr-x 4 root root 4096  25 11:51 mini_portile-0.6.0
drwxr-xr-x 4 root root 4096  25 11:51 mixlib-cli-1.5.0
drwxr-xr-x 4 root root 4096  25 11:51 mixlib-config-2.1.0
drwxr-xr-x 4 root root 4096  25 11:51 mixlib-log-1.6.0
drwxr-xr-x 3 root root 4096  25 11:51 mixlib-shellout-1.6.0
drwxr-xr-x 5 root root 4096  25 11:51 mongo-1.8.6
drwxr-xr-x 6 root root 4096  25 11:52 msgpack-0.5.11
drwxr-xr-x 7 root root 4096  25 11:51 nokogiri-1.5.10
drwxr-xr-x 6 root root 4096  25 11:51 ohai-6.20.0
drwxr-xr-x 4 root root 4096  25 11:51 parallel-0.6.5
drwxr-xr-x 3 root root 4096  25 11:51 rake-0.9.2.2
drwxr-xr-x 3 root root 4096  25 11:51 rdoc-3.9.5
drwxr-xr-x 3 root root 4096  25 11:51 rspec-3.0.0
drwxr-xr-x 4 root root 4096  25 11:51 rspec-core-3.0.4
drwxr-xr-x 3 root root 4096  25 11:51 rspec-expectations-3.0.4
drwxr-xr-x 3 root root 4096  25 11:51 rspec-mocks-3.0.4
drwxr-xr-x 3 root root 4096  25 11:51 rspec-support-3.0.4
drwxr-xr-x 4 root root 4096  25 11:51 rubyzip-0.9.9
drwxr-xr-x 3 root root 4096  25 11:51 sigdump-0.2.2
drwxr-xr-x 5 root root 4096  25 11:51 string-scrub-0.0.3
drwxr-xr-x 5 root root 4096  25 11:51 systemu-2.5.2
drwxr-xr-x 9 root root 4096  25 11:51 td-0.11.5
drwxr-xr-x 5 root root 4096  25 11:51 td-client-0.8.66
drwxr-xr-x 5 root root 4096  25 11:51 td-logger-0.3.23
drwxr-xr-x 6 root root 4096  25 11:52 thread_safe-0.3.4
drwxr-xr-x 7 root root 4096  25 11:51 thrift-0.8.0
drwxr-xr-x 4 root root 4096  25 11:52 tzinfo-1.2.2
drwxr-xr-x 3 root root 4096  25 11:52 tzinfo-data-1.2015.1
drwxr-xr-x 6 root root 4096  25 11:51 uuidtools-2.1.5
drwxr-xr-x 4 root root 4096  25 11:51 webhdfs-0.5.5
drwxr-xr-x 8 root root 4096  25 11:51 yajl-ruby-1.1.0

ツイッターで@repeatedlyに相談した所、td-agent2を入れてみたところこの現象が出なくなった!
ざっくりな質問に真摯に対応してくださったrepeatedly に感謝です!!

今回は

wget http://packages.treasuredata.com.s3.amazonaws.com/2/redhat/7/x86_64/td-agent-2.1.3-1.x86_64.rpm
rpm -ivh td-agent-2.1.3-1.x86_64.rpm
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-config-expander
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-forest
service td-agent start

で無事解決

Intel EdisonでAdafruit Ultimate GPSを使う

以前にRaspberry Pi用に購入したAdafruit Ultimate GPSがあったので、Edisonで使えないか試してみました。

GPSのモジュールは小さく1円玉ぐらいのサイズです。

外付けのアンテナも取付可能ですが、これ単体でも小さいアンテナが付いているので、GPSの信号を受診することが可能らしい。
(Raspberry Pi用に買ったけど、一度も使ったことがない)

Edisonとの接続ですが、せっかくUSB OTGに対応しているので、GPSモジュールとUSBでつなげようとしたけど、うまく出来ずに断念しました。

次に、EdisonはUART(Universal Asynchronous Receiver Transmitter)の入出力のbreakout boardピンにも配置されているので、そっちに接続して試してみることに。

GPSのモジュールは3.3v〜5vの電源で駆動するので、手っ取り早くUSBから5vを取ってGPSモジュールに印加します。

GPSモジュールのRXをEdisonのJ19 - pin 8 GP131 UART1_TXにつなぎ、TXをJ18 - pin 13 GP130 UART1_RXにつなぎます

GPSモジュールに電源をつなぐと、赤いLEDが点滅し始めます。
GPSの信号を受信できている状態で/dev/ttyMFD1をcatしてみるとズラズラとデータが出力されてくるのが確認できます。

次にnodejsでこのデータを読み取れるように、受信したデータをログ出力するだけのスクリプトを書きます。
(Adafruitが公開しているGPSのライブラリはC++で書かれているのですが、Cで書くのも辛いのでnodejsであればserial通信用のライブラリもあるし、JavaScriptで進めたいと思いました。)

var SerialPort = require("serialport").SerialPort;
var port = "/dev/ttyMFD1";
var serialPort = new SerialPort(port, {
  baudrate: 9600
}, false);

console.log("Open port: "+ port);
serialPort.open(function (error) {
  if (error) {
    console.log('Failed to open: '+error);
  } else {
    console.log('open');
    serialPort.on('data', function(data) {
      console.log('data received: ' + data);
    });
  }
});

このスクリプトを実行すると、、

root@sparkgene-edison:~/node_gps# node reader.js
Open port: /dev/ttyMFD1
open
data received: $GPGGA,030937.000,3500.2796,N,13900.6471,E,1,07,1.29,43.9,M,39.3,M,,*57
$GPGSA,A,3,15,13,29,05,193,02,30,,,,,,1.54,1.29,0.85*37
$GPRMC,030937.000,A,3500.2796,N,13900.6471,E,0.28,322.35,240115,,,A*63
$GPVTG,322.35,T,,M,0.28,N,0.51,K,A*36

data received: $GPGGA,030938.000,3500.2797,N,13900.6471,E,1,07,1.29,43.9,M,39.3,M,,*59
$GPGSA,A,3,15,13,29,05,193,02,30,,,,,,1.54,1.29,0.85*37
$GPRMC,030938.000,A,3500.2797,N,13900.6471,E,0.18,221.91,240115,,,A*62
$GPVTG,221.91,T,,M,0.18,N,0.33,K,A*3D

data received: $GPGGA,030939.000,3500.2797,N,13900.6470,E,1,07,1.29,43.9,M,39.3,M,,*59
$GPGSA,A,3,15,13,29,05,193,02,30,,,,,,1.54,1.29,0.85*37
$GPRMC,030939.000,A,3500.2797,N,13900.6470,E,0.43,243.74,240115,,,A*63
$GPVTG,243.74,T,,M,0.43,N,0.79,K,A*32

お〜、なんか受信できてるけどさっぱりわからんww

で、Adafruitのライブラリを読んでると、GPGGAとかの文字からパース処理をしているのがわかったので、ググってみるとGPSのモジュールからはNMEAというフォーマットでデータが出力されるとのことでした。

なるほど。
ということはJavaScriptで受信したデータをフォーマットに合わせてパースすれば人にやさしいデータに変換できるということ。
そんなわけで、まだ一部分のやっつけ的なソースですが、パースする処理を書いてみました。
https://github.com/sparkgene/node_gps/blob/master/gps_reader.js

このソースを使って、もう一度受信しているデータをパースしてみると、、

root@sparkgene-edison:~/node_gps# node gps_reader.js
Open port: /dev/ttyMFD1
open
Time(UTC): 6:38:57.0
Status: A
Latitude: N 35.001221666666665
Longitude: E 139.00406666666667
Time(UTC): 6:38:58.0
Status: A
Latitude: N 35.00122
Longitude: E 139.00406833333334
Time(UTC): 6:38:59.0
Status: A
Latitude: N 35.00122
Longitude: E 139.00406833333334
Time(UTC): 6:39:0.0
Status: A
Latitude: N 35.00122
Longitude: E 139.00406833333334
Time(UTC): 6:39:1.0
Status: A
Latitude: N 35.00122
Longitude: E 139.00406666666667
Time(UTC): 6:39:2.0

緯度経度が見やすくなりました。
上記のデータは一部書き換えているのであれですが、実際にキャプチャーできたデータをgoogle mapで見てみると、10m以内ぐらいの誤差でばっちりと現在地を表示しました。

室内で試したので、屋外に出たり、アンテナを繋いだらもっと精度は高くなるかも。

Intel Edison に外部電源をつなげた

USBをつなげばEdisonは使えるのだが、OTGでHostとなってUSB経由で他のモジュールに給電されるには、Edison自身がバッテリーなど外部から給電されている必要があります。

そんなわけで、秋月電子でアダプターとソケットを購入。

外部電源として、7~15Vを使えるとのことなので、9V 1.3Aのアダプターを購入。

ブレッドボード用DCジャックDIP化キット

赤黒コネクター

先端に端子をハンダ付けしてブレッドボードに挿せるようにした。

全部繋いで完成です!

Wi-Fiの設定をしてあるので、外部電源をつないだ状態にすれば、PCからSSHで入れます。

re:Invent 2015を10倍楽しむ方法

JAWS-UG Advent Calendar 2014 の24日目に参加しています。



ご存じですか?
なんと、re:Inventの日程は2年後まで日程が決まっています!
http://reinvent.awsevents.com/jp/faq.html

AWS re:Invent 2015: 2015 年 10 月 6 日〜 9 日 | The Venetian, Las Vegas, NV
AWS re:Invent 2016: 2016 年 11 月 29 日〜 2 日 | The Venetian, Las Vegas, NV

(次も行けるといいな〜と思いながら、iPhoneのスケジュールに入れてますw)

で、「re:Invent 2015を10倍楽しむ方法」とタイトルに書いた様に、2015のre:Inventに初めて参加する人に向けて、私が今回の初参加で感じたこと(セッション以外)を書いていこうと思います。

個人的に感じたことなので、すべての人におすすめできるとは限りません。
1年後の話なので、色々状況は変わっているかもしれません。


1. 持って行っておくと便利なもの

  • バイWi-Fi
    • 海外でローミングできる携帯も便利ですが、おそらく参加される人は、PC、タブレットなどその他にも色々持っていくはずなので、全てから使える海外で使えるモバイWi-Fiを事前に予約して空港で受け取っていくと便利です。
  • 電源タップ
    • よくあるプラグに直接3つぐらい指し口があるやつよりも、短くてもコードの先に指し口があるタイプのほうが、コンセント周りがごちゃごちゃしている時に便利です。
  • バイルバッテリー
    • 今回は、Mac book、 iPhone、モバイWi-Fiを持ち歩いてました。夜の間にちゃんと充電しておけばセッションのメモ取りで使うぶんにはMacのバッテリーは持ちました。
    • けど、Wi-FiiPhoneはバッテリーが切れそうになることが何度かあり、切れると色々とツライので、スマフォを1回充電できる程度のモバイルバッテリーだけでも持って行くと安心です。

ちなみに、スーツケースの半分は空っぽの状態で出発しましたが、思ったよりノベリティーグッズやおみやげが多くなってしまい、帰る頃にはスーツケースの上に乗っかって鍵を閉めるぐらい、荷物がパンパンになってました。
スーツケースは余裕があるサイズのものにしましょう。


2. ツアーについて

去年に続いて、今年もre:Invent参加ツアーが用意されていました。

このツアーでは、空港で参加者が一同に集まって、出発式のようなことを別室で行いますので、1人で参加や、初めて参加する人でも、他の参加者と顔合わせもできるので、その後の飛行機や移動などで隣りに座った人と気軽に話ができたりします。
基本的に参加者はAWSを利用してたり、今後利用しようと考えているような人ばかりなので、初めて合う人でも色々な話ができると思います。

(ちなみに私は、空港でチェックインを終えたあと、間違えて出国手続きまで進んでしまい、空港ではずっとぼっちでした。しかも、飛行機も隣りに座った人は、ツアーと関係ない人だったので、飛行機の中もぼっち。。おかげで見たかった映画を3本ほど見ることが出来ましたw)

ということで、もちろん自分で全部手配して参加することは可能ですが、こちらで用意されるツアーを利用することをオススメしたい。
そして、可能ならシアトルで特別セッションに参加できるプランが良いですね。



3. 参加者との交流

ツアーに参加するメリットの一つとして、一緒の日程で行動する参加者が大勢いますので、AWSの話はもちろん、いろいろな話が出来ます。
私は、名刺を多めに持っていったつもりでいましたが、ラスベガスに着く頃には残り数枚になってしまうほど、色々な人と名刺交換をしつつお話することが出来ました。
名刺は箱で持って行くことを強くオススメします。

1人でツアーに参加すると、食事とか観光とか、ぼっちになってツラそうと思うかもしれませんが、参加者同士でコミュニケーションできる様にFacebookにグループが作られてました。
そこで「肉を食べに行きたい人!!」とか、「ダウンタウンへ行きますけど、他に一緒に行きますか?」の様なやりとりは多くされてます。
自分から誘うもいいですし、誰かの誘いに乗って合流するのも良いと思います。




4. シアトル

AWS本社での特別セッションに参加できるツアーを選ぶと、re:Inventの前にシアトルに行きます。
今回は便の時間が変更になったりしたので、結構時間に余裕がある日程でした。

宿泊するのが今回と同じシェラトンの場合は、Pike Place Marketまで、徒歩5分ぐらいで行けるロケーションでしたので、ぜひ行ってクラムチャウダーを食べていただきたいです。

スターバックスの1号店もここにあるので、そこでしか買えないマグをおみやげで買うのも良いですね。

日中は結構混雑している&店内には席がない(持ち帰りのみ)ため、朝の空いている時間に行くことをオススメします。
朝の6:30から営業しているので、スタバでおみやげを買って、朝からやっているお店で朝食を買ったり、ホテルまでの帰り道にもう1件スタバがあるので、そこで食べ物を買って席で食べるのも良いかもしれません。


シアトルはシーフードが美味しいです。
もちろん肉も美味しいですが、ラスベガスに行けば美味しい肉はいっぱいあるので、シアトルではシーフードを食べるのがおすすめです。



ラスベガス


5. ホテルについて

あまりの規模に、すべてが驚きの連続でした。
ツアーで宿泊したベネチアンホテルは、ホテルの外だけでなく、中にもゴンドラに乗れるような運河が有り、とにかくスケールが違います。地図は必須です。

実際にベネチアに行ったことがありますが、色々とそっくりでびっくりしました


全室スイートなので、部屋が凄いです。
4泊ぐらいするのですが、セッションやら、夜のイベントやらで外出することが多く、せっかくの豪華な部屋なのに、いる時間は短いのがちょっともったいないですね。
部屋で1つ注意しなければならないのは、部屋に付いているミニバーみたいなドリンク&スナックは、支払いのシステムが自動なので実際に食べたりしなくても、物を動かすだけで課金されてしまいます。
思わず触って余計なお金がかからないように注意しましょう。

あと、部屋から出る時は忘れ物をしないように、一度確認しましょう。
ホテルがめちゃくちゃ広く、部屋からre:Inventの受付に行こうとか思ったら、片道で10分ぐらい掛かるレベルです。忘れ物を取りに戻ったら20分無駄にします。

6. コンビニのような便利なお店

ラスベガスは砂漠地帯なので、水分補給は大事だよって言われますが、想像以上に水分を失います。
(朝にホテルの部屋で下着を洗濯して部屋干ししたら、夜にはもう乾いているぐらい)
しかし、ホテルで水を買ったりするとそれなりに良い値段がします。

そこで、ホテルを出てすぐの所に、Walgreens というお店があります。
水から、おみやげまでなんでも揃います。
ここで、500mlサイズの水の6本パックとか売っているので、それを買って持ち歩いてるとこまめに水分補給が出来て良いです。
滞在中は何度もこのお店に行って、おみやげとかお菓子とか買いました。

7. 食事・レストラン

re:Invent中は朝食と昼食が提供されます。

ま〜、味はあれですが、毎日夕食が豪勢なので、少なめの食事で軽く終わらすと、1週間のイベント参加で体重の増加は、2kgぐらいに抑えることが出来たかなとw

そして、シアトルで我慢していたら、ラスベガスでは肉を食べましょう!ww

ホテル内であれば、CARNEVINO とか

ホテルの中にはラーメンが食べられるところもあるので、肉とお酒で疲れたら、お昼に食べるのにおすすめです。

NOODLE ASIA

ビュッフェで色々食べてみるのも良いですね

Voted Las Vegas Best Buffet | The Buffet | Wynn Las Vegas
http://www.caesars.com/caesars-palace/restaurants/bacchanal-buffet.html#.VJVFsMAiw


ただ、ホテルのレストランはなかなか高いです。軽い気持ちで行くと、$100ぐらい余裕で掛かります。
美味しい肉を食べにレストランへ行くのも良いのですが、ホテル内にはフードコートもあり、ココでは比較的リーズナブルに食べることが出来ます。
もちろん、持ち帰りもできるので、部屋に持ち帰って、みんなでワイワイと飲みながら食べることも出来ます。
http://www.venetian.com/food-courts.htmlwww.venetian.com


8. 観光

ラスベガスはとにかく凄い。
正直、re:Invent期間中はとにかく忙しい。朝の早くからセッションを聞いて、夜はpub crawlやre:Play Partyがあったりと、することがいっぱいです。
けど、せっかくラスベガスに来てるのだから、観光にも時間を割いたほうがいいでしょう。

フリーモントストリートエクスペリエンス

ベネチアンホテルの前を通るストリップストリートは、近年のラスベガスらしい豪華なホテルが多い地区ですが、古き良きラスベガスらしさがあるのは、ダウンタウンの方です。
その中で、有名なフリーモントストリートエクスペリエンスは、アーケードの天井が全面LEDが配置され、巨大なモニターとなっています。

ベラージオホテルの噴水ショー

音楽に合わせて水のショーが行われます。毎時0分から数分ぐらい行われています。
自分の場合は、到着した時はやってたのですが、正面から写真を取りたいと思って移動してたら終わってしまったという。。

その他、ミラージュホテルの火山ショー、シルクドゥソレイユのショー(数種類のショーが行われてます)、アウトレットモールなど、多すぎてとても回れません。

9. カジノ

カジノもいっぱいあります。
$1で遊べるスロットもあれば、ディーラーがいる物だと1回$50〜と値段は高くなります。
$10〜遊べるルーレットもあるので、予算に合わせて無理なく遊ぶのが良いですね。
ちなみにカジノ中は撮影禁止です。
代わりに、空港に有ったマシンの写真をどうぞ。



10. re:Invent

re:Inventのタイムスケジュールはこんな感じです。
reinvent.awsevents.com


セッション以外に関係者と交流できるイベントがいっぱい用意されています。

Welcome Reception

スポンサー企業がブースを出しています。
reinvent.awsevents.com

おみやげにするノベルティーを貰いに行くのもいいですが、普段利用しているサービスの中の人と直接話ができる機会となりますので、色々と楽しめます。

Pub Crawl

Pub Crawlでは、re:Inventに参加している企業がホテル内のレストランやクラブを2時間だけ貸し切って、re:Inventの参加者が自由に出入りして飲めるイベントです。
スポンサーとなっている会社の中の人がいたりするので、気になる会社のお店に行って話をしてみるのもいいし、通常だと数十ドルの入場料を払わないと入れないようなお店を見て回ったりするのもお勧めです。
蝋人形の館Madame Tussauds Las Vegas」や、「TAO」は人気のスポットのようでした。

re:Play Party

キーノート会場が夜には巨大な遊び場に変わるイベントです。
有名なDJが場の雰囲気を盛り上げてくれます。


巨大なスクリーンでゲームを楽しんでる人も。


照明を操作できるブースで遊んだり。スポンサーのIntel Edisonが使われてました。



振り返り

こうやって振り返ってみると、これだけの出来事がわずか1週間ぐらいの期間に行われてて、改めて凄いなと感じました。
そして、re:Inventが終わり、帰りの飛行機で思ったのは「来年もまた来たい!」。

正直、re:Invent後にはセッションの情報はslideshareにスライドが上がってたり、youtubeも公開されてたり、podcastですべてのセッションが公開されてたりと、勉強するだけならこれらの情報だけでもなんとかなると思います。

ただ、実際にキーノート会場の熱気や、Auroraの発表を聞いたあと興奮が冷めぬうちに、Auroraのセッションに参加したりと、実際に参加してみないと経験できないことばかりです。
そして、参加者同士の交流や、出会いもやはり現地で参加してみないと経験できないことが多かったと思います。

2015年も参加したいですね!

re:Inventまで待てない人は、3/22にJAWS DAYS 2015が開催されますので、ぜひそちらへも参加しましょう〜。
http://jawsdays2015.jaws-ug.jp/

最後に

AWSでは認定試験が行われていますが、今回のre:Inventでは認定試験に合格している人だけが受けられるサービスが有り、専用の部屋も用意されてたのを知りました。
なので、来年の参加までに試験に受かっておきたいなと思います。

AWS re:Invent 2014 Tour Day 1

AWS re:Invent 2014 へ参加するため、AWS主催のツアーに参加してます。

自分が参加したツアーはAWS本社でのセッションも聞けるコースでしたので、re:Inventが開催されるラスベガスではなく、最初の目的地はシアトルです。

デルタ航空での移動ですが、登場ゲート付近にはUSBも備えた充電スタンドがあって、出発する前にすでにバッテリーだ半分になってしまったiPhoneの充電ができて助かりました。

各席には映画やゲームが出来るタッチパネルのモニターとUSBの口を備えていて快適でしす。

出発は遅れながらも定刻通りに到着して、初めて参加者の皆様と顔を合わせることに。
(成田で顔合わせ的な出発式があったのですが、間違えて出国手続きまで進んでしまったために、参加できなかった。。)

バスで移動中に見かけたAmazon Fresh (慌ててとったのでピンボケ、、)

最初は、Don Armeni Parkから宿泊するホテルがあるウォータフロントを見渡せる公園に立ち寄りました。

移動しながら、スターバックスの本社前を通過

Safeco FieldでMarinersやSeahawksのショップで買物

昼食で寄ったパイク・プレイスマーケットでスターバックスの1号店をチラ見(あまりの混み具合に入れず)

以前Amzonの本社があった建物

その旧本社ビルの通りを挟んだところから見える景色がすごい。
(さっき寄ったSafeco FieldとCenturyLink Fieldが目の前)

現在の本社があるところ

引っ越し当初はこちらの建物にAWSチームがいたとか

その後ホテルへチェックインして、1時間ぐらい寝てから20名ぐらいの参加者とシーフードを食べにパイク・プレイスマーケットへ徒歩で向かいFishermans Restaurantへ

カキも美味しく

シアトルといえばクラムチャウダー

カニどーん

これ以外にも、バケツに入った大量の貝や、サラダ、パンがあって、ボリュームたっぷり。
正直、メインの回にたどり着いた時にはお腹も満足気味で、そこに大量のカニが来たのでしんどかったw

パイク・プレイスマーケットを後に、時差の疲れもありおとなしくホテルへ戻ってぐっすり寝てしまいました

Raspberry Pi でrPlayを使ってAirPlayミラーリングを実現する

Raspberry Pi で iPhoneの画面を表示できないか調べてたら、こちらで話題になってたrPlayというものを知りました。
http://www.raspberrypi.org/forums/viewtopic.php?t=49668

ベータテスト中との事だったので、メールしてライセンスキーを発行してもらいました。

ライセンスキーを発行してもらえたので、早速教えてもらったサイト通りにセットアップを進めます。

まずは、Raspberry PiにSSHでは入ります

ssh pi@192.168.10.13

Raspbery Piのファームウエアをアップデート

sudo apt-get install rpi-update
sudo rpi-update

変更を反映するために再起動

sudo reboot

GPUに割り当てるメモリを変更する

sudo raspi-config

Advanced Optionsを選択

Memory Splitを選択

model Bなので、半分の256を指定

OKすると再起動するかを聞いてくるので、再起動する

AirPlayで必要となるライブラリをインストールする

sudo apt-get install libao-dev avahi-utils libavahi-compat-libdnssd-dev libva-dev youtube-dl

自分の場合は上記のコマンドでエラーとなったので、一度apt-get updateを実行しました

sudo apt-get update

正常にインストールできたらYouTubeをアップデートします

sudo youtube-dl &#8211;update

rPlayのダウンロードとインストール

wget -O rplay-1.0.1-armhf.deb http://www.vmlite.com/rplay/rplay-1.0.1-armhf.deb
sudo dpkg -i rplay-1.0.1-armhf.deb

ブラウザから管理画面にログイン

上記のコマンドが正常に終わると、rPlayのサービスが起動します。
ブラウザから管理画面にログインします。

http://192.168.10.13:7100/admin

直接設定ファイルを編集することも可能です

vi /etc/rplay.conf

管理画面に入ったら、ライセンスキーを登録します。

念のため再起動

sudo service rplay restart

iPhone上でRaspberry Piを認識!

テレビに表示できた!!

MacからもAirPlayできるかなと思ったけど、残念ながらRaspberry Piは検出されなかったので、出来ないっぽい。