📋

documentDBのUnsupported mechanismエラーの解決方法

2025/02/17に公開

先日AWSでLambdaとDocumentDB間の接続で急に下記のエラー出て接続できなくなりました。

Unexpected Error: Error: mongo connect err: MongoServerError: Unsupported mechanism [ -301 ]

記事がなく調べるのに意外と時間を取られたので記事化しました。
皆さまのお助けになれば幸いです。

環境

環境は以下の通りです。

環境 使用したもの
Lambda runtime Node.js 20.x
library mongoose 8.9.2
documentDB engine docdb 5.0.0

結論

documentDBにアクセスするURIに下記のパラメータを付けるとアクセスできるようになりました。

mongodb://<user_name>:<password>@<URI>:<PORT>/?authMechanism=SCRAM-SHA-1

調べたこと

mongoDBの認証には下記の方式があるようです。

  • DEFAULT
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-CR
  • MONGODB-AWS
  • X.509

パラメータで指定しなければDEFAULTになり下記の優先順位で使用するようです。

  1. SCRAM-SHA-256
  2. SCRAM-SHA-1
  3. MONGODB-CR

今回エラーが発生したのは

  • SCRAM-SHA-256が使えなくなった
  • 以前は自動でSCRAM-SHA-1が使用されていたがそれがうまく機能しなくなった

のどちらかに起因していると思われます。
documentDBのエンジンバージョンや設定は変えていなのでおそらく後者の可能性が高いと考えています。

あとがき

改めてエラーメッセージで検索すると下記のissueが出ていました。
当時(2024/12頃)は見つけられなかったので最近検索順位が上がってきたのかもしれないです。
https://github.com/Automattic/mongoose/issues/15018

この問題にぶつかっていたときにはググっても一切参考になる記事がなかったので、chatGPTに聞くと1案としてこの解決方法が書かれており、藁にもすがる思いでパラメータを変えてしらみ潰しに調べて直しました。
上記のissueを見つけられていれば。。。

余談ですが、記事を書く中でIAMによる認証方法があることも知りました。
今回は前任者から引き継いだコードを使用したのでURIによる接続をしましたが、次回実装時には試してみたいと思います。
https://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/iam-identity-auth.html

参考

https://www.mongodb.com/docs/drivers/node/v3.6/fundamentals/authentication/mechanisms/

Discussion