如何使【AWS】【Lambda】能够加载外部模块

    • 普通にLambdaをアップロードしただけではAWSにデフォルトでインストールされているライブラリ(AWS SDKとか)以外は使用できないみたい

Cannot find moduleと言われてしまいます

言語はNode.js
AWS CDKを使っている

在Lambda的Zip文件中包含外部模块的方法1

    • AWSコンソールを使えば、LambdaファイルをZip圧縮したものをアップロードすることができるため、このZip内にnode_moduleディレクトリを含めて外部モジュールごとアップロードしてしまえば良いです

 

    ただし、AWS CDKを使用してアップロードする場合、この方法は使えません(/_;)

Option 1: 将外部模块的Zip文件注册到Lambda Layers中。

    • node_modulesディレクトリをZip圧縮して、AWSコンソールからLambda Layersにアップロードすれば良いです

 

    ただし、せっかくLambdaのアップロードをAWS CDKで自動化しているのに、別の手作業が発生してしまうのは悲しいです

使用AWS CDK将Lambda Layers注册到方法3的过程中。

    これがやりたい

做法 (yì fǎ)

    • CDKプロジェクトフォルダ内に「layer」というフォルダを作成します

 

    • 「layer」フォルダ内に「nodejs」というフォルダを作成します

 

    • 「nodejs」フォルダ内でnpm initを行い、必要なライブラリをインストールします

 

    stackファイルに以下を追加します
const nodeModulesLayer = new lambda.LayerVersion(this, 'NodeModulesLayer', {
  code: lambda.AssetCode.fromAsset('layer'),
  compatibleRuntimes: [lambda.Runtime.NODEJS_10_X, lambda.Runtime.NODEJS_12_X]
});
    lambda呼び出しのコードにも一行追加します
const myFunction = new lambda.Function(this, 'MyHandler', {
  functionName: 'SalesforceSample',
  runtime: lambda.Runtime.NODEJS_12_X,
  code: lambda.Code.fromAsset('lambda'),
  handler: 'salesforceSample.handler',
  layers: [nodeModulesLayer] // これ
});

疑點

    • これだとコード作成時のnode_modulesと、アップロードされるnode_modulesを別々に管理する必要があるのがナンセンス

 

    node_modulesをnodejsフォルダ以下に自動的にコピーするような処理があると完璧なのかなあ・・・
广告
将在 10 秒后关闭
bannerAds