2017-07-20 12 views
1

私は以下のコードを実行したいと思います。私は、MySQLとノード-mysqlのを必要としようとしていると、彼らの両方が私に同じエラーを与える:AWSラムダを使用してNodeJSでMySQLが見つかりません

コード:

var AWS = require("aws-sdk"); 
var mysql = require("mysql"); 


exports.handler = (event, context, callback) => { 

    try { 

     console.log("GOOD"); 

    } 

    catch (error) { 
     context.fail(`Exception: ${error}`) 
    } 


}; 

エラー:

{ 
    "errorMessage": "Cannot find module 'mysql'", 
    "errorType": "Error", 
    "stackTrace": [ 
    "Function.Module._load (module.js:417:25)", 
    "Module.require (module.js:497:17)", 
    "require (internal/module.js:20:19)", 
    "Object.<anonymous> (/var/task/index.js:2:13)", 
    "Module._compile (module.js:570:32)", 
    "Object.Module._extensions..js (module.js:579:10)", 
    "Module.load (module.js:487:32)", 
    "tryModuleLoad (module.js:446:12)", 
    "Function.Module._load (module.js:438:3)" 
    ] 
} 

私はラムダを使用してノードにmysqlのインポートするにはどうすればよいですかこれを動作させるには?

+0

mysqlをインストールしましたか? 'npmはmysqlをインストールしますか? – CanSpice

+0

それはawsラムダです。私はそれをする方法を知らない。私はaws-sdkをインポートせずに呼び出すことができました。 – applecrusher

+0

インラインエディタを使う代わりにpackage.jsonファイルをアップロードする必要があると思います。 – applecrusher

答えて

2

Ohkだからこれが起こると予想されます。

AWS Lambdaは異なるマシン上で動作し、カスタム環境で実行するようにその特定のマシンを構成する方法はありません。ただし、mysqlまたはnode-mysqlのノードモジュールをzipにパッケージ化し、AWS Lambdaにアップロードすることはできます。手順は、

  1. npm install mysql --save
  2. は、AWSラムダであなたのコードとして、このzipファイルをアップロードし
  3. ノード・パッケージを含むフォルダとジップされています。

また、Serverless Frameworkを使用してより良いアプローチをとることもできます。詳細情報here。この方法では、ラムダを配置するすべての詳細と設定を含むYAMLファイルを作成します。ラムダ設定の下で、package - >includeセクションのノードモジュール(たとえば、nodemodule/**)へのパスを指定します。これはあなたのコードと一緒に必要なパッケージです。コマンドラインを使用してこのラムダを展開することができます。 AWS Cloudformationサービスを使用し、リソースを配備する最も一般的な方法の1つです。

Serverless Frameworkを使用したパッケージングの詳細については、hereを参照してください。

注:サーバーレスフレームワークを使用するには、ユーザーのAPIキーを取得したり、IAMなどで正しい権限を設定したりするなどの手順があります。これらは初期設定であり、後で必要ありません。サーバーレスフレームワークを使用して展開する前に実行します。

希望すると便利です。

+0

です。ありがとう!ラムダがインラインエディタで外部ライブラリを検出できたらいいと思う。私はそれが既にそこにあらかじめ設定されている、それはawsのような偽の仮定をしました。 – applecrusher

関連する問題