LoginSignup
1
0

【aws】lambda layerを使ってlambdaにモジュールをインポートする

Posted at

はじめに

AWS Lambdaではawsが提供しているもの以外のライブラリを使いたい場合、事前にライブラリをアップロードする必要があります。
(私はそれを知らずにluxon is not definedエラーを出しました😅)
今回はその方法を記録したいと思います。

事前準備

layerのアップロード

以下の手順はお使いのPCのCLIで実行してください。

1.nodejsフォルダーを作成

$ mkdir nodejs

2.利用したいライブラリをnodejsフォルダーにインストール

$ cd nodejs
$ npm init
$ npm install --save ライブラリ名

3.nodejsフォルダを圧縮

$ zip -r layer.zip nodejs .

4.Lambda layerを公開

luxon, node.js18.xには各自、利用するライブラリ名互換性のあるnodeのバージョンを指定してください。
互換性のあるnodeのバージョンlambda/ランタイム設定 より、確認して指定しました。

$ aws lambda publish-layer-version --layer-name luxon --zip-file fileb://layer.zip --compatible-runtimes node.js18.x --region us-east-1

lambdaのレイヤーを確認したところ、luxonが無事に作成されていました 🎉

5.png

lambdaにlayerを追加する

お使いのlambda関数のコンソールに移動してください。スクロールしてレイヤーを追加を押してください。

image.png

次に、カスタムレイヤーを選択し、作成したレイヤーを追加します。
スクリーンショット 2024-05-14 0.22.15.png

プログラムの作成

これでモジュールを使う準備は整ったので、実際にコードを書いて実行しましょう!
※以下は私のコードの一部を抜粋したものです。

import { DateTime } from 'luxon';

const dynamo = DynamoDBDocument.from(new DynamoDB());
const tableName = "feeds";

export const handler = async (event) => {

    let body;
    const date = DateTime.now().setZone('Asia/Tokyo');

    try {
        switch (event.httpMethod) {
            case 'GET':
                const queryParams = event.queryStringParameters || {};
                const interval = queryParams.interval;
                switch (interval) {
                    case 'daily':
                        console.log('dailyが呼ばれた');
                        let startOfDay = date.startOf('day').toMillis();
                        console.log(startOfDay);

ログを確認すると、luxonを用いて正確な時刻情報を取得できていることが確認できました 🥳
6.png

1
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
1
0