LoginSignup
0
0

More than 1 year has passed since last update.

lambda Node.js18でbcryptモジュールを使おうとしてドハマリした

Posted at

概要

  • ランタイムNode.js18のlambda関数にてbcryptモジュールを使って文字列をハッシュ化しようと試み、めっちゃハマったので経緯をまとめておく。

ご注意

  • 本記事を呼んでも解決方法は記載していません。

結論

  • 下記の方法でbcryptjsモジュールを使うことで解決した。

反省

  • bcryptアルゴリズムを使ったハッシュ化の方法が途中までbcryptモジュールを使うものだけだと思っていた。
  • bcryptjsモジュールも使用可能なことを知らなかった。
  • ちょっと詰まったら複数の方法があるかもしれないと疑うことをしよう。

経緯

  1. jsでbcryptアルゴリズムを使ってハッシュ化する場合にbcryptモジュールを使うことを知る。

  2. モジュール追加する必要があったため、ローカルのMacでNode.jsバージョンを18に設定、$ npm init$ npm install bcryptを実行、インストール後、package.jsonが入っているディレクトリをzip化し、レイヤーに登録した。

  3. lambda関数を作成し、下記のようなimport文を記載した。

    index.mjs
    import bcrypt from "bcrypt";
    
  4. 先に作成したレイヤーを当該の関数に登録した。

  5. 当該の関数を実行してみた。

  6. 下記のようなエラーがでた。

    "errorType": "Error",
    "errorMessage": "/opt/nodejs/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node: invalid ELF header",
    "code": "ERR_DLOPEN_FAILED",
    
  7. エラーを調べてみると、「bcryptモジュールのバイナリファイルがlambda(AmazonLinux2)と互換のない」ことが原因らしい事がわかった。

  8. どうやらAmazonLinux2にてnpm install bcryptを実行する必要があるらしい。

  9. ぱっと思い浮かんだのがEC2だったのでとりあえずAmazonLinux2のインスタンスを立ち上げてVoltaを入れてNode.js18を入れようとした。

  10. Voltaの導入には成功したがVoltaのコマンドが存在しない。(おそらくパスを通してなかったから。)

  11. 仕方ないので下記の公式の方法に則ってnvmでNode.js18をインストールする。

  12. $ node -vを実行すると下記のようなエラーが出る。

    node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
    node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
    
  13. 衝撃の事実発覚、「AmazonLinux2でNode.js18がサポートされていない」

    チュートリアル__Amazon_EC2_インスタンスでの_Node_js_のセットアップ_-_AWS_SDK_for_JavaScript.png

  14. ここで気がつけばよかったが、なぜかDockerでAmazonLinux2のコンテナを立ててNode.js18を入れてしまう。

    docker pull amazonlinux:2.0.20230504.1
    docker run -itd amazonlinux:2.0.20230504.1 /bin/bash
    docker container exec -it コンテナ名 /bin/bash
    
  15. 案の定$ node -vを実行すると下記のようなエラーが出た。AmazonLinux2のDockerイメージ使ってるんだから当たり前、、、。

    node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
    node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
    
  16. bcryptjsモジュールの存在に気が付きそちらを使うことに、、、。という流れだった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0