#author("2023-02-13T21:45:55+00:00","default:hotate","hotate")
#author("2023-06-04T00:26:33+00:00;2023-02-13T21:45:55+00:00","default:hotate","hotate")
#contents
&tag(AWS, Lambda);
&tag(AWS,Lambda);

* 情報 [#n56f8338]
- [[[AWS]知っておいたほうがいいLambda関数の呼び出しタイプとリトライ方式まとめ | DevelopersIO>https://dev.classmethod.jp/cloud/aws/lambda-idempotency/]]
 Lambda関数の呼び出しタイプがあり、この呼出しタイプによりリトライ方式が変わってきます。

** [[2023]]年 [#r1da6e35]
- [[これからは「FaaS」だ、AWS Lambda最新事例 | 日経クロステック(xTECH)>https://xtech.nikkei.com/atcl/nxt/column/18/02355/]]
 開発者がサーバーを管理する必要の無いサーバーレスの環境で、プログラムを実行する「FaaS(ファンクション・アズ・ア・サービス)」

* [[リファレンス]] [#bf5dae4d]
- [[update-function-code — AWS CLI 2.4.7 Command Reference>https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-code.html#]]
 Updates a Lambda function’s code.

* [[Node.js]] [#f7693488]
- [[Programming Model (Node.js) - AWS Lambda>http://docs.aws.amazon.com/lambda/latest/dg/programming-model.html]]
 AWS Lambda currently supports the following Node.js runtimes:
 Node.js runtime v4.3 (runtime = nodejs4.3)
- [[Lambda Function Handler (Node.js) - AWS Lambda>http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html#nodejs-prog-model-handler-callback]]
 callback();     // Indicates success but no information returned to the caller.
 callback(null); // Indicates success but no information returned to the caller.
 callback(null, "success");  // Indicates success with information returned to the caller.
 callback(error);    //  Indicates error with error information returned to the caller.
- [[初めてのJavaScript、初めてのAWS Lambda | Developers.IO>http://dev.classmethod.jp/cloud/aws/1st-javascript-1st-lambda/]]
 以下のようにlambdaスクリプトと外部モジュールディレクトリを指定してzip化します。
 $ zip -r myfunc.zip index.js node_modules
- [[AWS Lambdaのための関数のローカル開発とテスト - Qiita>https://qiita.com/imaifactory/items/092e32b4fc0f69a94061]]
 event: 実際に渡ってくるイベントのデータ(S3のアップデートとかKinesisのレコードとか)。
 context: Lambda functionの呼び出しコンテキスト。
- [[AWS Lambdaの関数をnpmでパッケージ管理 - Qiita>https://qiita.com/imaifactory/items/ac81b4a3ff4a5f5dec85]]
 ということで、何をやってきたかをまとめてみると、以下のようなステップを実現してみようぜという話でした。
 ローカルで開発
 npm testでユニットテストやLintを走らせる
 npm buildでパッケージ(Lambda用のzipファイル)のビルド
 npm initLambdaでLambda用の設定ファイルを作る
 npm publishでLambdaにアップロード
- [[AWSのLambdaでasync / awaitを使う - Qiita>https://qiita.com/m__ike_/items/fbecc84658212653f309]]
 実際にasync / awaitが威力を発揮するLambda特有のコードの例を3つ取り上げます。


** 環境変数 [#af90a3b3]
- [[AWS Lambdaのタイムゾーン変更 - Qiita>https://qiita.com/nullian/items/39ecf1f6d0194b72e8e6]]
 nvironment variables の Key と Value にそれぞれ TZ・Asia/Tokyo と入力すれば良いみたいです。


** バージョン [#w00e1fc4]
- [[[アップデート] AWS Lambdaが Node.js 18をサポートしました | DevelopersIO>https://dev.classmethod.jp/articles/aws-lambda-support-node-js-18/]] (2022/11/19)
 Lambdaがサポートするランタイムに Node.js 18 が加わりました
- [[【アップデート】LambdaのランタイムにNode.js 14が利用可能になりました | DevelopersIO>https://dev.classmethod.jp/articles/lambda-support-node14/]] (2021/2/14)
 LambdaのランタイムとしてNode.js 14.xが利用可能になりました。Node.js 14はNode.jsの最新のLTSリリースであり、2023年4月までセキュリティ&バグフィックスがサポートされます。
- [[【アップデート】 LambdaでNode.js v10が利用できるようになりました!! | DevelopersIO>https://dev.classmethod.jp/cloud/aws/lambda-support-nodejs-v10/]] (2019/5/14)
 本日のアップデートにより、LambdaでNode.js v10が利用できるようになりました。
 現在主流であろうNode.js v8も今年中にはEOLを迎える予定です。
- [[【注意喚起】AWS LambdaでNode.js 6.10ランタイム構成の新規作成/更新が終了となります | DevelopersIO>https://dev.classmethod.jp/cloud/aws/eol-for-node-js-610/]] (2019/3/28)
 2019/4/30に予定されているNode.js 6.xのEOLに伴い、AWS Lambdaでの
 - Node.js 6.10のランタイムを指定しての新規作成は、2019/4/30で終了
 - Node.js 6.10のランタイムを指定した関数の更新は、2019/5/30で終了
 - 但し、既存のNode.js 6.10のランタイムを指定した関数の呼び出しは引き続き可能
- [[[新機能]AWS LambdaがNode.js v8.10をサポートしました | Developers.IO>https://dev.classmethod.jp/cloud/aws-lambda-nodejs8-support/]] (2018/4/3)
 一番の変更点はasync/awaitパターンが使えるようになったことでしょう。
- [[AWS LambdaでNode.js v6.10がサポートされました | Developers.IO>http://dev.classmethod.jp/cloud/aws/lambda-node-js-v6-10-support/]] (2017/3/23)
 Node.js v4.3	2016/04/07	現在の主流。
 Node.js v6.10	2017/03/22	New!
- [[AWS Lambda のNode.js が4.3.2 になった - うさぎ駆動開発>http://aile.hatenablog.com/entry/2016/04/11/211558]]
 contextオブジェクトの仕様変更


* 連携 [#p660170c]
** [[Lambda]]呼び出し [#m8c175a3]
- [[[AWS] Lambda から Lambda を呼ぶ | memo.dogmap.jp>https://memo.dogmap.jp/2015/03/12/aws-lambda-invoke-async/]]
 小さい機能単位で Lambda ファンクション作って、それを呼ぶ感じで作っていくとやりやすい。
- [[[AWS Lambda] invokeAsync ではなく invoke を使おう - Qiita>https://qiita.com/longtime1116/items/51aebf5e2ce56b91ae7b]]
 invokeAsync のリファレンスを見ると、↓のように書かれている。
 This API is deprecated. We recommend you use Invoke API (see Invoke).
- [[Lambda(Node.js)をES2015のPromiseを使って今っぽく書いてみる | DevelopersIO>https://dev.classmethod.jp/server-side/lambda-with-es2015promise/]]
 あるLambdaから別のLambdaを非同期で実行する部分をPromiseを使って書きなおしてみます。
- [[AWS Lambda内から他のLambda関数を同期的に呼び出すサンプル (Node.js) - キリウ君が読まないノート>https://note.kiriukun.com/entry/20190117-synchronously-invoke-other-lambda-from-lambda]]
 // 呼び出される側のLambda関数を同期的に実行する
 const result = await lambda.invoke(params).promise();	
 // 結果のPayloadにレスポンス内容がJSON文字列で入ってるので、取り出してパースする
 const body = JSON.parse(result.Payload);

** Amazon [[DynamoDB]] [#j854a3c8]
*** Streams [#s2850120]
- [[AWS Lambda と Amazon DynamoDB Streams を連係する | Developers.IO>http://dev.classmethod.jp/cloud/aws/lambda-dynamodb-stream/]]
 Amazon DynamoDB Streams (以下 DynamoDB Streams) とは、先日発表された DynamoDB の新機能です。この機能を有効にすることで、DynamoDB のテーブルに対するすべての更新(Put, Update, Delete)が直近の24時間保持され、API 経由でアクセスできるようになります。
- [[取り寄せた本が届いたら DynamoDB Stream を元に Lambda 経由で Twitter に通知させる - ミームの死骸を待ちながら>http://hash.hateblo.jp/entry/20151205/1449320833]]
 DynamoDB の更新 Stream をイベントソースとして Lambda で一回だけ通知してくれるように改良する話を書く.
- [[DynamoDB Streamのデータをsocket.ioを使ってブラウザに流す - Qiita>http://qiita.com/horike37/items/8d513dbd2ad84aaf747d]]
 TwitterのストリームデータをKinesisを経由してDynamoDBに保存します。
 DynamoDB Streamにデータを流し、ブラウザでストリームデータを可視化する。


* 事例 [#ie14bc73]
** [[LINE]] [#jf755bed]
- [[LINE Notify を AWS Lambda (Node.js) から利用してみた - Qiita>http://qiita.com/hkusu/items/75aca4e92eaf02c00db5]]
 Lambda を利用することで、自分にサーバを持たずにボットを運用することができます(いわゆるサーバレス)。

* API Gateway(プロキシ統合) [#b2d57147]
- [[API Gatewayの「Lambda プロキシ統合の使用」オプション - Qiita>http://qiita.com/yoshidasts/items/8a31280a6331b6407c73]]
 これを使えば、HTTPヘッダーの情報がそのままLambdaに伝わるのでは!?
- [[Amazon API Gatewayが非常に便利なHTTPプロキシとして進化したらしいので使ってみた - Qiita>http://qiita.com/seiya_orz/items/4e9d8c62739399b076b7]]
 今回はeventの中身を見たかったのでeventをbodyとして出力するようにしました。
- [[AWS Lambda Proxy Integrationを試してみた - Qiita>http://qiita.com/seiya_orz/items/2bd83204e212e35b2c6c]]
 POSTの場合、bodyの中身はオブジェクトではなくStringで渡される

** POST [#zed0bd09]
- [[HTMLフォームからAPIGatewayを使ってAWS LambdaにPOSTする - Qiita>https://qiita.com/satetsu888/items/40fc387735192b794da8]]
 この設定をしておけば、下記ようなフォームのPOSTリクエストが、良い感じにJSONにマッピングされてLambda functionを呼び出すことができます。


* デプロイ [#ab568ced]
** [[Makefile]] [#nbca4ffb]
- [[AWS LambdaのFunctionを開発するときのMakefile - c-bata web>http://nwpct1.hatenablog.com/entry/lambda-makefile]]
 LambdaだけならAWS CLIで十分簡単に操作出来るのでMakefileを用意してみました。

** [[AWS-CLI]] [#x87650dd]
- [[ステップ 2.3: Lambda 関数を作成する - AWS Lambda>https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-userapp-walkthrough-custom-events-upload.html]]
 $ aws lambda create-function \
 --region us-west-2 \
 --function-name helloworld \
 --zip-file fileb://file-path/helloworld.zip \
 --role role-arn \ 
 --handler helloworld.handler \ 
 --runtime nodejs6.10 \
 --profile adminuser 
- [[AWS CLI による Lambda Layer のアップデートについて - Qiita>https://qiita.com/qjuliar/items/019a315a1b9885a1b056]]
 調査中なので割愛しますが、アップデートする際に「LastUpdateStatus」という状態があり、これが「InProgress」になっているとアップデート(上書き)出来ないようになっており、このタイミングで「update-function-configuration」をかけて失敗したものと思っています。
- [[AWS Lambda関数の呼び出しがAWS CLI v2にアップデートすると失敗する | DevelopersIO>https://dev.classmethod.jp/articles/aws-cli-v2-blob-default-base64/]] (2021/05/24)
 バイナリパラメーター(blob)を指定する際にはBase64でエンコードしてね、ということです。lambda invokeの--payloadはblobで指定することになっています。

* 関連 [#k2fef376]
#related

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS