📋
documentDBのUnsupported mechanismエラーの解決方法
先日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になり下記の優先順位で使用するようです。
- SCRAM-SHA-256
- SCRAM-SHA-1
- MONGODB-CR
今回エラーが発生したのは
-
SCRAM-SHA-256
が使えなくなった - 以前は自動で
SCRAM-SHA-1
が使用されていたがそれがうまく機能しなくなった
のどちらかに起因していると思われます。
documentDBのエンジンバージョンや設定は変えていなのでおそらく後者の可能性が高いと考えています。
あとがき
改めてエラーメッセージで検索すると下記のissueが出ていました。
当時(2024/12頃)は見つけられなかったので最近検索順位が上がってきたのかもしれないです。
この問題にぶつかっていたときにはググっても一切参考になる記事がなかったので、chatGPTに聞くと1案としてこの解決方法が書かれており、藁にもすがる思いでパラメータを変えてしらみ潰しに調べて直しました。
上記のissueを見つけられていれば。。。
余談ですが、記事を書く中でIAMによる認証方法があることも知りました。
今回は前任者から引き継いだコードを使用したのでURIによる接続をしましたが、次回実装時には試してみたいと思います。
参考
Discussion