AWS Dev Day Challengeに参加してきた
チーム「羽根つき餃子」で開発コンテストにチャレンジしてきました。
3分のピッチだと話しきれなかったので、ここに熱い想いを残しておくw
テーマ
以下の4つからの選択制(5つ目の選択肢として自由もあったけど)
- チャット
- 動画投稿サイト
- SNS
- チャットボット
自分たちは「チャット」を選択
作ったもの
「強制ニコニコチャット」
ログイン画面(スマイル認証 笑顔じゃないと使えませんw)
チャット画面(ネガティブワードを「ピーー」に自動変換)
目指したアーキテクト図
- Cloudfrontで公開
- API Gateway + Lambda + Rekognition + Cognitoでスマイル認証
- AWS IoTでメッセージのやり取り
- Lambda + Comprehendでネガティブワード変換
実際のアーキテクト図
できなかったこと
S3の画像ではRekognitionの動作が確認できてたので、ここは要調査。Lambdaでbase64形式で受け取れてたかも。詳しい人教えてください。。
Cognitoでの認証
今回はIAM認証情報を固定で返すように設定
感情認識
Comprehendの日本語対応をお願いします!
Mecabと単語感情極性対応表PN Tableを使って頑張ろうとしたけど、力尽きた。
ピッチの時に「translateで日本語→英語変換を行った後Comprehendに渡す」というのを聞いて、後で試してみたらなんとなく動いた。
でも、精度を上げるのは難しそう。
できたこと
- SPA + API のサーバーレス構成(フロントはjQuery)
- AWS IoTでチャットメッセージのやり取り
- Serverless Frameworkを使ったLambdaへのデプロイ
- Cloudfrontで公開
やらなかったこと
- CI/CD
- ロギング
- モニタリング
ハッカソンなので継続的にデプロイする必要もないし、安定運用する必要もないので切り捨てた。
でも、本当はここが一番やりたかったかも。
感想
ComprehendやRekognitionなど、今まであまりさわれてなかったサービスに触れることができて面白かった。
またこういう機会があれば参加したい!
OpenShift Meetup Tokyo #1に参加してきました
海外からOpenshiftのキーマンが来られるという事で、行ってきました
- Joe Fernandes (VP, Strategic Business Unit)
- Christian Vogel (CoreOS Product Management)
以下、トピックスをずらずらとメモしてます。
何か間違いがあればコメントにて指摘いただければと思います。
OPENSHIFT 3.11 TOPICS
1.管理コンソールがあたらしくなった(モニタリング、オペレーターライフサイクルマネジメント、メータリング)
- RBACで権限をコントロール
2.モニタリング&メトリクス(上記管理コンソールのMonitoringメニューから可能)
- Prometheus and Grafana
- AlertマネージャーがSlackやPagerDuty、Emailに通知
3.オペレーターフレームワーク
HELM chartと連携
OPENSHIFT 4.0 TOPICS
CoreOSもサポート
Unified Hybrid Cloud
Kubernetes Apps MarketPlace
Ansible Operator(Ansibleでコンテナイメージを作れる)
ISTIO Service Mesh
Container Native Virtualization(https://kubevirt.io/)
所感
Prometheus、Grafana、ISTIO等積極的にエコシステムを取り込む方向性なのは嬉しいですね。
自社で運用するのではなく、お客様先にKubernetesを構築するとなった場合にサポートのあるKubernetesとしてOpenShiftはアリだなと感じました。
あと、通訳の人凄かったです。感謝してます。
シェルスクリプトで例外処理
シェルスクリプトで例外処理ができないかと調べてたら、trapというものがあったのでメモしておく。
使用方法
trap トラップ時の処理 シグナル
ubuntu14.04の場合は以下のシグナルが使用可能。
trap -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
例)
trap 'echo trap' 15
シグナルに'ERR'と書くと、0以外の終了コードに対応してくれる。
これでcurlの失敗や外部ファンクションを呼び出しエラーを捕捉できそう。
fluentdのudp通信ではまったこと。
fluentdでforwardすると、「detached forwarding server」が出力されて結構ハマったのでメモ。
先に環境を。
OS RedHatEnterpriseLinux 6.2 (ESX5.0上で動作)
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
送信元(fluent_send)からfowardでログ管理サーバー(fluent_recv)にsendmailのログを送りたくて、ざっくり以下を設定。(forward部分のみ抜粋)
送信側(fluent_send)
<source>
正規表現等々
</source>
<match sendmail.*>
type forward
host fluent_recv
port 24224
buffer_type file
buffer_path /var/log/fluent/myapp-forward
retry_limit 50
flush_interval 10s
</store>
</match>
受信側(fluent_recv)
<source>
type forward
port 24224
bind 0.0.0.0
</source>
<match sendmail.*>
// マッチング処理
</match>
「detached forwarding server」が出力されたので、twitterで嘆いてると、@kzk_moverさんにありがたい助言を頂いてhttp://d.hatena.ne.jp/oranie/20120323/1332498317あたりを参考にしながらUDPが怪しいんじゃないかってところまではわかった。
でも、一つの物理サーバー上で動いてるVM間での通信なので、VMのネットワークのみを使用してる。
もちろんFWはないし、iptablesもSE Linuxもオフってみる。
・・・が、うまくいかない。
実際にtcpdumpで見てみると、確かにudpの通信が来ていない。。
コマンド:tcpdump -X port 24224 -e -vv
※念のため-eを指定して、MACアドレスも確認する。(仮想NICのため)
だがしかし!
nmapしてみると、ちゃんとudpが通ってる。※ 受信側のtcpdumpでパケットを確認。
コマンド:nmap -p 24224 -sU あて先IP
ってことは、rubyのudpが問題??ってことで、シンプルなudpテストコードを書いてみる。
Require “socket”udp = UDPSocket.open()sockaddr = Socket.pack_sockaddr_in(24227,”IPADDR”)udp.send(“hello”, 0, sockaddr)udp.close()
で、結果はNG。tcpdumpでは送信側のパケットは見えるけど、受信側には何も出てこない。
どうもrubyが怪しいってことはわかったけど、原因がわからない。
VMが怪しいのではと思い、送信元を物理マシンに変更すると、正常に送信された!
VM+rubyの組み合わせがNGってところまで絞れた。
ネットワークを一時的に無差別モードにしてみたけど、変わらない。
VMwareToolsのバージョンを上げたり、仮想HWのバージョンを上げても変化なし。
VMの切り分けで策が尽きたので、yum updateを走らせてみる。
そしてOSをrebootすると、rubyのテストコードが送信、受信側それぞれでパケットを確認できた!
ってことは、OS or ソフトレベルの問題っぽい。
アップデートされたソフトを"/var/log/yum.log"で確認して、怪しそうなのを絞り込む。
数が多かったけど、あやしそうなのは・・・カーネル。
VMのスナップショット機能を使って、update前に戻してから、カーネルのみアップデートしてOSをrebootしてテストコードを流すと、バッチリパケットを確認できた。
これをもとにググってみると、この情報を発見!
https://access.redhat.com/knowledge/ja/node/67823
要するに、下記の環境だと小さいudpパケットをロスしちゃいますよーってことらしい。
今回たまたまこれに該当してた。
それにしても、fluentdをVM上のマシンで使うってのは結構ありそうな話やけど日本語の情報は全然なかった。
みんな人知れず解決しちゃってるのかなー。
WindowsからUbuntuにお乗り換え
[PC環境]
Lenovo X220
CPU Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz
Memory 2GB
[インストール]
B5ノートのためDVDドライブがなく、UNetbootinを使ってUSBからUbuntuを導入しました。
使い方はtextdropのブログ参照
http://www.textdrop.net/soft/unetbootin-usb-instal/
USBからブートするために、BIOS設定を変更。
※Lenovoロゴ画面でF1押せばBIOS設定画面になります。
変更したら、USB差して再起動すればUbuntuのセットアップ画面になります。
インストール手順はこの辺見てください。
昔とは比べ物にならないぐらい楽になりましたねー。
20分ぐらいで導入完了しました!早い!!!
[デスクトップ環境]
Unityがアレなので、デスクトップ環境を軽くするためにlubuntu-desktop環境をインストールしました。
Ubuntuソフトウェアセンターで"lubuntu-desktop"で検索かけると自動的にダウンロードしてインストールが実行されます。
これで簡単にLXDE+Openboxな環境が出来上がっちゃいました。
[F5Networks SSL-VPN設定]
SSL-VPNで接続することがあるので、その設定。
firefoxでJavaアプレット動かすためにjreが必要なのでhttp://java.com/ja/download/から自己解凍ファイルをDL。
以下、こんな感じ。
chmod +x jre-6u31-linux-i586.bin
sudo jre-u31-linux-i586.bin
sudo mv jre1.6.0_31 /usr/lib/jvm/
cd /usr/lib/firefox/plugins/
ln -s /usr/lib/jvm/jre1.6.0_31/plugin/i386/ns7/libjavaplugin_oji.so
次に、SSL-VPNで接続してnp_F5_SSL_VPN.soとSSLVpn.tgzをDLする。
mv np_F5_SSL_VPN.so ~/.mozilla/plugins
tar zxvf SSLVpn.tgz
※/usr/local/lib/にF5Networksが作成されます。
これでfirefox再起動で無事接続できました!
外出先でプロジェクターにPCの画面映そうと思ったらうまく映らずorz
iPadにも資料置いてたから、そっち映して事なきを得たけど、
まだまだ設定することがたくさんありそうなので順次アップしたいと思います。
今日のところはここまで。
CassandraをWindowsで検証してみる。
せっかくなので、最近出たVer1.0.0を検証してみます!※現在はVer1.0.1が最新です。
■前提条件cassandraはJavaで書かれているため、JDKが必要です。JDKの最新バージョンをインストールしておいて下さい。
DL先http://java.sun.com/javase/ja/6/download.html
■導入手順
http://cassandra.apache.org/download/からapache-cassandra-1.0.0-bin.tar.gzをダウンロードする。
適当な場所に解凍する
環境変数を以下の通り登録
コマンドプロンプトを開き、cassandra.batを実行する。
コマンドプロンプトを開き、cassandra-cli.batを実行する。
Cassandraに接続
keyspaceの使用
値の入力
textキーを使いたい場合はカラムファミリーをUTF8にしろと書いてある。
update column family User with key_validation_class=UTF8Type;あと、キーを作るときに以下の2つの方法で指定(どちらでもOK)
set User[utf8('jsmith')]['first'] = 'John';
assume User keys as utf8; set User['jsmith']['first'] = 'John';
カラム名については事前に定義することでテキストを使用できた。
create column family User with comparator = UTF8Type and column_metadata = [ {column_name: first, validation_class: UTF8Type}, {column_name: last, validation_class: UTF8Type}, {column_name: age, validation_class: UTF8Type, index_type: KEYS} ];以上で一通りの操作は完了!