Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9409

Lambda Layersで自作モジュールを共通ライブラリ化する [Python,Node.js]

$
0
0
はじめに Lambda Layersを用いることで、モジュールを共通ライブラリとして、複数のLambdaで使用できるようなので、PythonとNode.jsのパターンで方法をまとめます。 メリットとして、Lambdaのソースコードの量を減らすことができること、各Lambdaごとにモジュールをアップする手間がなくなることがあげられます。 Lambda Layersについて Lambda レイヤーは、追加のコードやデータを含めることができる .zip ファイルアーカイブです。レイヤーには、ライブラリ、 カスタムランタイム 、データ、または設定ファイルを含めることができます。レイヤーを使用すると、コードの共有と責任の分離を促進し、ビジネスロジックの記述をより迅速に繰り返すことができます。 自作モジュールのディレクトリ構造 Lambda Layersにアップロードされたモジュールは、/optの領域に展開されます。 そのため、指定されたディレクトリ(下記の表参照)にPythonモジュールを格納してアップロードすることでLambdaを実行した際にモジュールとして自動的に読み込むことができます。 各 Lambda ランタイムのレイヤーパス 言語 パス Node.js nodejs/node_modules 〃 nodejs/node14/node_modules (NODE_PATH) Python python 〃 python/lib/python3.9/site-packages (サイトディレクトリ) モジュールを作成 [Node.js] today.js module.exports = { today: () => { const dateUTC = new Date(); // JSTに変更後、タイムスタンプに変える const dateJST = new Date(dateUTC.getTime() + 32400000); // タイムスタンプを日付の年月日に変える。時間は切り捨て let year = dateJST.getFullYear(); let month = dateJST.getMonth()+1; let day = dateJST.getDate(); // 値が1桁であれば '0'を追加 if (month < 10) month = '0' + month; if (day < 10) day = '0' + day; //"2022-01-16" const result = year + "-" + month + "-" +day; return result; } }; day_after module.exports = { days_after: (days_after_number) => { const dateUTC = new Date(); // days_after_number日分、進める const days_after_UTC = new Date().setDate(dateUTC.getDate() + days_after_number); const days_after_JST = new Date(days_after_UTC + 32400000); let days_after_year = days_after_JST.getFullYear(); let days_after_month = days_after_JST.getMonth()+1; let days_after_day = days_after_JST.getDate(); if (days_after_month < 10) days_after_month = '0' + days_after_month; if (days_after_day < 10) days_after_day = '0' + days_after_day; const result = days_after_year + "-" + days_after_month + "-" + days_after_day; return result; } }; 上記の2つのファイルを自作モジュールとして使用します。 ローカルで、ディレクトリを作成し、モジュールファイルを入れて、zip化します。 $ mkdir nodejs $ cd nodejs $ mkdir node_modules $ cd node_modules $ pwd /nodejs/node_modules node_modulesディレクトリ内に、today.jsとdays_after.jsを入れます。 nodejs └── node_modules ├── days_after.js └── today.js zip化します。zip名は何でも良いですが今回は、nodejs_layerという名前でzip化します。 $ zip -r nodejs_layer nodejs モジュールを作成 [Python] pythonの方は、複数のロジックを1つのファイルにまとめることができます。 python_layer.py from datetime import datetime, timedelta def today(): # 2022-01-16 20:54:05.134159 dateJST = datetime.today() + timedelta(hours=9) # 2022-01-16 today = dateJST.strftime("%F") return today def days_after(days_after_number): dateJST = datetime.today() + timedelta(hours=9) days_after_JST = dateJST + timedelta(days=days_after_number) days_after = days_after_JST.strftime("%F") return days_after $ mkdir python python └── python_layer.py zip化します。python_layerという名前でzip化します。 $ zip -r python_layer python Lambda Layerにアップロード[Python,Node.js共通] レイヤーの作成をクリックします。 互換性のあるランタイムは、作成したLayerと同じ言語を指定します。 zip化したファイルをアップロードし、作成をクリックします Lambdaの最下部のレイヤーを追加をクリックします。 カスタムレイヤーから選択し、追加します。 Lambda Layerの呼び出し方法[Node.js] lambda exports.handler = async (event) => { // Layerを使って共通ライブラリ化 const today = require("today"); const days_after = require("days_after"); console.log("本日:" + today.today()); console.log("3日後:" + days_after.days_after(3)); }; require("ファイル名")で呼び出せます。 実行します。 INFO 本日:2022-01-30 INFO 3日後:2022-02-02 Lambda Layerの呼び出し方法[Python] lambda #python_layer.pyからLayerを使って共通ライブラリ化 from python_layer import today from python_layer import days_after def lambda_handler(event, context): return (today() + "と" + days_after(3)) from ファイル名 import メソッド名で呼び出せます。 実行します。 Response "2022-01-30と2022-02-02"

Viewing all articles
Browse latest Browse all 9409

Trending Articles