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

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

新規登録して質問してみよう
ただいま回答率
85.48%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

AWS(Amazon Web Services)

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

Q&A

1回答

1174閲覧

Lambda関数からLambda関数を呼び出した際の変数の受け渡しについて

k.t.est

総合スコア49

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

AWS(Amazon Web Services)

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

0グッド

2クリップ

投稿2019/05/24 09:43

編集2019/05/27 05:08

Lambda関数からLambda関数を呼び出す際に、invokeでパラメーターを渡した場合、呼び出される側ではそのパラメーターをどのようにして受け取ることが出来ますでしょうか?
ご教示頂ければ幸甚です。
$_POSTや$_GETでは受け取ることが出来ませんでした。

変数の受け渡しがない場合、例えばphp側で echo "test";とすると問題なく、呼び出し側でresponse(test)を受け取ることが出来ました。

呼び出し用のLambda関数 : 言語 node.js

node.js

1var aws = require('aws-sdk'); 2 3exports.handler = (event, context, callback) => { 4 5 var innerEvent = {}; 6 7 // 親イベントが受け取った情報をそのまま子に渡す(eventをそのまま渡すとコケる場合がある)※詳細は未調査 8 innerEvent.body = event.body || {}; 9 innerEvent.headers = event.headers || {}; 10 innerEvent.queryStringParameters = event.queryStringParameters || null; 11 innerEvent.pathParameters = event.pathParameters || null; 12 innerEvent.requestContext = event.requestContext || null; 13 innerEvent.body = event.body || {}; 14 innerEvent.exampleData = { "var1" : "data001" }; // 親が受け取ったデータ以外の情報を追加で渡す場合 15 innerEvent = JSON.stringify(innerEvent); 16 17 var lambda = new aws.Lambda({apiVersion: '2015-03-31'}); 18 var params = { 19 FunctionName: "sample_php", 20 InvocationType: "Event", // 非同期呼出 21 //InvokeArgs: 22 //InvocationType: "RequestResponse", //同期呼出 23 Payload: JSON.stringify({ 24 "key_1": 'var_A', 25 "key_2": 'var_B', 26 "key_3": 'var_C' 27 }), 28 }; 29 30 lambda.invoke(params, function(err, data){ 31 if(err) { 32 context.done(err, err); 33 } else { 34 // 子から受け取ったレスポンスをそのまま返す 35 var result = { "statusCode" : 502 }; 36 var childRes = data.Payload || data || {}; 37 if (childRes && typeof(childRes) === "string"){ 38 childRes = JSON.parse(childRes); 39 } 40 if (childRes.statusCode) { 41 result.statusCode = childRes.statusCode; 42 } 43 if (childRes.headers) { 44 result.headers = childRes.headers; 45 } 46 if (childRes.body) { 47 result.body = childRes.body; 48 } 49 console.log("data: "); 50 console.log(data); 51 console.log("result: "); 52 console.log(result); 53 callback(null, result); 54 } 55 }); 56}; 57

呼び出されるLambda関数 : 言語 php

php

1//受け取った変数をそのまま返す 2<?php 3function hello($eventData) : array 4{ 5 return $eventData; 6}

#結果
START RequestId: 9f28b8cc-91ba-4fa1-ab72-d63d6b220a56 Version: $LATEST
2019-05-27T05:06:48.703Z 9f28b8cc-91ba-4fa1-ab72-d63d6b220a56 INFO data:
2019-05-27T05:06:48.703Z 9f28b8cc-91ba-4fa1-ab72-d63d6b220a56 INFO { StatusCode: 202, Payload: '' }
2019-05-27T05:06:48.703Z 9f28b8cc-91ba-4fa1-ab72-d63d6b220a56 INFO result:
2019-05-27T05:06:48.703Z 9f28b8cc-91ba-4fa1-ab72-d63d6b220a56 INFO { statusCode: 502 }
END RequestId: 9f28b8cc-91ba-4fa1-ab72-d63d6b220a56

#参考サイト
https://www.magata.net/memo/index.php?AWS%20Lambda%A4%AB%A4%E9Lambda%A4%F2%B8%C6%A4%D6
https://github.com/stackery/php-lambda-layer

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

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

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

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

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

guest

回答1

0

イベントで渡しイベントで受け取ります。
そのまま返すなら以下となります。

php

1<?php 2function hello($eventData) : array 3{ 4 return $eventData; 5}

投稿2019/05/27 04:17

moonphase

総合スコア6621

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

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

k.t.est

2019/05/27 05:06

ご回答有難う御座います。 こちらをそのまま入力したのですが、結果は変わらず取得できませんでした。どこが悪いのでしょうか? 結果文を追加致します。どうぞよろしくお願い申し上げます!
moonphase

2019/05/28 00:23

ドキュメントを色々見ていますが、PHPでの良い例が見当たらず申し訳ありません。 また色々みてみてヒントになりそうなものがあれば追記します。
k.t.est

2019/05/28 00:44

有難う御座います!引き続きどうぞ宜しくお願い申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問