#!/bin/sh # chkconfig: 2345 99 10 # description: ec2 start setup conf name='ec2-start-setup' case "$1" in start) ;; stop) ;; *) break ;; esac start() { echo -n "Starting $name: " ipaddr=`LANG=C /sbin/ifconfig | grep 'inet addr' | grep -v 127.0.0.1 | awk '{print $2;}' | cut -d: -f2` echo "$ipaddr" zoneip=`echo $ipaddr | cut -d "." -f 1-3` #zoneip='10.0.1' echo "$zoneip" if test "$zoneip" = '10.0.0' ; then echo "case AZ-A" `cp hogehoge-az-a hogehoge` null=`restart しちゃったりとか` else echo "case AZ-C" `cp hogehoge-az-c hogehoge` null=`restart しちゃったりとか` fi } stop() { echo -n "none " } case "$1" in start) start ;; stop) stop ;; *) echo "Usage: $prog {start|stop}" exit 1 ;; esac exit $?
とある開発者の覚書
nagamoo.com
highlight js
2013年9月18日水曜日
AutoScalingでAZ毎に設定変えるshellメモ。
自分用メモ
起動時に、AZ毎用に用意してあるコンフィグをコピって来る感じのshell。
2013年7月18日木曜日
php-fpmからtd-agentに書込でソケット通信エラー
環境としては
フロント nginx/php-fpm からソケット通信でLocalのtd-agentに書込
td-agentは別インスタンスのLog Aggregatorのtd−agentに転送。
※追記 2013/08/05 上記はVer 1.1.13-0 においてです。Ver記載漏れm(_ _)m
※2013/09 追記。1.1.15-0 に Ver Upして下記エラー出なくなりました。素早い改修に多謝!
してるのだが、
300 / sec くらいでLocalのtd-agentに書込をしていたら下記のエラーが偶発的に発生。
とりあえず
php-fpmのpm.max_childrenを増やす
>改善されず
その後、ソケット通信の最大数を疑ったところ、@shoma から
net.core.somaxconn いじれとアドバイス受けて変更
フロント nginx/php-fpm からソケット通信でLocalのtd-agentに書込
td-agentは別インスタンスのLog Aggregatorのtd−agentに転送。
※追記 2013/08/05 上記はVer 1.1.13-0 においてです。Ver記載漏れm(_ _)m
※2013/09 追記。1.1.15-0 に Ver Upして下記エラー出なくなりました。素早い改修に多謝!
してるのだが、
300 / sec くらいでLocalのtd-agentに書込をしていたら下記のエラーが偶発的に発生。
Fluent\Logger\FluentLogger stream_socket_client(): unable to connect to unix:///var/run/td-agent/td-agent.sock (Resource temporarily unavailable)
とりあえず
php-fpmのpm.max_childrenを増やす
>改善されず
その後、ソケット通信の最大数を疑ったところ、@shoma から
net.core.somaxconn いじれとアドバイス受けて変更
$ echo "net.core.somaxconn=4096" >> /etc/sysctl.conf;
$ sysctl -p;
$ sysctl -a | grep somaxconn
が、まだ改善されず。。
phpredisのgithubだが下記にstream_socket_clientの文言発見
でSyncookieをOffにするべきと提示されているので、対象のSyncookieをOffに
$ echo 0 > /proc/sys/net/ipv4/tcp_syncookies
でもまだエラー出る。。。
2013年6月14日金曜日
AWS Redshiftについてメモ書き 2013/06/14
sortkey
RDBで言う所のindex的な。SELECT時のパフォーマンスに影響大。
ex. 1億件ちょっとでSELECTかけた際は、これの有るなしで
5sec 〜 200secくらい違った。
指定方法 ex created_at datetime NOT NULL sortkey
sample
http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_examples.html
diskey
multi node運用した際に、diskeyを指定したカラムが同じ場合に、
同じノードに保存される。
ので、joinする時などに効果ありみたい。。
ユーザIDとか、他と紐付ける事が多いテーブルにするべきなのかな
指定方法 ex user_id varchar(32) NOT NULL distkey,
上記に関してはこの記事参考
http://gihyo.jp/dev/serial/01/redshift/0004
なお、ALTERでは上記指定はできない模様。
CREATE時にやるか、後からSELECT INSERT (できるのか?
まるっとテーブルコピーできた。
INSERT INTO TABLE1 (SELECT * FROM TABLE2);
ANALYZE COMPRESSION;
圧縮方法の分析をかける。30万〜レコード無いと、よろしく分析されない模様。
また、圧縮方法の指定に関してはCREATE TABLE時に
参考程度に、20カラム 1レコード2k 1億5000万件程度のDBをマルチノードの2スレッドに
リサイズしたら1時間半かかった。ふむ。。
しかしながらsortkeyをかけていないカラムでの検索がチョッパヤに。
シングルノードで200秒かかっていたのが3秒程度に。。
データ量によるんだろうけど、マルチノードの威力絶大。
custkey int encode delta,となる。
ノードのリサイズについて
データ量によると思うが、割と時間かかる。参考程度に、20カラム 1レコード2k 1億5000万件程度のDBをマルチノードの2スレッドに
リサイズしたら1時間半かかった。ふむ。。
しかしながらsortkeyをかけていないカラムでの検索がチョッパヤに。
シングルノードで200秒かかっていたのが3秒程度に。。
データ量によるんだろうけど、マルチノードの威力絶大。
2013年5月20日月曜日
第一回渋谷アドテク勉強会 メモ書き
いやー面白かったす。
以下は個人的メモ書き
懇親会が一番面白いのはお約束的な。
株式会社adingo 鈴木様 @suzu_v
『Head First Ad Technology and DMP』
大学院でセマンティックWEBの研究をしていた
- 最近のアドテクノロジー (RTBを中心に)
- DMP入門 - cosmiを例に -
- アドテク イントロデュース
- 広告、効果的に出したいよね
- Behind The Banner 説明がよくできとるな
- DMPとは
- ※このサイトでこんなアクションしたら(購入など)セグメントを振る。セグメントで判定
- cosmi(addingのプロダクト)で使うテクノロジー
- Cookie付与
- iPhoneはどうしてる?
- Haddopでバッチ処理
- 当該ブラウザが特定のセグメントに属しているか返す
- Hadoop集計後のオーディエンスDBはMongoで構築
- でAPIでDSP,SSPで返す
- Jenkinsで管理
- PiggyBackでCookie焼いてる
- ユーザの訪問履歴や個人情報が渡らないように気をつけている(DMPの良心)
Mixi 大谷和史
Vantageの開発者
vntg.jp
- mixiのオーディエンスデータを生かした、広告配信プラットフォーム(DSP)
- OpenRTB 準拠。全内製
- mixi外へもオーディエンスデータを生かした広告を配信したい
- 去年の夏から開発、今テスト配信中
- 個人特定や広告配信に不必要な情報はmixiのDBから取れないようにしている
- 個人情報の取扱に超配慮!
- デバイスをまたいだリターゲティング、オプトアウト(mixiのIDと紐付けて)
- AWSを活用
- OpsWorksも使用
- Python、uWSGI
- データストアはKyotoStoreとRedis
- 夏頃から正式販売
株式会社サイバー・コミュニケーションズ メディア開発部 秦様 (営業)
OpenX Market Japan の概要
メディアレップから見た在庫の価値について
- 『AdExchnageから見たDemand Player&Supply』
- OpenX Marketの概要および実態
- 在庫の価値って?(ユーザー VS メディア)
- OpenX Marketの今後の取り組み
OpenX Market Japan Co Ltd- cciの子会社
- 400site 月間100億imps(海外含む)
- ディスプレイ&スマートフォン
- 主要DSPとは繋ぎ込み済
- OMJにアカウントを作ることで、OpenX全て購入対象
- OMJに在庫を投入する場合は、cciが全て事前に確認してから
- 在庫の価値はユーザー?人?
- OpenX(ターゲティング) VS Adjust(ノンターゲティング)
- もちろんリターゲティングの方が効果、単価とも上だけど。。。
- メディアの特徴を掴むことで上げることができるのでは無いか
- OpenXのWinRate 25%(数%のところも有る)
- 自分向けのコンテンツで、自分向けの広告に接触した場合、興味の喚起度 8倍
- 買われないメディアを安く有効活用
- OpenXのプライベートエクスチェンジ
- プレイヤーごとに見解が違う
- 広告主:自社広告のみ扱うのが欲しい
- DSP事業者:自社DSPのみ動く在庫が欲しい
- メディア:指定案件のみ在庫提供したい
- ヒアリングしていかないと
アマゾン データ サービス ジャパン株式会社 今井様
- 『アドテク界隈におけるAWSの使いドコロ』
- カオスマップにロガのロゴ混ぜてもらってありがとうございますw
- FreakOut USリージョン使ってる
- 構成はうちと同じだけどクリエイティブの配信はCloudFront
- AdRoll
- 広告データ、ユーザデータもDynamoDBに載せてるらしい。
- 日に70億
- 10億のクッキーデータ。。。
- DynamoDB 今年4月に6割値下げ。使ってみるか。
- 海外のDSP、SSPはUS EASTに集まってきてるみたい。(ネットワーク的に近いほうが早いから)
- 海外の勉強用 youtube http://bit.ly/108aSwX
2013年5月17日金曜日
RapidSSLをELBに適用するメモ
事前準備として、CSR作成時のserver.keyからパスフレーズを除去
1. $ cp server.key server.key.bk 2. $ openssl rsa -in server.key.bk -out server.key
- $ cp server.key server.key.bk
- $ openssl rsa -in server.key.bk -out server.key
- Enter pass phrase for server.key.bk: と出るので、パスフレーズ入力
ここからELBだ。
- AWSコンソールからELB作る
- ListenersタブからプロトコルにHTTPSを選択し、SSL CertificateのSelectをクリック
Certificate Name:* (e.g., myServerCert) Private Key:* (pem encoded) Public Key Certificate:* (pem encoded) Certificate Chain: - Certificate Name :判別できるように適当な名前をつける
- Private Key:上記のserver.keyをコピペ
- Public Key Certificate:サーバ証明書(crt)をコピペ
- Certificate Chain: https://knowledge.rapidssl.com/library/VERISIGN/ALL_OTHER/RapidSSL%20Intermediate/RapidSSL_CA_bundle.pem
のからコピペ - 443 <-> 443とプロトコルがなってる事を確認してsave
- httpsで接続して確認
CloudFront使ってみた
とある開発案件で、Javascript XMLHttpRequest、ではまってしまったのでCloudFrontで助けられたって話
(正確にはこれから助けられるはず。。)
(開発で面倒&ケチってELBと別のサブドメイン使わないで、1ドメインでやってたから、
別ドメインだとJavascriptのXMLHttpRequestちゃんとchromeで動作しないの失念してた・・・・)
で、何がやりたいかというと、
1.静的なjsファイルはキャッシュしつつ
2.動的に動く部分はもちろんno-cache
3.上記を同じドメインで動かす
というのをやりたくなった訳だ。
当初、JSのキャッシュ部分のみcloudfrontで、動的部分はEC2で別のサブドメイン切って、、
みたいなので上記のエラーにはまり。
JS改修するのは恐らく大変なので。
じゃ別ドメインじゃなくて同じだったらイケるやん?と。
Cloudfrontが動的スクリプトもサポートしたって言うし。
というのが前段。
じゃ、CloudFrontの設定をやってみよー
という事で、これで同一ドメインで
良かった良かった。っていうかCloudfront強力だなぁ。好きなサービス上げろって言われたら今はCloudfrontあげちゃうかも。
(正確にはこれから助けられるはず。。)
(開発で面倒&ケチってELBと別のサブドメイン使わないで、1ドメインでやってたから、
別ドメインだとJavascriptのXMLHttpRequestちゃんとchromeで動作しないの失念してた・・・・)
で、何がやりたいかというと、
1.静的なjsファイルはキャッシュしつつ
2.動的に動く部分はもちろんno-cache
3.上記を同じドメインで動かす
というのをやりたくなった訳だ。
当初、JSのキャッシュ部分のみcloudfrontで、動的部分はEC2で別のサブドメイン切って、、
みたいなので上記のエラーにはまり。
JS改修するのは恐らく大変なので。
じゃ別ドメインじゃなくて同じだったらイケるやん?と。
Cloudfrontが動的スクリプトもサポートしたって言うし。
というのが前段。
じゃ、CloudFrontの設定をやってみよー
まずCloudFrontのDistributionを作成
- methodはDoenload
- Origin SettingsやBehavior Settingsは、デフォルトをどうするかで貴方のお気に召すままに。
俺は当初、S3のバケットに置いたJSをキャッシュさせるつもりだったのでその設定で。 - 作成
作成したCloudfrontを選択して、Distribution Settingsを選択して
- Origins:Create Origin を押下
平たくいうと、ファイルの呼び出し元だねー - 追加したいキャッシュ元を入れる。
(S3 bucket or ELB or Other(別ドメイン、AWS以外でもいけるようだけど試してない)) - Behaviors:Create Behaviors を押下
こっちは、Requestされたファイルに対しての適応条件って感じ。
パターン数の数だけ書いて、どれにもマッチしなければdefaultが適応されますね。
フィルタみたいな感じだねー
以下は動的に動かしたかった場合の例 - Path Patarn : Request URIがこの条件に一致する場合に、この動作をしますよと。
お試して
*.php
/hoge
/fuge
とした。 - Object Caching:Customize
- Mnimum TTL : 0
- Foward Cookies:None
- Whitelist Cookies:ブランク
- Forward Query Stgings : 動作スクリプトがQuery Stgings 使うのかどっちかでお好みで
今回の自分の例では、必要/不必要 2パターンだったので切り分けてみた。 - Restict Viewer Access:アクセスに制限を掛けますかと。今回は割愛
他設定、適切にヘッダ等設定されていないとcacheされるよ!
今回はnginxとphp-fpmでの例
不要なの有ったら教えて欲しいっす・・・
- php.ini
- session.cache_limiter = nocache
session.cache_expire = 0 - ヘッダ追加
Nginx の HttpHeadersMoreModule を使うと、mod_expiresみたいな事できるみたいだけど
今回は時間ないのでスルー…ちゃんと調べたい。
ので、phpファイルででheader()で。 - header("Cache-Control: no-cache,max-age=0,s-max-age=0");
- If-Modeified-Sinceの設定もあるが、nginxはデフォルトでexpiresだったのでスルー
確認
で、暫く待ちましてDeployedになったならば、動的にしたファイルにアクセスしてみる。
とりあえず phpで
echo date('Ymd H:i:s');
echo date('Ymd H:i:s');
で、都度更新されてるか確認。
問題なければ時間が毎秒更新、アクセスログにも”Amazon CloudFront”からのアクセスログが残るはず。
という事で、これで同一ドメインで
静的ファイルはCloudFrontにキャッシュしつつ、動的に動かす必要がある部分はEC2に処理させつつってのが比較的手間もかからず、負荷にも強そうな感じでできそうです。
良かった良かった。っていうかCloudfront強力だなぁ。好きなサービス上げろって言われたら今はCloudfrontあげちゃうかも。
後はSSLに対応してくれたらなぁ。。
さて、これを元に構成図書きなおさなきゃ。。。
2013年5月15日水曜日
RapidSSLをEC2 nginxに適用した際の手順メモ
何か有っても責任取れないから事故判断でね・・
CSRの作成手順
- 作業場所作成
$ mkdir -p ssl/ssl-{対象common名} _2013 とかで適当に作業ディレクトリ作成。 - 作ったディレクトリに移動
- 適当にファイル作成
$ touch {Ymd}
とかで。
※ 後のsha1がディレクトリ内のファイルから擬似乱数ファイルを作成する為。 - 擬似乱数ファイルを作成
$ openssl sha1 * > sha1.dat
- 作成した擬似乱数ファイルから秘密鍵ファイルを作成
$ openssl genrsa -des3 -out server.key -rand sha1.dat 2048
Enter pass phrase for server.key: 秘密キーを入力
Verifying - Enter pass phrase for server.key:秘密キーを再入力
- CSR の作成
- $ openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key: {秘密キー入力}
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:{JP}
State or Province Name (full name) []:{Tokyo}
Locality Name (eg, city) [Default City]:{Shibuya-ku}
Organization Name (eg, company) [Default Company Ltd]:{HOGE Co., Ltd.}
Organizational Unit Name (eg, section) []:{Development}
Common Name (eg, your name or your server's hostname) []:{対象となるメイン}
Email Address []:{何もしないでenter}Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:{何もしないでenter}
An optional company name []:{何もしないでenter}- CSRが作られる。
- CSRをRapidに送って第一部完。
CSRをRapidに送って第一部完。
以下の手順はサーバ証明書発行が完了してから
nginxへの適応(NOT ELB!ELBはこの後調査)
- 【通知】 SSL サーバ証明書発行完了のお知らせ
とメールが届く - SSL関連ファイル置き場所作成
-
$ mkdir -p /etc/nginx/ssl
-
-
nginx virtual.conf編集
-
以下を追記
-
server {listen 443 default ssl;ssl on;# サーバ証明書(サーバ証明書に中間CA証明書を連結したもの)ssl_certificate /etc/nginx/ssl/{ドメイン名}/cert.crt;# 秘密鍵ssl_certificate_key /etc/nginx/ssl/{ドメイン名}/server.key;・・・・・・}
-
以下を追記
-
ファイル作成 cert.crt
- nginxでは、サーバ証明書(crt)と中間証明書をくっつけた形式で使う模様
- メールで送られてきたサーバ証明書と、
クロスルート仕様の中間証明書を1ファイルに纏める
※メールで送付された中間証明書は、スマホ対応してないようなのでクロスルートを使う事 - base.crt にメールで送られてきたサーバ証明書、
中間ファイルをchain.crtとして、保存 -
$ cat base.crt chain.crt > cert.crt
-
ファイル作成 server.key
-
CSR作成時に作ったserver.keyを持ってきて配置
-
-
nginx restart
-
https アクセスして確認
おまけ:パスフレーズを削除
スケールアウトさせたりするのに不便なのでー
1. $ cp server.key server.key.bk
2. $ openssl rsa -in server.key.bk -out server.key
3. $ Enter PEM pass phrase:[パスフレーズ入力]
でserver.keyを置き換えてnginx restartして確認。
ELBにSSL証明書仕込む時もパスフレーズ削除しなきゃだしねー
登録:
投稿 (Atom)