単純なラムダ関数を作成しようとしていますが、エラーが発生しています。
私のコードは基本的に
console.log('Loading function');
exports.handler = function(event, context) {
console.log('value1 =', event.key1);
console.log('value2 =', event.key2);
console.log('value3 =', event.key3);
context.succeed(event.key1); // Echo back the first key value
// context.fail('Something went wrong');
}
helloworld.jsファイル内。私はそれを圧縮し、ラムダ関数の作成セクションでZipファイルとしてアップロードし、このエラーが発生し続けます:
{
"errorMessage": "Cannot find module 'index'",
"errorType": "Error",
"stackTrace": [
"Function.Module._resolveFilename (module.js:338:15)",
"Function.Module._load (module.js:280:25)",
"Module.require (module.js:364:17)",
"require (module.js:380:17)"
]
}
誰にもアイデアはありますか?
ファイルの名前は、Handler構成のモジュール名と一致する必要があります。この場合、ハンドラはhelloworld.handler
に設定する必要があります。helloworld
はrequire() 'dされるファイルで、handler
はエクスポートされた関数です。その後、同じZipファイルで動作するはずです。
Index.jsがサブディレクトリではなく、zipファイルのルートにあることを確認してください。
私の場合、ファイルの名前とエクスポートされたハンドラーに一致するモジュールの名前がありました。本当の問題はmacOSと、Zipファイル内に基本的にフォルダーを作成するZipプログラムでした。サブディレクトリで終了します。
ディレクトリを右クリックして圧縮しないでください、代わりにindex.jsのような個々のファイルを選択してください、package.jsonおよびnode_modulesディレクトリ、右クリックして圧縮、同じディレクトリにArchive.Zipファイルが作成される場合があります。 Zipファイルの名前は空想的ではありませんが、少なくともAWS Lambdaに送信すると機能します。
Zip -r function.Zip function
を指定したコマンドラインを使用して、基本的にfunction
というディレクトリを含むZipファイルを作成して、同じ間違いを犯す可能性があります。
$ Zip function.Zip index.js package.json node_modules
adding: index.js (deflated 47%)
adding: package.json (deflated 36%)
adding: node_modules/ (stored 0%)
Finderを使用して、Zipファイルをダブルクリックし、サブディレクトリで解凍すると、Lambdaはindex.jsがそのサブディレクトリにあるため、ファイルを表示できません。
コマンドラインとzipinfo
を使用:
$ zipinfo function.Zip | grep index.js | more
-rw-r--rw- 2.1 unx 1428 bX defN 27-Jul-16 12:21 function/index.js
Index.jsがサブディレクトリfunction
内でどのように終わったかに注意してください。間違った。
$ zipinfo function.Zip | grep index.js | more
-rw-r--rw- 3.0 unx 1428 tx defN 27-Jul-16 12:21 index.js
Index.jsはサブフォルダー内にないことに注意してください。このZipファイルはAWS Lambdaで機能します。
そこで、npm run Zip
を実行するだけでプロジェクトファイルをZip圧縮するスクリプトをパッケージに追加しました
{
"name": "function",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"Zip": "Zip function.Zip package.json *.js node_modules"
},
"dependencies": {
"aws-sdk": "^2.4.10"
}
}
$ npm run Zip
> [email protected] Zip
> Zip function.Zip package.json *.js node_modules
adding: package.json (deflated 41%)
adding: index.js (deflated 47%)
adding: local.js (deflated 42%)
adding: node_modules/ (stored 0%)
AWS CLIの高度な方法を次に示します。長期間の使用で時間を節約できます。
まず、AWS CLIをインストールして設定する必要があります。
http://docs.aws.Amazon.com/cli/latest/userguide/installing.html
1)アーカイブを作成する
$ Zip -r lambda *
現在の場所にあるすべてのフォルダーとファイルを含むlambda.Zipファイルを作成します。
2)ロールARNを取得
$ aws iam list-roles | grep "your_role"
ラムダで使用するARNが返されます。手で作成する必要があります
3)ラムダを作成します
$ aws lambda create-function-function-name "your_lambda_name"-Zip-filefileb://lambda.Zip-handlerindex.handler-runtimenodejs6.10-timeout15-roleCOPY_HERE_YOUR_ARN_FROM_THE_STEP_2
できました!
Grunt
を使用完全 AWS Lambda Seed プロジェクトは Git。 で利用可能
ステップ1:Init npm module
npm init
ステップ2:Gruntをインストールする
npm install --save-dev grunt grunt-cli
ステップ3:インストールgrunt-aws-lambda
npm install --save-dev grunt-aws-lambda
ステップ4:Lambdaサービスのフォルダーを作成する
# Create directory
mkdir lambdaTest
# Jump into folder
cd lambdaTest
# Create service file
touch lambdaTest.js
# Initialize npm
npm init
ロジック/コードをlambdaTest.js
に保持します
'use strict'
exports.handler = (event, context, callback) => {
console.log("Hello it's looks like working");
};
ステップ5:Create Gruntfile.js
ルートフォルダーtouch Gruntfile.js
に戻ります
'use strict'
module.exports = function (grunt) {
grunt.initConfig({
lambda_invoke: {
lambdaTest: {
options: {
file_name: "lambdaTest/lambdaTest.js",
event: "lambdaTest/test.json",
}
}
},
lambda_package: {
lambdaTest: {
options: {
package_folder: 'lambdaTest/'
}
}
},
lambda_deploy: {
lambdaTest: {
arn: 'arn:aws:lambda:eu-central-1:XXXXXXXX:function:lambdaTest',
options: {
credentialsJSON: 'awsCredentials.json',
region: "eu-central-1"
},
}
},
});
grunt.loadNpmTasks('grunt-aws-lambda');
grunt.registerTask('ls-deploy', ['lambda_package:lambdaTest', 'lambda_deploy:lambdaTest']);
};
ステップ6:awsCredentials.js
を作成
カスタムポリシーを使用してAWS IAMユーザーを作成します。カスタムポリシーにはlambda:GetFunction
、lambda:UploadFunction
、lambda:UpdateFunctionCode
、lambda:UpdateFunctionConfiguration
およびiam:PassRole
へのアクセス権が必要です
{
"accessKeyId": "XXXXXXXXXXXXXXXXXXXX",
"secretAccessKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
ステップ7:Zipを作成し、AWS Lambdaにデプロイします。
ls-deploy
は、上記のGruntfileで作成されたカスタムタスクで、ソースコードのZipを作成してLambdaにデプロイします。
grunt ls-deploy
完全 AWS Lambda Seed プロジェクトは Git。 で利用可能