Carpe Diem

備忘録

うるう秒対応

概要

2017/01/01 09:00:00(JST)にうるう秒が挿入されますが、ちゃんと問題点や対応方法を理解してなかったのでまとめ。

前提知識

うるう秒発生でどうなるか

ntpを入れているか、tzdataが更新されているかによって動作が異なります。

JST ntp
(stepモード)
tzdata 未対応
08:59:59 08:59:59 08:59:59 08:59:59
08:59:60
うるう秒発生
08:59:59 08:59:60 09:00:00
09:00:00 09:00:00 09:00:00 09:00:01
09:00:01 09:00:01 09:00:01 09:00:02

このようにntpであれば08:59:59が2回、tzdataであれば08:59:60が挿入されます。

続きを読む

Packerでソースに使う公式AMIの場所

概要

Packerでsource_amiとして使用する公式のAMIが探しにくいので、利用するものだけまとめました。

Ubuntu

Ubuntu Amazon EC2 AMI Finder

こちらで検索します。Searchのところに16.04などバージョンを入れれば出てきます。

f:id:quoll00:20161220134537p:plain

その中でInstance Typeがややこしいのですが、以下の通りです。

続きを読む

サーバサイドのCORS対応

概要

No 'Access-Control-Allow-Origin' header is present on the requested resource.というエラーが出た際に外部API(サーバ側)でどう対応すべきかをまとめました。

CORSでググると幸せになれます。

環境

  • go 1.7.4
  • gin 1.1.4

CORSが必要になるのはどんな時か

シンプルに言うと以下の条件のときです。

  • ブラウザからの外部APIへのリクエストである
  • 今開いてるページのURLとは別ドメイン、別ポートのAPIをページ内で叩こうとしている

ref: オリジン間リソース共有 (CORS) - HTTP | MDN

続きを読む

ldflagsを使おうとしてハマったこと

概要

golangではbuild時にldflagsというオプションをつけると、変数に値を埋め込んだ状態でバイナリを生成することができます。
よく使われるのはビルド時のgitのcommitのハッシュを埋め込んで、そのバイナリがどのcommitで作成されたのかを明らかにして「想定したバージョンでビルドができているか」や「複数のサーバ間で同じバージョンを使用できているか」などをチェックしたりします。

今回はそのldflagsを使う上でハマったことを書きます。

環境

  • go 1.7.4

ハマったこと

go 1.5から書き方が変わった

以前はスペースで区切って

go build -ldflags "-X パッケージ名.変数 値"

でしたが、今は=を使って

go build -ldflags "-X パッケージ名.変数=値"

となります。

続きを読む

angular-cliで手軽にAngular2を始める

概要

Angular2のチュートリアルを終えた後で「いざ作ってみよう」となると

  • 「package.jsonやtsconfigとかどうしよう」
  • 「system.jsよりwebpackがいいって聞くけどどうなんだろ」
  • 「テストフレームワークは何がいいんだろう」

みたいなことで悩んでなかなか進まないことがあると思います。
そんなときにそういった開発の下準備的なことをまとめてやってくれるのがangular-cliです。
angular-cliに下準備を任せ、Material Designをあてたページを作成します。

環境

  • angular-cli 1.0.0-beta.21

成果物

今回実装してできるものは以下です。

デモページ

Angular2Sample

続きを読む

Elasticsearchでスコアに重み付けを行う

概要

SEO対策という言葉があるように、Googleの検索結果は単なる文字列の一致率ではなくホームページ自体にスコアが付けられており、それを元に検索の順位が決まります。
今回はElasticsearchでそのようなスコア順に並べる方法を説明します。

環境

  • Elasticsearch 5.0.0

データの用意

同じ名前のmy siteというサイトを用意します。そしてそれぞれのスコアをsで設定しています。

curl -s -XPOST localhost:9200/my_index/my_type/_bulk -d '
{"index": {"_id": "1"}}
{"title": "my site", "body": "Bad site", "s": 1}
{"index": {"_id": "2"}}
{"title": "my site", "body": "Normal site", "s": 10}
{"index": {"_id": "3"}}
{"title": "my site", "body": "Good site", "s": 100}
'
続きを読む

ECSでコンテナのrolling update

概要

ECS上のコンテナをダウンタイム0で更新(デプロイ)する方法をまとめます。

環境

  • ALB
  • ECS container agent 1.13.0
  • Docker 1.11.2

Amazon ECS Container Agent Versions - Amazon EC2 Container Service

ポイント

  • minimumHealthyPercentmaximumPercentを適切に設定する
  • connection drainingを適切な長さにする

この2つを意識していればOKです。

続きを読む