インフラ

envoyエラー「unable to bind domain socket with base_id=0, id=0, errno=98 (see –base-id option)」について

envoy

こんにちは、ちゃりおです。

今回は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」

Contents

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コンテナが必要

Amzonで「AWS」の本を見てみる

楽天で「AWS」の本をみてみる!!

cdk
CDK ecs-service-extensionsを使用してお手軽にAppMeshを有効化したECSサービスを作成するこんにちは、ちゃりおです。 最近AWS CDKのAmazon ECS拡張機能(ecs-service-extensions)を使ってみ...
cdk
AWS CDKのADVANCED WORKSHOPやってみたこんにちは、ちゃりおです。 CDK Pipelineをざっくり試したいと思っていて、なにかいいチュートリアルないかと探していたら。「A...
ECS
ECSのスロットリングをCloudwatch+ContainerInsightで検知するこんにちは、ちゃりおです。 以前、ECSのスロットリング(設定に不備がありタスクが起動せず、startとstopを繰り返す)事象が発生...