こんにちは、ちゃりおです。
今回はenvoyのエラーについてです。
すでにenvoyコンテナをgRPCのプロキシとして使用している環境で、App Mesh用のenvoyコンテナを追加したら下記のエラーがでました。(ECS Faragate使用)
unable to bind domain socket with base_id=0, id=0, errno=98 (see –base-id option)
エラーメッセージの通り、「–base-id」オプションを付ければ解決します。(例えば、–base-id 1)
envoyproxy/envoy「unable to initialize hot restart: unable to bind domain socket with id=0 #88」
Envoyソケットのエラー
原因
1つのマシン上で複数のenvoyを動かしたことで、共有メモリ領域を割り当てるときに使用するbase_idが被ってしまいました。
ECSのタスク定義にgRPC用のプロキシとしてenvoyを使っている状態でApp Mesh用にenvoyコンテナを追加したためエラーになりました。
解決策
gRPC用のプロキシenvoyの実行コマンドに「–base-id 1」を追加しました。
envoy Command line options –base-id
–base-id
(optional) The base ID to use when allocating shared memory regions. Envoy uses shared memory regions during hot restart. Most users will never have to set this option. However, if Envoy needs to be run multiple times on the same machine, each running Envoy will need a unique base ID so that the shared memory regions do not conflict.
余談 AppMesh用のenvoy
AppMesh用のenvoyは設定ファイルは自動的に生成されます。
そのため、自分でgRPCプロキシ用の設定を追加することができませんでした。
AppMesh用とgRPC用のenvoyがそれぞれ必要になりました。
AppMeshのIssueでカスタムyamlへの対応が上がっているため、そのうち可能になるかもです。
aws/aws-appmesh-road-map Feature Request: Allow custom YAML configuration for AppMesh resources #341
まとめ
- 1つのマシン上で複数envoyを動かす際は、「–base-id」オプションを使用する
- 現状では、AppMeshとgRPCプロキシでそれぞれenvoyコンテナが必要


