アゴ乗せ日記

適当なポジティブ日記

【解決】LambdaでNodejs8から12にしたらopensslコマンド使えなかった

ども、Serverless芸人のアゴです。

LambdaのNodejs8がサポート切れなのでNodejs12.xにした結果、 以下のエラーが発生しました。

openssl: command not found

がーん。調べるとLambdaの実行環境のOSがAmazon Linux 2になった影響ぽいです。

さっそく解決へ

ないなら追加すればええねん。 やったこと。

  1. AmazonLinux2のEC2サーバ立てて、opensslのバイナリをとってくる
  2. Lambda レイヤーを新規作成
  3. Lambda 関数に適用する

1. EC2からOpenSSLのバイナリをとってくる

EC2内の場所とバージョン確認

$ which openssl
/usr/bin/openssl

$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

SCPでローカルに落とす(test-serverは~/.ssh/configで定義してるやつ)

$ mkdir openssl
$ scp test-server:/usr/bin/openssl ./openssl/
$ ll
total 1120
-rwxr-xr-x  1 aizack  staff  571616  1 27 10:00 openssl

zip化もしておきます

$ zip -r openssl-1.0.2.zip openssl/

2. Lambda レイヤーを新規作成

管理コンソールからLambda > Layers > レイヤーの作成

レイヤー作成

こんな感じで登録。先ほど固めたzipファイルをアップロードします。 レイヤー作成画面

今回はNodejs12.xで使う予定なので、ランタイムで選択しておきます。

そしたら作成

3. Lambda 関数に適用する

続いて該当の関数画面を開いて、レイヤーの追加。 レイヤーの追加

さっき作ったレイヤーを選択します。 レイヤー選択

そしたら環境変数のPATHに以下を追記してあげます。

var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin:/opt/lib:/opt/openssl

PATHの設定

実行すると/opt/openssl ディレクトリの中に opennsslのバイナリが入ってます。

おわり

上記まで設定すると、無事opensslコマンドが使えるようになりました。 以上!