UNICORNフレームワークその後
@saimushi がOSSで開発している UNICORN フレームワークです。
また、DevOpsの取り組みの一貫として、skyarch社が提供されている OSS SkyHopperをカスタマイズした PHOENIX プロジェクトも進行中です。
UNICORN フレームワーク は一緒に開発してくれる仲間を募集しています。
コミッター / Pull Request 大歓迎!!
UNICORN Framework
UNICORN-Project/UNICORN · GitHub
現在携わっている案件で使用するPHPフレームワークがUNICORNに決定しました!
可能性を追求した(する)フレームワーク
主にスマホアプリケーション開発において「Fast Start」である事に重点を置いています。
ぜんぜんわからないw
っとリファレンスがあるじゃないか!
http://UNICORN-Project.github.io/
うーむ…w
とりあえず使ってみよう。うん。
Amazon RDSのレプリケーションがLOAD DATAするとエラーで止まる
AmazonRDSのreplica setを作って運用していたんですが、とある開発事案で、大量のレコードを短時間で生成する必要に迫られました。
要件としては、
① 特定ファイル(複数)のファイル名から属性情報を抜き出す
② 既存テーブルAの属性情報にHitしないレコードをSELECTしてtmpテーブルを生成
③ tmpテーブルに特定ファイル(複数)を1個ずつ展開してINSERT
というようなものです。
ただ、特定ファイル内のレコード数が大きく、1ファイル、10万件〜100万件を想定しておく必要がありました。
ここで、単純にサーバー(php)から1行ずつINSERTするのは選択肢から消えます。
バルクインサートも検証しましたが、速度として満足いくものではなく、代替方法を検討しました。
結果、LOAD DATAを使おう!ってことになりました。
LOAD DATA INFILE "ファイル名" INTO TABLE テーブル名 FIELDS TERMINATED BY ',区切り文字' ENCLOSED BY '"';
クッソ速いんですねコレ。知らなかった…。
ひゃっほーひゃっほー言っていたら、商用環境でRDSのレプリケーションがエラー…。
どうも、MySQLでは推奨されない方法 + 対応していない?!という状況のようで八方塞がりに。
「バージョン上げたら直るかも?」ってアドバイスを頂き、確認したところ、「MySQL 5.6.17」が選択できるようになっている!
動けばいいなーぐらいの期待感で、replica setの方を Modify で 5.6.17 に変更したところ…。
動いた!エラーでない!ひゃっほーひゃっほー!
めでたしめでたし。
ログをS3に保存する際にサーバーのIP毎に管理する方法
こういうことがしたい!
S3 Bucket / logs / 20140707 / [サーバーA] / access.log
S3 Bucket / logs / 20140707 / [サーバーB] / access.log
S3 Bucket / logs / 20140707 / [サーバーC] / access.log
fluentdでログをS3に流していますが、frontサーバーにオートスケールを設定していると、サーバー毎の設定を動的に行う必要があります。
そこで、td-agentが起動されるタイミングで、設定ファイルを動的に生成する方式を採ってみました。
まずは動的に生成する基となる設定ファイルを用意します。
$ vim /etc/td-agent/td-agent.conf.tpl # ad access log <source> type tail format json path XXXXXXXXXXXXX pos_file /var/log/td-agent/access.pos tag xxx.access </source> # S3 Output <match xxx.access> type copy <store> type s3 aws_key_id YYYYYYYYYY aws_sec_key ZZZZZZZZZZZZ s3_bucket AAAAAAAAAAA s3_endpoint s3-ap-northeast-1.amazonaws.com path logs # S3に格納するディレクトリ先 buffer_path /var/log/fluent/s3/deliver # S3にflushするまでのbufferファイル格納先 buffer_chunk_limit 1g #リミット値を変更 time_slice_format %Y%m%d/${hostname}/%H/%M #分単位でファイル作成 time_slice_wait 1m # flushまでの待ち時間 flush_interval 30s #これを書くと、timesliceを無視して指定したインターバルごとにs3にflushされる。 </store> </match>
こんな感じに。
${hostname} に動的にサーバーのローカルIPが入ればOKです。
続いて、td-agentの起動スクリプトに以下を追加します。
$ vim /etc/init.d/td-agent sed -e "s/\${hostname}/`hostname`/g" /etc/td-agent/td-agent.conf.tpl > /etc/td-agent/td-agent.conf
これで起動するタイミングで、設定ファイルに動的にIPを取得、置換して生成することができます。
capistrano3 + AWS(オートスケール) でdeployしてやる
オートスケール下でのdeployというと、self-deploy (起動時にスクリプトを実行して、ローカルのソースを最新版にする!) がイケてる気がします!
AWS EC2 capistranoでオートスケーリングインスタンスにデプロイ - cap version2
http://qiita.com/mychaelstyle/items/a550d4a0658c87c1ff30
こちらで紹介されている方法がまさにそれ!
にも関わらず、今回はオートスケールの通常フローで実装してみました。
AWS SDK使ってラクしてみよう!とか思ったわけではないんですが、別案件のスクリプトががっつり使いまわせたからって理由です。<今回のゴール>
capistrano3の動的IP取得 ⇒ ソース反映 + AMI作成 + オートスケール設定更新
先人の方々がcapistrano2でやられているのを参考にちょいちょいとやってみました。
やりたいことの流れ
① ローカルからgit development branchにソースをpush
② TOOLサーバにログインして capistrano3 (production) 実行
③ ELBにぶら下がっている全インスタンスに ソース反映 処理
④ オートスケール用のAMIを作成
⑤ Launch Configuration を新規作成 ( ④のAMIを指定 )
⑥ Auto Scaling group の設定を変更 ( ⑤のConfigurationに向け先を変更 )
iPhoneアプリ ログ雀 が Appliv様に掲載されました!
ログ雀をリリースして早2ヶ月。
大型連休の助けもあり、ダウンロードのペースは落ちることなく推移しています。
「Facbeookアカウントがないと使えないアプリ」へのネガティブな反応が多かったため、
ログインなしでも使えるように独自ユーザー管理の仕組みを追加したことで、アクティブ
ユーザーも順調に増加してきています。
そんな中、ログ雀 をAppliv様に紹介して頂きました!!
実際に使って頂いたようで、丁寧なレビューに頭が下がるばかりです。
ぜひぜひご一読ください!
このままもっとたくさんの人に使ってもらえますように!
AutoScaleでCloudWatchがずっとALARMなんだけど...
オートスケールを一通り用意して、CloudWatchで CPU %に応じて スケールインさせる設定をしたところ、ステータス:ALARM になったまま変わらない。
おかしいのかどうかよくわからずおろおろしていたら、
AWS オートスケーリング設定方法 – 2013年版実践編 | Hiro Fukami's Blog
通常の状態であれば STATE 項目でスケールアウトが OK、スケールイン が ALARM になっていれば良い。ALARM は今現在閾値に引っかかって ALARM を出しているという状態。INSUFFICIENT_DATA になっていなければ何か設定がおかしいということ。
問題ないようです。わかりづらい!