概要
これまでは1インスタンス上に複数のコンテナを使うときは動的ポートマッピングのような方法で対応する必要がありました。
しかしawsvpcモードが使えるようになったことでコンテナ毎にPrivateIPを振れるようになり、ポートでなくIPベースで複数のコンテナを扱えるようになりました。
今回はその方法をterrraformで実現します。
環境
- Terraform v0.11.7
- terraform-provider-aws v1.20.0
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として動かすところだけ検証しました。
僕が保守している go-iapというGoで書いたAppStore, GooglePlay AmazonAppStore用の課金ライブラリ があるのですが、そこに以下のissueがあがっていました。
ざっくり説明すると「GAEでは普通のhttp.Client使えないからカスタムClientサポートして」という内容で、AWAではAWSがメインでGAEからこれを使うことがなかったため検証もできず、誰か対応するプルリクくれないかなぁとずっと放置して待っていました。
これを最近対応したのですが、その時にRoundTripper
やTransport
について学んだのでまとめます。
Node.jsといえば非同期やcallbackで有名ですが、1つの関数の中で非同期な処理と同期的な処理が混ざってしまうと期待しない挙動になることがあるので注意しましょう、という話です。
です。
続きを読む