Carpe Diem

備忘録

TerraformでECSのawsvpcモードを使って各コンテナにPrivate IPを振る

概要

これまでは1インスタンス上に複数のコンテナを使うときは動的ポートマッピングのような方法で対応する必要がありました。

christina04.hatenablog.com

しかしawsvpcモードが使えるようになったことでコンテナ毎にPrivateIPを振れるようになり、ポートでなくIPベースで複数のコンテナを扱えるようになりました。
今回はその方法をterrraformで実現します。

環境

  • Terraform v0.11.7
  • terraform-provider-aws v1.20.0
続きを読む

ホストからdockerのvolumeにファイルをコピー

概要

ホストからコンテナ(が持ってるvolume)へのコピーdocker cpでできます。
しかしホストから直接volume単体にコピーするのはどうすれば良いのだろう?と思って調べたところ地味にサポートされていなかったのでメモとして残します。

環境

  • Docker v18.03.1-ce

方法

こちらで議論されてました。

github.com

issue自体は関連issueでどうするか進める、という結論であとはワークアラウンドが書かれています。
※議論を進めているissueも実装が難しい割に簡単なワークアラウンドがあるので置いておきますで止まってます

続きを読む

Kubernetesのheadless serviceを使って各PodのIPを知る

概要

gRPCを用いた負荷分散ではEnvoyを使ったL7のバランシングが最近の主流になっています。
ただEnvoyが各Podに振り分けるためにPodのIPを知る必要があります。
ECSはService Discoveryを持っていないので自前でたてるか、control planeを用意してそれをService Discoveryにする必要がありますが、Kubernetesはheadless serviceがあります。
headless serviceはServiceに対してDNSリクエストをすると、動いているPodのIPアドレス一覧を返してくれるのでこれをService Discoveryとして使うことが可能です。

今回はheadless serviceとして動かすところだけ検証しました。

環境

  • minikube v0.26.1
  • kubernetes 1.8.6
続きを読む

GoのRoundTripperとTransport

背景

僕が保守している go-iapというGoで書いたAppStore, GooglePlay AmazonAppStore用の課金ライブラリ があるのですが、そこに以下のissueがあがっていました。

github.com

ざっくり説明すると「GAEでは普通のhttp.Client使えないからカスタムClientサポートして」という内容で、AWAではAWSがメインでGAEからこれを使うことがなかったため検証もできず、誰か対応するプルリクくれないかなぁとずっと放置して待っていました。

これを最近対応したのですが、その時にRoundTripperTransportについて学んだのでまとめます。

続きを読む

Exponential Backoff (指数関数的に増えるリトライ間隔)

概要

fluentdのretryはExponential Backoffと呼ばれるもので、リトライの間隔が

1秒、2秒、4秒、8秒、16秒

と指数関数的に増えていきます。これによって無駄なリクエストを省きつつ、再試行する前に問題を修正して解決できるようになります。
特に外部APIが長期障害発生時に、単調に繰り返しリトライするとシステムへの不必要な負担をかけるので、そういった問題時の負荷軽減にもなります。

docs.fluentd.org

続きを読む

混ぜるな危険 〜同期関数と非同期関数〜

概要

Node.jsといえば非同期やcallbackで有名ですが、1つの関数の中で非同期な処理と同期的な処理が混ざってしまうと期待しない挙動になることがあるので注意しましょう、という話です。

環境

  • Node.js 8.9.0

基本的な方針

  • 非同期な関数は全て非同期処理でまとめる
  • 同期的な関数は全て同期的な処理でまとめる

です。

続きを読む

C4インスタンスからC5インスタンスに移行するためのパフォーマンス検証

概要

前回のAMI作成方法に引き続き、移行前のチェックとして簡単なパフォーマンスチェックをします。

環境

負荷試験環境

インスタンスタイプ

サーバ インスタンスタイプ
攻撃ツール c5.2xlarge
C4テスト c4.large
C5テスト c5.large

攻撃サーバでCPUリソースが足りないということにならないよう、充分なスペックにします。

続きを読む