Carpe Diem

備忘録

ネットワークの疎通を確認する方法

概要

インスタンスのヘルスチェックに失敗したり、リクエストが届かなかったりするケースの調査のためにネットワークの疎通を確認する機会は多々あります。
今回はその中でよく使うコマンドをまとめてみました。

環境

  • Ubutnu 16.04

コマンド

ping

pingはICMPのエコー要求/応答機能を使った診断コマンドです。

疎通確認

$ ping google.com
PING google.com (216.58.200.206): 56 data bytes
64 bytes from 216.58.200.206: icmp_seq=0 ttl=54 time=2.329 ms
64 bytes from 216.58.200.206: icmp_seq=1 ttl=54 time=2.744 ms

ちなみにICMPはL3のプロトコルなのでポートは関係ありません

続きを読む

AWSのCost Explorerをスクレイピングして毎日の利用料金をslackへ通知

概要

使っていないインスタンスが起動しっぱなしだったせいで、AWSの利用料がいつの間にか大きくなっていたことがきっかけです。
一方毎日CostExplorerを見に行くのも手間が多いので、slackに通知するようにしたいと思い作ってみました。
また環境構築が面倒なので、docker化してどこでも実行できるようにしました。

成果物

今回作ったものはこちら。

github.com

環境

  • Ubuntu 16.04
  • chrominum 62.0.3202.94
  • chromedriver 2.33.506092
  • python3
続きを読む

TerraformでECSを動的ポートマッピングに

概要

以前ECSの記事を幾つか書きましたが、

TerraformでECS環境の構築 - Carpe Diem

TerraformでECS環境の構築【オートスケール編】 - Carpe Diem

当時のECSはインスタンス1コンテナにしないとポートが競合して同じ種類のコンテナを載せることはできませんでした。
しかし今ではALBが導入され、動的ポートマッピングといってコンテナ側のポートは80で、ホスト側にマッピングする際は動的に変えてよろしくやってくれる。ALBはその動的なポートに紐づくという機能が付いています。
これによって1インスタンスに同じ種類のコンテナがいくつもたてられるようになりました。

環境

  • terraform 0.11.0
  • terraform-provider-aws 1.3.1

成果物

今回のコードはこちら

github.com

続きを読む

goroutineでのpanicのハンドリング

概要

goroutineを使った時のpanicのハンドリングについて調べてみたのでまとめ。
Goはgoroutineで簡単に並列処理を書けますが、エラーハンドリングをきちんとしていないと後で困ることになるという話です。

環境

通常

recoverがどうなるか確認します。

同じ関数内でのpanic

func main() {
    fmt.Println("Calling f.")
    f()
    fmt.Println("Returned normally from f.")
}

func f() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in f", r)
        }
    }()

    panic("panic")
}

The Go Playground

続きを読む

grpc-gatewayでgRPCサーバをRESTで叩けるようにする

概要

gRPCはProtocol Buffersを喋るもの同士ではメリットが大きいですが、RESTしか叩け無いものや、curlでRESTを叩くようにサクッと検証したかったりするときに不便です。
そんな問題を解消してくれるのがgrpc-gatewayで、protobuf定義からREST APIを提供するリバースプロキシを生成してくれます。

github.com

環境

続きを読む

gRPCにおける各RPC方式の実装方法【Bidirectional streaming RPC】

概要

前回の

gRPCにおける各RPC方式の実装方法【Client streaming RPC】 - Carpe Diem

に引き続き、最後はBidirectional streaming RPCの実装方法を紹介します。
チャットのようなリアルタイム通信や、大きなデータを少しずつ処理したい時、Simple RPCで毎回コネクションを張るコストを避けたい時などに有用です。

環境

  • golang 1.9.2
  • grpc 1.7.2
  • protobuf 3.4.0

成果物

最終的に出来たコードはこちら

github.com

続きを読む

gRPCにおける各RPC方式の実装方法【Client streaming RPC】

概要

前回の

gRPCにおける各RPC方式の実装方法【Server streaming RPC】 - Carpe Diem

に引き続き、今回はClient streaming RPCの実装方法を紹介します。
こちらは大きなリクエストを分割して送りたい時に有用です。

環境

  • golang 1.9.2
  • grpc 1.7.2
  • protobuf 3.4.0

成果物

最終的に出来たコードはこちら

github.com

続きを読む