質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

4648閲覧

aws lambda の書き方について教えてください

blossan

総合スコア154

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2016/12/09 02:32

編集2016/12/09 03:28

御世話になります。

aws の lambda という関数を登録できるサービスを調べています。
このサービスを利用したいと考えていますが、その書き方について疑問があり、質問させて頂きます。
lambdaでは、java,node.js,pythonという言語で登録します。
少し調べたところ、例えば、node.js の lambda の書き方のアナウンスでは、

node.js

1exports.myHandler = function(event, context,) { 2 ... 3}

という書き方でお願いしますと記載されています。
これは、node.js特有の書き方ではないということでしょうか?

lambdaでnode.jsの言語を選択し登録する際は、lamdba特有の書き方でないといけないと考えています。

しかし、別サイトでは、ローカルで起動したものをzipで保存してアップロードしている記事もありました。
zipで上げることで、lambda特有の書き方を回避できるのでしょうか?

lambdaに詳しい方いらっしゃいましたら、教えて頂きたいと思います。

補足になります
node.jsだとこのような書き方で、lambdaで同じ内容だとこのような書き方というソースを頂けると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

まず、このコードの書き方はnode.jsを普通に使っていても出てくる書き方です。

Lambdaで指定した関数が呼び出される際には、イベントデータ、ランタイム情報を引数とするので、
event, context の2引数を宣言しておいてくださいという以上の意味はないです。

コンソールでコードを書く場合と、zipファイルをアップロードする場合の違い

しかし、別サイトでは、ローカルで起動したものをzipで保存してアップロードしている記事もありました。
zipで上げることで、lambda特有の書き方を回避できるのでしょうか?

やや雑な説明になりますが、
AWS Lambda利用時に指定するHandlerに指定する必要があります。
(例:index.myHandler)

このうち、indexがモジュール名、myHandlerが関数名です。

AWSコンソールでコードを編集していた場合は自動的にindex.jsというファイルとみなされて、
モジュールがindexとなります。
その中で定義済みの関数と組み合わせてHandlerを指定することになります。

zipファイルでアップロードされた場合、zip内部のファイル名とその内部で定義された関数を指定することになります。
例えば

  • index.js
  • myFunc.js

みたいに複数のファイルが含まれていており、myFunc.js内にあるmyHandlerを指定したい場合は、
HandlerにmyFunc.myHandlerと設定することで該当の関数が呼び出されます。

もちろん、zipファイル内にあるjsファイルも同じ関数の書き方が必要になります。
冒頭の通り、回避という言い回しはちょっと相応しくないのですが、「コンソールでの定義方法をしないでもいいのか」
という意味合いでは「回避できない」ということにはなります。

投稿2016/12/09 03:31

attakei

総合スコア2738

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

blossan

2016/12/09 03:39

回答ありがとうございます。lambdaで起動する場合は、直接書き込む方法もzipでアップロードする方法もlambda対応になり、直接書き込む方が少し簡略できるということでしょうか?
attakei

2016/12/09 03:50

1ファイルで完結するようなケースであれば、わざわざzipファイルを用意することもないかなとは思います。 自分が想定しているケースだと「複数の呼び出し関数をまとめて管理したい」「外部のパッケージを使いたい」時はzipファイルを用意するイメージですね。
blossan

2016/12/09 03:53

ありがとうございます。最後にお聞きしたいことがあります。サンプルで紹介した【exports】というのは、仮のモジュール名という認識でよろしいでしょうか?
attakei

2016/12/09 04:13

モジュール名という位置付けではないですね。その関数などを外部参照できるようにするためのものです。 (exportsがない状態で定義すると、呼び出せなくなったと思います) この辺りが参考になります - http://www.yoheim.net/blog.php?q=20150101 - http://nodejs.jp/nodejs.org_ja/docs/v0.10/api/modules.html#modules_the_module_object - http://kaworu.jpn.org/javascript/node.js%E3%81%A7%E9%96%A2%E6%95%B0%E3%82%92export%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
blossan

2016/12/09 04:35

丁寧な回答ありがとうございました。
guest

0

申し訳ありません。node.jsは使ったことないのですが、Cloud WatchのアラートをLambdaを使って、チャットワークへ転送する実装例となります。実際、こちら実装してます。
ご参考までに、何卒宜しくお願い致します。

▼ AWS Lambda を使用して、Chatworkに通知する
http://hiro-sa.hatenablog.com/entry/2015/10/16/182541
▼ AWS Lambda を使用して、Chatworkに通知する その2
http://hiro-sa.hatenablog.com/entry/2015/10/20/173723

投稿2016/12/09 02:46

pond

総合スコア350

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問