はじめに
AWS Lambdaではawsが提供しているもの以外のライブラリを使いたい場合、事前にライブラリをアップロードする必要があります。
(私はそれを知らずにluxon is not defined
エラーを出しました😅)
今回はその方法を記録したいと思います。
事前準備
- npmのインストール
- awsコマンドのインストール(こちらのAWS公式サイトが参考になりました。)
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が無事に作成されていました 🎉
lambdaにlayerを追加する
お使いのlambda関数のコンソールに移動してください。スクロールしてレイヤーを追加を押してください。
次に、カスタムレイヤーを選択し、作成したレイヤーを追加します。
プログラムの作成
これでモジュールを使う準備は整ったので、実際にコードを書いて実行しましょう!
※以下は私のコードの一部を抜粋したものです。
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);