読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

React.js+Fluxでcounter

概要 Fluxアーキテクチャを勉強しようと思って簡単なcounterを作ってみました。 github.com 動作ページはこちら 環境 React.js 15.0.1 Babel 6.5.2 webpack 1.12.15

GolangでTwitterのOAuth1.0認証

概要 GolangでTwitterのOAuth認証をします。 oauth1.0のライブラリはいくつかありますが、今回はgaryburd/go-oauthを利用します。 github.com 環境 Go v1.6.2

goroutine、channelの扱い方

Go

概要 goroutineやchannelを扱う上で気になった点を箇条書きしました。まとまってはいないのでご注意ください。 簡単のためchannelでの受信側をreader、送信側をwriterとして書いていきます。 環境 Go 1.6.2 実装時に注意するポイント readerとwriterは別goro…

JWTを認証用トークンに使う時に調べたこと

概要 JWTを認証用トークンに使う時に調べたことをまとめます。 JWTとは 以下のフォーマットです。 {base64エンコードしたheader}.{base64エンコードしたclaims}.{署名} 以下の特徴があります。 発行者が鍵を使ってJSONを署名(or HMAC)し、トークンとして扱…

Kubernetes を使ったマルチホスト環境でのクラスタを構築する【flannel編】

概要 前回の続きです。 今回はflannelを導入してマルチホストでのコンテナ間通信を可能にします。 マスターの設定 flannelの設定 flannel.json ネットワークの設定ファイルを用意します。適当にflannel.jsonとします。 { "Network": "10.20.0.0/16", "Subnet…

Kubernetes を使ったマルチホスト環境でのクラスタを構築する【基礎編】

概要 Kubernetesを使ってDockerのクラスタを構築します。Kubernetesを使うことで以下のような本番環境を意識したシステムを構築できます。 フェイルオーバー(コンテナが異常終了したことを検知し再起動させる) スケーリング(起動しているコンテナの数を自…

neologdでkuromojiを新語に対応させる

概要 Elasticsearchの日本語の形態素解析をする際に利用されるkuromojiは非常に便利ですが、その辞書であるIPADICは更新が止まっているためやや古い状態です。 その辞書を更新してくださった方がいらっしゃり、neologdとして公開されているためそれを導入し…

マルチホスト上にoverlay networkを構築してコンテナ間で疎通

概要 以前はWeaveというツールを使ってマルチホストをまたいだコンテナ間通信ができるように構築しました。 Docker 1.9.0からVXLANという仮想でL2ネットワークを構築する技術を用い、Docker自身がマルチホストネットワークに対応したので、今度はそちらで構…

Prefix Query の注意

概要 ElasticsearchのPrefix Query を使用する時に詰まったところをまとめました。 環境 Elasticsearch 2.3.2 通常の利用方法 マッピング・データ用意 マッピングを設定します。 項目 設定値 インデックス名 test タイプ名 internet フィールド名 name で設…

Docker Swarmでマルチホストでクラスタ構築

概要 Docker Swarmでマルチホスト環境上でDockerクラスタを構築します。 事前知識 Docker Swarmで構築する際は以下の3つの要素が必要になります。 ノードを管理するDiscovery backend Swarm Manager(マスターノード) Swarm Node(子ノード) 環境 Docker …

Docker Compose で複数コンテナを管理

概要 単一ホスト上で複数のコンテナを起動するときはDocker Composeを使うのが便利です。 今回はその基本的な使い方を紹介します。 環境 Docker 1.11.0 Docker-Compose 1.7.0 Docker Composeのメリット 複数コンテナを管理しやすい スケールアウト、スケール…

Consulを使ってみる

概要 Consulというサービス・ディスカバリツールを使います。 クラウド時代ではオートスケールなどサーバの台数やIPが変動することが多いため、動的に検知できる必要がありConsulはそのためのツールです。 またConsulを通してどのサーバ上でどのようなサービ…

Docker Data Volume を理解する

概要 Dockerのデータをホスト側に保持する方法をまとめます。 Dockerはコンテナの破棄・再作成が簡単にできる一方、そのままだとデータも消えてしまいます。 今回のDate Volumeはデータの永続性を保つべきシーンで必要となる知識です。 環境 OSX 10.11.4 doc…

GoでDependency Injection

Go

概要 「Dependency Injection=依存性の注入」と言われますが、依存したオブジェクトを外部から入れることで何がメリットなのかを感じ取るのは実際に書いてみて分かると思うので、勉強としてまとめてみました。 Dependency Injectionとは デザインパターン …

GoのRace Detectorでマルチスレッドでのデータ競合検知

Go

概要 Go1.6からマップへの同時アクセスを検知する機能が追加されました。 しかしそれ以前からrace detectorが標準で備わっているため、複数のスレッドによる同時アクセスで起こるデータ競合の検知はできます。 今回はその使い方を紹介します。 環境 Go 1.6 …

GolangでGooglePlayの課金レシートの署名検証

概要 GooglePlayでは課金処理の実行時に署名を発行してくれるため、そのレシートが正規のレシートかどうかを検証する事が可能です。 今回はGolangでその検証ロジックを実装してみます。 環境 Golang 1.6 必要な情報 以下の3つが必要になります。 1. アプリ…

Bool Query と Dis Max Query の違い

概要 Bool QueryとDis Max Queryの違いが曖昧だったのでちゃんと調べました。 環境 Ubuntu 14.04 Elasticsearch 2.2.0 データ投入 curl -s -XPOST localhost:9200/my_index/my_type/_bulk -d ' {"index": {"_id": "1"}} {"title": "Quick brown rabbits", "b…

SlackにRSSのフィードを通知させる

概要 「SlackにGithubのリリース通知を飛ばしたい」と思い、やり方としてgithubのreleasesのRSSフィードをSlackへ飛ばす方法があったので紹介します。 手順概要 Slackへintegrationの追加 githubのreleaseのRSSフィードを用意 RSSフィードを設定

React.js+Babel+webpackでfizzbuzz

概要 React.jsを勉強しようと思って簡単なfizzbuzz表示するだけのものを作ってみました。 github.com 動作ページはこちら 役割 ツール名 役割 React.js UIを構築するためのライブラリ。フレームワークではない。 Babel ES6など新しい記法を既存のブラウザで…

Babel6でトランスパイル

概要 React.jsの勉強している時にBabelというツールを皆さんが使っていてどんなツールか知らなかったのでまとめてみました。 環境 Babel 6.5.2 Babelとは BabelはES6やES7など、新しいJavaScriptの仕様で書かれたソースコードを現状のブラウザで使用できるよ…

検索時に複数のクエリでスコアを付ける その2

概要 前回と同じく、検索した時に「部分一致させたいけど、上位に出るのは前方一致してるものがいいなぁ」といった時の対応。 今回はcopy_toを使います。 元々の経緯としてはフィールド構造が異なる複数の対象に対してTopHitsクエリを用いていたのですが、何…

Amazon Cloud Drive で暗号化して保存する

概要 Amazon Cloud Driveを暗号化して扱う方法です。 ※ファイルの追加、更新はできますが削除ができません 考え方 基本的なデータの流れは以下です。

CuratorでElasticsearchのインデックスを削除

概要 Kibanaを使う上でデータ容量が問題になってきます。 可視化やログ調査に必要な分のみ残し、古いインデックスを定期的に削除する必要があります。 Curatorはそのためのツールです。 環境 Elasticsearch 2.2.0 Curator 3.4.1

Elasticsearch plugin 作成方法 [2.x]

概要 前回は1.x系のプラグインの作成方法を書きました。 今回は2.x系の作り方を勉強します。 完成形は以下 github.com 環境 Ubuntu 14.04 Elasticsearch 2.2.0 1.xとの違い 1.xはmaven、2.xはgradleでやるのが主流 2.xからAbstractPlugin => Pluginに変更 pl…

Elasticsearch plugin 作成方法 [1.x]

概要 Elasticsearchのプラグインの作成方法です。 1.xと2.xで色々と変更があるので、まずは1.xの作り方を学んでみます。 完成形は以下 github.com 環境 Ubuntu 14.04 Elasticsearch 1.4.5 プロジェクト作成 mavenからスケルトンコードを生成することができる…

encfsでファイルの暗号化

概要 クラウドにファイルをバックアップする場合、できれば暗号化したいのですがVeraCryptなどでは1ファイルを変更しただけでボリューム全てをアップロードし直しになり現実的じゃありません。かといって全て暗号化zipなどにすると、使う上で不便極まりない…

Amazon Cloud Driveをコマンドラインで操作する

概要 amazon.co.jpの方は写真のみですが、amazon.comの方ではAmazon Cloud Driveが容量無制限プランを用意しています。 こちらはDropboxとは異なり、ローカルPCとの同期型でなくファイルをクラウド上にどんどん送り込むタイプのもので、公式が用意しているア…

UnionFS で Docker のレイヤ構造を理解する

概要 DockerではAUFSという技術が使われています。 こちらはUnionFS(ディレクトリを重ね合わせることができる)の一つで、親のファイルシステムをすべてReadOnlyにして、その上に書き込み可能なレイヤを重ねて1つのファイルシステムのように扱います。 Docker…

TerraformでAutoScaling環境の構築

概要 Terraformを使ってAutoScaling環境を構築します。 以下の状態をゴールとします デフォルト1台 CPUが30%超えたら1台増やす CPUが5%以下なら1台減らす 環境 Terraform 0.6.9 Terraform設定 セキュリティグループなどはTerraformでAWSのセキュアな構成…

Kibanaの運用で注意すること

概要 Kibanaをログ可視化&検索として扱う上でいくつかの問題が生じたので、その時の対処方法をまとめます。 ログ可視化という用途であればレスポンス速度などの優先度は下げられるため、以下の対応が可能になります。 環境 Ubuntu 14.04 Elasticsearch 2.1.…

NginxのアクセスログをKibanaで可視化

概要 Nginxのアクセスログを用いて可視化の流れをまとめます。 mappingは手動で設定します。 環境 Ubuntu 14.04 fluentd 0.12.19 fluent-plugin-elasticsearch 1.3.0 Nginx 1.4.6 Elasticsearch 2.1.1 Kibana 4.3.1 構成 IP 名前 役割 192.168.33.100 web We…

Elasticsearch2.1 × Kibana4.3 の導入

概要 可視化ツールとして有名なKibanaについてです。 Kibana 4.3 では Elasticsearch 2.x が必要なのでインストール方法をまとめました。 環境 Ubuntu 14.04 Elasticsearch 2.1.1 Kibana 4.3.1 Elasticsearch2.xのインストール ElasticSearch 2.x のインスト…

最新のDockerをインストール

概要 Ubuntuのデフォルトパッケージはすでにsupportされていないため、公式サイトのやり方で最新のものを入れます。 環境 Vagrant 1.8.0 Ubuntu 14.04 Docker 1.9.1 事前準備 Ubuntu Wily 15.10 Ubuntu Vivid 15.04 Ubuntu Trusty 14.04 (LTS) 上記のバージ…

GrafanaでSensuのモニタリングを可視化

概要 Sensuはサーバを監視してアラートを鳴らすことはできますがそのデータを可視化することはできません。 なのでそれを可能にするGrafanaを扱います。 環境 Ubuntu 14.04 Sensu 0.21.0 InfluxDB 0.9.6 Grafana 2.5.0 サーバ構成 サーバ IP Sensu-Server 19…

Sensu クライアントインストール

概要 Sensuのクライアント側です。 簡単のため、RabbitMQの通信にSSLは導入していません。 環境 Ubuntu 14.04 Sensu 0.21.0 サーバ構成 サーバ IP sensu-server, rabbitMQ 192.168.33.100 sensu-client 192.168.33.101

Sensu サーバインストール

概要 監視ツールであるSensuを導入します。 構成をきちんと把握するために手動でインストールしていきます。 アーキテクチャ Source: Sensu | What is Sensu?

RabbitMQ のインストール

概要 RabbitMQをUbuntuにインストールします。 環境 Ubuntu 14.04 RabbitMQ 3.5.6 インストール publicキーの登録 $ wget https://www.rabbitmq.com/rabbitmq-signing-key-public.asc $ sudo apt-key add rabbitmq-signing-key-public.asc

FluentdをDataDogで監視

概要 fluentdを使う上でbuffer溢れは気になるポイントです。 monitor_agentを導入すればcurlで確認できますが、瞬間的な値であるためできれば継続した値が得られると便利です。 zabbixやsensuと組み合わせる方法もありますが、今回は一番楽そうなDataDogとい…

ElasticSearch 2.x のインストール

概要 メジャーバージョンアップでちょこちょこ変更点があるのでその対応を含めたインストール方法です。 環境 Ubuntu 14.04 Elasticsearch 2.1.0 Java 1.8.0_66 Java8のインストール $ sudo add-apt-repository ppa:webupd8team/java $ sudo apt-get update …

Node.jsでcluster環境でのlogging

概要 cluster環境では複数のプロセスが並列に動きます。 この状態で1つのログファイルにアクセスすると干渉が起きます。 かと言って各プロセス毎にログファイルを作成してしまうのは集約が面倒です。 今回はlog4jsを使ってその問題を解決します。 環境 Node…

MongoDBのAggregationとSQLの比較

概要 MongoDBのAggregationとSQLとの比較です。 どうやって集計するかな?と悩んだ時に慣れているSQLとの比較があると分かりやすいと思って公式ドキュメントに沿った形で載せてます。 環境 MongoDB 3.0.7 オペレータの比較 SQL MongoDB WHERE $match GROUP B…

MacでDocker環境構築

概要 MacでDocker環境を構築するためのメモです。 バージョンアップでも同じ進め方になります。 最新版は以下で確認します。 Release notes 環境 Docker 1.9.1 Docker Machine 0.5.1 Docker Compose 1.5.0 Docker Toolboxのインストール WindowsとMacにはAll…

Node.jsでFacebookのOAuth2.0認証

概要 FacebookのOAuth2.0認証を使うことがあったのでまとめました。 Node.jsなのでpassportというライブラリを使用します。 環境 Node.js 5.0.0 Express 4.13.1 npm 3.4.0 事前準備 以下のFacebookページでOAuth用のアプリを用意してください。 Facebook Dev…

コマンドラインでVirtualBoxのポートフォワード設定

概要 Dockerを開発環境に使う上でポートフォワードをする際、GUIからやるよりコマンドラインでできたほうが嬉しいので調べてみました。 環境 VirtualBox v5.0.8 使用するVMの名前はdevとします。 コマンド 追加 VBoxManage controlvm "VM名" natpf1 "ルール…

TerraformでAWSのセキュアな構成を構築

概要 PublicSubnetとPrivateSubnetを切り分けてよりセキュアに構築する方法。 PrivateSubnetのインスタンスにSSHアクセスする場合は別途VPNを立てる形になると思いますが、今回は割愛させていただきます。 環境 Terraform 0.6.3 構成図

NginxでHTTP/2

概要 Nginxが1.9.5からHTTP/2に対応しました。 ソースからmodule指定でビルドする必要もなく、mainlineの1.9.5をパッケージでインストールすれば使えます。 環境 Ubuntu 14.04 Nginx 1.9.5 Nginxインストール Nginxの最新版をインストール(パッケージ管理)…

Terraformでtarget指定の削除

概要 Terraformでインスタンスなどを削除する際、普段xxx.tfファイルの該当箇所削除してterraform applyで消してたんですが、あるとき消す順番の指定が必要になって「仕方ないから2回(消す順に)実行するかー」と思ってtarget指定したのですが、何故かterr…

DiCEでダイナミックDNSのIP更新

概要 ダイナミックDNSを設定するとIPでなくドメイン名で自宅サーバへアクセスできます。 ただしグローバルIPが更新された時に、利用しているダイナミックDNSのサービスにに通知する必要があります。 DiCEは通知するためのツールです。 他にもddclientやinady…

Terraform で ELB の設定とインスタンス作成

概要 前回の続きです。ここまで来たら小規模ながらきちんとしたAWS構成を作れます。 環境 Ubuntu 14.04 Terraform 0.6.2 前提 Terraform でセキュリティグループを管理でVPC、サブネット、セキュリティグループの設定が済んでいる状態。 フォルダ構成 ├── co…

Supervisorでプロセスを管理

概要 Node.jsサーバなどはApacheやNginxと違ってデフォルトでは自動起動してくれません。 そういったプロセスを簡単に管理できるSupervisorを使います。 環境 Ubuntu 14.04 Node.js 0.12.7 Supervisor 3.0b2 Node.jsサーバの用意 インストール $ npm install…