👋

ECS Service ConnectのHTTPタイムアウトはデフォ15秒

2024/11/01に公開

こんにちはムーザルちゃんねるの@zaruです。タイトルのとおりですがAWS ECSのService ConnectのHTTP(HTTPS/GRPC含む)のリクエストタイムアウトはデフォルトで15秒です。このデフォルト値を忘れていたために、処理に長い時間かかるときタイムアウトする挙動に悩まされました。

このタイムアウトは以前まで固定値で変更できなかったのですが、2024年1月ぐらいに変更可能になりました。

タイムアウトの変更方法

タイムアウトの設定はサービス定義のJSONに timeout キーで指定します。

  • idleTimeoutSeconds: アイドルタイムアウト(デフォルト300秒 / プロトコル None は3600秒)
  • perRequestTimeoutSeconds: リクエストタイムアウト(デフォルト15秒)
// 関連したものだけ抜粋
{
  "serviceConnectConfiguration": {
    "services": [
      {
        "clientAliases": [
          {
            "port": 3000
          }
        ],
        "portName": "port-name",
        "timeout": {
          "idleTimeoutSeconds": 3600,
          "perRequestTimeoutSeconds": 3600
        }
      }
    ]
  }
}

この定義でサービスを更新すると、AWS CLIコマンドでタイムアウトの設定が確認できます。当然、CloudFormationでもecspressoでも設定可能です。

また、タイムアウトの上限値はドキュメントを見る限りありませんでした。ただ、長時間かかるようなタスクを実行すると、デプロイ時に困ったりするのでその場合はアーキテクチャを再検討したほうが良いでしょう。

設定内容を確認するにはAWS CLIを使うと楽です。

# AWS CLIで状態を確認
aws ecs describe-services \
  --cluster クラスタ名
  --services サービス名

ちなみにタイムアウトを設定していない場合は、何も出力されません。デフォルト値の15秒も表示されないので注意してください。

ムーザルちゃんねる

Discussion