この記事はmiriwoお一人様 Advent Calendar 2022の17日目の記事です
〜宣伝〜
下記、個人開発でエンジニア専門マッチングサービスを開発しましたので、是非未経験からエンジニア目指している人!現役エンジニアで教えたい人!使ってみてください!
概要
- LambdaのNode.js18にてaws-sdkを使おうとしてかなり詰まったのでまとめておく。
謝辞
- 本問題の解決は同プロジェクトの先輩エンジニアさんにご協力いただきました。改めてお礼申し上げます。
情報
内容 | 情報 |
---|---|
ランタイム | Node.js 18.x |
ハンドラ | index.handler |
アーキテクチャ | x86_64 |
関数の作成 | 一から作成 |
問題発生までの経緯
-
Lambda関数にブラウザから下記の様にindex.mjsに記載をした。
index.mjsimport { AWS } from 'aws-sdk'; exports.handler = async (event) => { return AWS.VERSION; };
-
コードを保存してデプロイしてhello-worldテストを実行した。
問題
-
下記のエラーが出る。
"errorType": "Error", "errorMessage": "Cannot find package 'aws-sdk' imported from /var/task/index.mjs",
問題解決までの経緯
-
ランタイムをNode.js 12.x、 Node.js 14.x、 Node.js 16.xに変更しながら実行したところ、エラーが出ず実行する事ができた。でも自分はNode.js 18.xで実行したい。
-
どうやら16まではAWS SDK for JavaScript v2だったが18からはAWS SDK for JavaScript v3になる模様
-
v3の場合はサービスのクライアントを指定してsdkをインポートするようだ。
import {S3Client, コマンドを実行する場合はコマンドを指定} from "@aws-sdk/client-s3";
-
下記の様に記載し、テストを実行したところエラーが出なかったため問題は解決した模様
index.mjsimport { S3Client } from "@aws-sdk/client-s3"; console.log(S3Client); export const handler = async(event) => { const response = { statusCode: 200, body: JSON.stringify(S3Client), }; return response; };
参考文献