Archive for 7月, 2013

【AWS】CloudFront CDNのキャッシュについて

こちらはまったので注意

『CDNは、データが無いよというネガティブキャッシュも保持する』

ようするに、CDNにアクセスしたが画像がなく、次にS3に画像を参照しに行ったがそこでもなかった場合、「画像がないよ」という情報がCDNに記録されしまうということです。

そのため、S3には画像をあとから上げたとしてもCDNのキャッシュ上にはないという情報が残っているため、キャッシュをクリアしなければいけません。

画像の後ろにタイムスタンプをつけておき(sample.png?20130728004000)、画像が切り替わればタイムスタンプを変更するというスタイルのほうが、好きなタイミングで画像の切り替えを行うことが出来ると感じました。

みなさんもネガティブキャッシュにはご注意を!!

【AWS】Route53を使ってS3のドメインを指定する

AWSを使用しているなら分かりやすさを重視するためにS3のエンドポイントにわかりやすいFQDNをつけてAWSのDNSであるRoute53に登録してみたが下記のようなエラーが出た。


  <Code>NoSuchBucket</Code>
  <Message>The specified bucket does not exist</Message>
  <BucketName>*************</BucketName>
  <RequestId>*******</RequestId>
  <HostId>...</HostId>

エンドポイントに直接アクセスすれば、画像は表示されるのにRote53を経由した場合だとBucketがねぇよ!って怒られる。。。

なんでだろと思ってリファレンスを見ていると、どうやらS3のバケット名とキーの命名規則について

『バケットでは英数字が基本ではあるが、DNS(.s3.amazonaws.com)としても使われる』

なんと!
バケット名と指定するFQDNを同じにしなければいけないとは。。。

バケット名とFQSNを同じにするとRoute53経由で見れるようになりました!!

ちゃんと読めばわかるけど、意外にはまりそうなポイントでした。

参考
http://blog.suz-lab.com/2009/09/amazon-s3.html

http://blog.serverworks.co.jp/tech/2012/08/10/best-practices-for-using-amazon-s3/

デーモン起動・終了時実行の環境変数(パス)の違いに注意

最近、サーバの自動構築にあたり、
サーバ起動時のスクリプトをChefと組み合わせて書いているのですが、そこで問題が。。。

rootユーザでシェルスクリプトをがりがり書いて、sh ~~~で実行確認。
その後サーバの起動時にスクリプトが実行するように/etc/init.d以下に起動スクリプトを作成し、
chkconfig onでサーバを再起動してみると

スクリプトが動いていない

環境変数が違う

調べてみると両者実行時に、環境変数が違うために
コマンドやそれらの設定などが読み込まれずエラーとなるとのこと

rootユーザでのshコマンド実行時とデーモン起動終了時のスクリプトの環境変数の違いについては
以下の記事がすごく参考になりました。

デーモンの起動・終了にはserviceコマンドを利用しよう

そのため、起動スクリプトを記載し確認する際には、
service コマンドを利用して実行しながら確認する必要があります。

serviceコマンドで実行すると、デーモン起動・終了時のスクリプト実行時の環境変数と
同じ環境変数で実行してくれるためいちいちサーバを再起動しなくても確認することはできます。

同じrootで実行してるのなら環境変数も同じにしてくれたらいいのに。。。