34
16

Lambda Node.js 18 でaws-sdkを使おうとして詰まった

Last updated at Posted at 2022-12-17

この記事はmiriwoお一人様 Advent Calendar 2022の17日目の記事です

〜宣伝〜

下記、個人開発でエンジニア専門マッチングサービスを開発しましたので、是非未経験からエンジニア目指している人!現役エンジニアで教えたい人!使ってみてください!

概要

  • LambdaのNode.js18にてaws-sdkを使おうとしてかなり詰まったのでまとめておく。

謝辞

  • 本問題の解決は同プロジェクトの先輩エンジニアさんにご協力いただきました。改めてお礼申し上げます。

情報

内容 情報
ランタイム Node.js 18.x
ハンドラ index.handler
アーキテクチャ x86_64
関数の作成 一から作成

問題発生までの経緯

  • Lambda関数にブラウザから下記の様にindex.mjsに記載をした。

    index.mjs
    import { 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.mjs
    import { S3Client } from "@aws-sdk/client-s3";
    
    console.log(S3Client);
    
    export const handler = async(event) => {
        
        const response = {
            statusCode: 200,
            body: JSON.stringify(S3Client),
        };
        return response;
    };
    

参考文献

34
16
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
34
16