この記事は ZOZOテクノロジーズ Advent Calendar 2018 - Qiita 10日目の記事です。
2年ほどラズパイ上でHomebridgeの運用をしていましたが、新型NatureRemoの発売に伴い構成を見直すことにしました。 takanamito.hateblo.jp
新型NatureRemoはIRKitと違い、温度・湿度・照度が取れるのでお部屋モニタリングが捗ります。
続きを読むこの記事は ZOZOテクノロジーズ Advent Calendar 2018 - Qiita 10日目の記事です。
2年ほどラズパイ上でHomebridgeの運用をしていましたが、新型NatureRemoの発売に伴い構成を見直すことにしました。 takanamito.hateblo.jp
新型NatureRemoはIRKitと違い、温度・湿度・照度が取れるのでお部屋モニタリングが捗ります。
続きを読む日次でDB内のとあるテーブルのデータ全件をBigQueryに同期するバッチがあって
RDS for MySQLからデータをselectしていたが、先日Aurora MySQL(5.6.10)に移行した直後から急にバッチがこけはじめた。
バッチは使用しているMySQLクライアントの設定値(3600秒)に従ってタイムアウトし落ちていた。
バッチの実行時間帯のCloud Watchメトリクスを確認してみると
AuroraのCPU使用率が30分間ほど平常値から外れて高くなっていた。
しかしバッチを実行しているEC2のネットワークインプットメトリックは特に変動がなく、Auroraからselectした結果を受け取れてなさそうなことも同時にわかった。
DBへの接続がタイムアウトするまでに1時間かかっているのに、selectによるCPU負荷が30分程度しか上昇していないので
クエリが何らかの理由で異常終了している可能性を疑い始める。
先日OpenAPIのスキーマからRubyのクラスを自動生成するgemを作りました。
OpenAPIのschema定義からRubyのクラスを生成するgem「openapi2ruby」をつくりました - Start Today Technologies TECH BLOG
このgemを作って自動生成しようとしたのがActiveModel::Serializer(AMS)のシリアライザで
他にも自動生成できるものがないか調べていたときに、ちょっと前に話題になったNetflixのgemを見つけたので使ってみることに。
なんでも
serialization time is at least 25 times faster than Active Model Serializers on up to current benchmark of 1000 records.
らしい。速い。
続きを読むhappybirthday | RubyGems.org | your community gem host
使い方は以下の通り
require 'happybirthday' birthday = Happybirthday.born_on('2000-01-01') birthday.age.years_old # => 18続きを読む
普段お仕事でRailsアプリケーションを作ってて、今はチーム内共通のMySQLサーバーをみんなが参照している。
これをDocker化してうまくみんなにイメージを配布したかった。
前職ではMySQLにデータが投入済みのDockerイメージを作成して、コマンド一発でデータが入った状態のMySQLコンテナが立ち上がるようになっていたので、そのやり方を元同僚に聞いて再現してみることにした。
docker-composeを使って
の2つを立ち上げて利用する。
まずはデータ入りDockerイメージ作成
/var/lib/mysql
以下をコピーdocker build
すれば出来上がり続いてデータ入りのイメージから、データ投入済みMySQLコンテナを立ち上げる
順を追って詳細説明していきます。
公式イメージからMySQLコンテナの起動
起動したらDB作成とデータ投入
$ docker run -d --name db -e 'MYSQL_ALLOW_EMPTY_PASSWORD=yes' -p 3306:3306 mysql:latest
データ入りのファイルをホストにコピー
$ mkdir -p ./data/var/lib $ docker cp db:/var/lib/mysql ./data/var/lib
Dockerfileの作成
FROM busybox RUN mkdir -p /var/lib/mysql COPY data/var/lib/mysql /var/lib/mysql RUN chown -R 999:999 /var/lib/mysql VOLUME /var/lib/mysql CMD tail -f /dev/null
最後に
$ docker build .
docker-compose.ymlをつくって $ docker-compose up
version: '2' services: db-storage: image: {さっきつくったdocker image} volumes: - /var/lib/mysql db: image: mysql:latest ports: - 3306:3306 volumes_from: - db-storage
storage用のimageをDockerHubなどのレジストリにpushしておけば、他の開発者はプロジェクトのリポジトリをcloneして docker-compose up
するだけでデータ入りのDBが即座に立ち上がる。
最初これを作ろうとしたとき VOLUME
指定をするとimageにデータが保存されなくて困っていたところ、元同僚から「Dockerfileの中でVOLUMEを指定する前に追加したデータはimageに含まれるんですよ」というアドバイスをもらい無事に実現できたのでありがとうありがとうという感じ。
とりあえずやりたいことは実現できたが、微妙にやり切れてないのがdocker-compose.ymlをversion: 3
で書くことで、version3から volumes_from
が消えていてうまく書けなかったりしている。
ちょうど趣味プロジェクトでまあまあのデータ量のDBを扱うアプリケーションを作ろうとしていたので、Docker化をして友達の開発者とかに「こんな感じで動くよ」ってすぐに見せられて便利。
Docker imageにでっかいデータをのっけることの筋が良い悪い話はいったん置いといてください。