2014年11月12日水曜日

Amazon linux のphpを5.3から5.4にあげてみた。

あげてみました。レッツトライ。
まずhttpd.confとphp.iniをどこかにコピー。

アパッチとPHPを削除。
#yum remove httpd httpd-tools php php-cli php-common php-process php-xml

インストール。
#yum install httpd24 php54
これで5.4が入ったみたい。

# php -v
PHP 5.4.34 (cli) (built: Oct 27 2014 20:25:22) 

httpd.confがまっさらになったので、コピーしておいたhttpd.confとphp.iniを参考に戻す。

アパッチを再起動してウェブサイトを確認したら、いくつか足りなかった。

#yum -y install php54-mysql
#yum -y install php54-mbstring

2014年11月5日水曜日

2014年のハロウィンはゾンビ化。

今年はお手伝いしているバーでハロウィンイベントをしました。
去年は川崎のイベントにデーモン小暮閣下で突撃したので、今年はどうしようかと10分ほど悩んだあげく、ゾンビにしようと思い付き、ドン・キホーテへ。
最近は凄いですね、入り口から奥まで様々なコスプレグッズで溢れかえっています。
うろうろと見まわって買ったのがポリスメン。
これと白ドーラン、血糊を購入。5000円くらい。
それから100円ショップで、絵の具、霧吹き、アイライナーなど購入。


制服は、ちぎったスポンジで血糊をこすりつけたり、草と泥・脂・血など絵の具を溶かして霧吹きで吹き付けたりして汚し、さらに袖を破いたりボタンを砕いたりして準備。

で、こう。


こう。


ダーツ投げる!

ポリスメンはなかなか良いです。何がいいって、拳銃のホルダーに携帯がしまえます。
これで街にでて、けしからんコスプレは逮捕ならぬ逮写ですな。目にも止まらない連写を見せつけるわけです。

ただ、今年やろうと思って出来なかったのは、ダーツの矢を体に刺す演出。ダンボールに刺してみたけど、落ちてしまいました。来年のリベンジ課題。

2014年10月24日金曜日

AWS Beanstalkで環境を環境変数にいれる

Beanstalkで環境を、PRODUCTION、STAGING、DEVELOPMENTとか分けてCakePHPで運用しています。
データベースとかBootstrapの中身を環境でわけてます。
if (Z_ENVIRONMENT=='PRODUCTION') {
    class DATABASE_CONFIG {
      var $default = array(
      );
    }
}elseif (Z_ENVIRONMENT=='STAGING') {
    class DATABASE_CONFIG {
      var $default = array(
      );
    }
} else {
    class DATABASE_CONFIG {
      var $default = array(
      );
    }
}

Beanstalkのコンソールで、$_SERVER['PARAM1']に環境をセットして、CoreファイルでそれをZ_ENVIRONMENTにセットしていて、普通にウェブで見るには問題ないのですがcronのとき、$_SERVER['PARAM1']がカラになってしまうので、さて困ったと。

調べていたら、
/opt/elasticbeanstalk/support/envvars.d/sysenv
このファイルにPARAM1なんかが書き込まれているようだったので、

if(isset($_SERVER['PARAM1'])){
  define('Z_ENVIRONMENT', $_SERVER['PARAM1']);
}else{
  $match = array();
  if(file_exists('/opt/elasticbeanstalk/support/envvars.d/sysenv')){
    $sysenv = file_get_contents('/opt/elasticbeanstalk/support/envvars.d/sysenv');
    $preg = preg_match('/PARAM1=\"(.+)\"/', $sysenv, $match);
  }elseif(file_exists('/opt/elasticbeanstalk/support/envvars')){
    $sysenv = file_get_contents('/opt/elasticbeanstalk/support/envvars');
    $preg = preg_match('/PARAM1=\"(.+)\"/', $sysenv, $match);
  }
  if (!empty($match[1])){
    define('Z_ENVIRONMENT', $match[1]);
  }else{
    define('Z_ENVIRONMENT', 'DEVELOPMENT');
  }
}


こうかな?



2014年10月7日火曜日

山口県に行ってきた。

6月に山口県に1泊2日で行ってきました。

まずは羽田からドギャンと飛行機で宇部空港まで。
そこで今回アテンドしてくださる兼子産業株式会社兼子さんと合流。
山口屈指の物流梱包メーカーの兼子さん。山口の魅力を紹介したいと、アテンドを引き受けてくださいました。ありがとうございます!

着いたのがお昼前だったので、まずはレンタカーに乗り込み、下関に向かいます。
運転は北軽井沢のプリンスこと北軽井沢ハイランドリゾートホテルのプリンス庄司。

唐戸市場に到着!
通常は魚市場ですが、このように屋台がでて、新鮮な魚料理が楽しめる山口の人気スポットになっているそうです。

新鮮の海の幸がこれでもかというくらい食べられます。安いです。美味いです!


広い敷地のどこをみてもグルメ。
ついついお代わりをしてしまう、鮮魚の宴。


海の幸を堪能した後は、関門橋を越えて北九州に移動。
橋を超えるだけで九州にもいけてしまうなんて、2度お得!


北九州は門司港に来ました。
レトロな町並みの観光地、門司港レトロです。

門司港では、熱した瓦で調理する瓦ソバ、
 そして、ひつまぶしを堪能。
 ここまで、食べてばっかりです。


お腹も膨れたとこで、今度は山口といえばコレって感じの秋芳洞に来ました。
実は10年以上前に来たことがあったのですが、再度入洞。

ひんやりとした洞窟内。

懐中電灯を片手に、「冒険コース」にも。

?!

段々畑のような「百枚皿」。


そびえ立つ「黄金柱」

 「岩窟王」

十年前にはなかった、出口の通路。
人類の歴史が見れる通路。長い。
約1kmのコースを歩く中で、鍾乳石はダイナミックに形を変え、飽きさせない表情を見せてくれます。


夜は古民家料亭に移動。
70年ほど前から空き家となっていた古民家を再生したそうです。

 ハモ。異様に美味しかった。



調度品も品があって素敵です。


本格茶室でお茶もいただきました。

 生憎の雨かと思ったら、雨の音も静かで心和む空間となりました。



夜は「スーパーホテル山口湯田温泉」にチェックイン。
スーパーホテルは、ただのビジネスホテルかと思ったら、設備もサービスも素晴らしいホテルでした。枕の固さを選べたり、女性にはスキンケアグッズが自由に使えたり、館内も清潔。

近くの温泉に入り、そしてカラオケ屋でダーツに興じて、1日目の夜は更けていきました。
そしてたぶんこの御店に、お気に入りのシャツを忘れてきてしまいました。


二日目。
二日目は角島観光に。
とても海の綺麗な角島へは、角島大橋を渡って行きます。長くて爽快感抜群。
 直線!

角島の浜。
エメラルドの海。

 写真を撮り合う二人、を後ろから撮る。写真スナイパーごっこ。

気づかれた!!


再び下関に戻って、今度は巌流島にフェリーで行きます。
宮本武蔵と佐々木小次郎が雌雄を決したという巌流島。男心が擽られます。
 佐々木小次郎の碑。
 戦う銅像発見!

やっちゃうよね。巌流島ごっこ。


そろそろお帰りの時間が近づいてまいりました。
最後はフクを食べて締め。
下関周辺ではどうやら縁起を担いでフグを「フク(福)」と呼ぶようです。



以上、美食王国山口、美食探訪ツアーでした!




2014年10月3日金曜日

AWS SNS のメッセージをcakePHPで受け取る

以前、Amazon SESのバウンスを受け取るというポストをしました。
http://shojaku.blogspot.jp/2014/04/amazon-sessnsweb.html
このときはrailsだったのですが、今回はcakePHPで。

・AmazonSESのバウンスを受け取るためにSNSを利用。SNSのトピックを作った時に、subscriptionを認証しないといけません。
認証はJSONフォーマットのデータがPOSTされてくるのですが、それをcakePHPで受け取って、DBに突っ込み、突っ込まれたデータの中に入っているURLにアクセスすると認証完了です。

$thisとか$_POSTとかリクエストハンドラーとかいろいろ試したんですけど、データが受取れなくて、最終的に受取れたのがこれ。
  function bounce_mails(){
    if($post = file_get_contents('php://input')){
      $data['BounceMail']['body'] = serialize($post);
      $this->BounceMail->create();
      $this->BounceMail->save($data);
    }
    exit;
  }

2014年9月26日金曜日

AWS Elastic BeanstalkのSSLで、wwwあり、なしを統一する

Beanstalkを使っていて、wwwを統一したいとき、httpd.confはいじれないので、htaccessで行うことにしました。
httpの場合は簡単なのですが、httpsの場合はネットワークインターフェースを噛ましてるので、うまく行かず。SERVER_PORTとか取れないんですね。
いろいろ探して、以下のようにしたらできたようなのでメモ。

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTP_HOST} ^example\.jp
    RewriteCond %{HTTP:X-Forwarded-Proto} =https
    RewriteRule ^(.*)$ https://www. example.jp/$1 [r=301,L]

    RewriteCond %{HTTP_HOST} ^ example\.jp
    RewriteRule ^(.*)$ http://www. example.jp/$1 [R=301,L]

</IfModule>

2014年9月22日月曜日

Elastic BeanstalkでRDSのインスタンスを変えたい

Elastic Beanstalk(以下EB)をとりあえずdb.microでテストして、じゃあインスタンスあげようか、ってところでどうやって上げるのか迷いました。

とりあえずRDSの設定画面で該当するRDSのインスタンスを上げたのですが、EBのコンフィグでみるとRDSのインスタンスがmicroのまま。

同じような質問もあって、
http://stackoverflow.com/questions/25087682/change-rds-configuration-in-elastic-beanstalk-app
そのアンサーのとこにAWS CLIを使ってコマンドでやれって書いてたので、コマンド叩いてみたけど、エラー。

AWS CLIって何だっけ、あ、eb〜ってのがそれか。
ということで、ひとまずebコマンドでステータス見てみるか。
#eb status --verbose
RDS Database: AWSEBRDSDatabase | *******.ap-northeast-1.rds.amazonaws.com:3306
Database Engine: mysql 5.5.37
Allocated Storage: 10
Instance Class: db.m1.small
Multi AZ: False
Master Username: insightnow
Creation Time: 2014-07-17 16:41:48
DB Instance Status: available

あれ?
smallになってる。

EBのコンフィグに反映されていないだけかもしれないです・・・・。

2014年9月4日木曜日

AWSで、EC2のみとEC2+RDSどっちがいいのか試してみた。

大昔にこさえたEC2が、m1.mediumだし32ビットだしということで、m3.mediumに移すことにしました。
EC2内のローカルDBを使っていたので、そのままm3.mediumにするのと、EC2small+RDSsmallに分けるのとどちらがパフォーマンスがいいのだろう?と思ったので、テスト。

負荷のテストに使用したのはスウェーデンの負荷テストサービス「load impact」
https://loadimpact.com/

無料アカウントで月5回までテストできるみたい。
一番負荷の多そうな検索ページに、最大20同時アクセスするように設定していざテスト。

結果

EC2+RDS
EC2


こんな感じになりました。
RDSだと最大1分くらいレスポンスにかかってしまっていて、EC2単体の圧勝でした。
ClowdWatchをみてみると、RDSへの負荷は殆どなくて、多くがWEBアプリケーションの負荷だったため、こうなったみたいです。

RDSを使う方が、扱いやすいし見通しもいいし容量の管理もしやすいけど、場合によってはまだ分けないほうがいいかもしれません。





2014年7月25日金曜日

Elastic Beanstalkでtmpフォルダを作る

Beanstalkにcakephpを乗せるとき、乗せてサイトが見れるまでを紹介してくれている記事は多いんですけど、tmpフォルダどうするの?っていうとこに言及がないので、いろいろ試してました。

githubで管理しているときって、app/tmpフォルダとかwebroot/img/tmpフォルダはローカル環境で使ってるからgitignoreしているんですよね。

SSHでbeanstalkにログインして、tmpフォルダを作ってみたけど、次のデプロイでtmpフォルダ消失。やっぱ駄目かーってことで、コンフィグファイルを触ることにしました。

appルートに「.ebextensions」っていうフォルダを作成。
その中に適当な「test.conf」作成。
container_commands:
  01mk_tmp:
    command: mkdir app/tmp
  02mk_tmp:
    command: mkdir app/tmp/cache
  03mk_tmp:
    command: mkdir app/tmp/cache/views
  04mk_tmp:
    command: mkdir app/tmp/cache/persistent
  05mk_tmp:
    command: mkdir app/tmp/cache/models
  06mk_tmp:
    command: mkdir app/webroot/img/tmp
ざっと書いてデプロイ。
よしよし、フォルダできた。

見た目が悪いのでコマンドを別ファイルにして、下記のコマンドで呼び出したところ、
container_commands:
  01mk_tmp:
    command: .ebextensions/tmp.sh
こんなエラー。
[Instance: i-******** Module: AWSEBAutoScalingGroup ConfigSet: null] Command failed on instance. Return code: 1 Output: Error occurred during build: Command 01test failed .
よくわからなかったので、やめ。


さて、この方法で本当にいいのやら?


2014年7月17日木曜日

AWS Elastic BeanstalkにMACからデプロイ。

メモです。

Elasticbeansトークに、MACからデプロイしてみたメモ。

デプロイはコマンドラインから行うとのことで、AWS Elastic Beanstalk Command Line Toolからツールをダウンロード。展開。

.bashrcに、パスを書く。
export PATH=$PATH:/Users/AWS-ElasticBeanstalk-CLI-2.6.3/eb/linux/python2.7


eb --version
でバージョンがちゃんと表示されたので、今度は設定。設定は割愛。
準備ができたらプロジェクトのフォルダに移動して、
$ git aws.push
Traceback (most recent call last):
File ".git/AWSDevTools/aws.elasticbeanstalk.push", line 21, in <module>
from aws.dev_tools import *
File "/Users/project/.git/AWSDevTools/aws/dev_tools.py", line 5, in <module>
import boto
ImportError: No module named boto
エラー。
botoというのが無いそうなので、入手。
git clone git://github.com/boto/boto.git
sudo python setup.py install
インストール完了。
$ git aws.push
Updating the AWS Elastic Beanstalk environment project-env...
Environment update initiated successfully.

成功!








2014年7月11日金曜日

S3の画像を一括で公開状態に。

S3に何万枚と画像をアップしてるのですが、途中まで非公開状態でアップされてしまっていました。
make publicで順次公開していくのは大変なので、bucket policyで公開にしてみました。
bucket policyの設定が一番強いようです。

バケットを選択して、パーミッションの部分のedit bucket pulicyをクリック。



ここにバケットポリシーを書き込んでsave。
これでforbiddenだった画像が見られるようになりました。


ポリシーは、今回はサンプルを使いました。
もう少し細かく制御するなら、ポリシージェネレーターでできるみたいですね。
principalの項目には、AWSアカウントIDを入れるようです。対象が”誰でも”なら*です。
アクションを選択して、最後にARNという項目に、arn:aws:s3:::<bucket_name>を入れます。