2017-03-07 13 views
3

私は既存のAWSラムダ関数を持っています。私はAWSコンソールでそれをテストし、うまくいきます。私のアプリケーションは自動的にS3バケットを作成しているので、バケットにトリガーを動的に追加する必要があります。AWS SDK PHPを使用してAWSラムダ関数にトリガーを追加するにはどうすればよいですか?

AWS SDK PHPのドキュメントでこれが見つかりません。 助けてください...

+0

あなたはコードを投稿できますか – zombie

答えて

0

ラムダ関数を呼び出すには、invokeメソッドを使用する必要があります。

$result = $client->invoke([ 
    'FunctionName' => 'MyFunctionName', // REQUIRED 
    'Payload' => 's3-bucket-name' 
]); 
1

私はあなたの質問を本当に理解していません。あなたがより多くの詳細を提供することは、応答になります。

S3はバケット作成時にイベントを公開しません。 S3には、バケット内のオブジェクト(PUT、POST、DELETEなど、GETではなく)のイベントがあります。

私が考えることができる唯一のサービスは、CloudTrailです。その後、すべてのAPIイベントをフィルタリングし、ラムダをバケット作成で呼び出す必要があります。 CloudTrailを有効にすることは良い考えであり、デフォルトですべての新しいAWSアカウントで有効になります。

バケットを作成した後、バケット内にオブジェクトを作成することができます。これはあなたのラムダ機能を引き起こす可能性があります。ただし、すべてのオブジェクト作成イベントに対してイベントを取得する場合と同様に、フィルタリングする必要があります。

おそらく、最良の解決策は、コードがバケットを作成した後にラムダを呼び出すところのJohn Veldboomの答えです。

注:バケットを動的に作成しています。 AWSアカウントごとに100バケットの制限があります(これは増やすことができます)。あなたのデザインがバケツをたくさん作っていないことを願っています。より良い方法は、バケット内にフォルダを作成することです。

0

あなたが探している機能はcreateEventSourceMapping()です。

S3バケットを作成したら、この関数を呼び出して、新しいS3バケットからラムダ関数へのマッピングを追加できます。

パラメータを手助けするには、getEventSourceMapping()またはlistEventSourceMappings()を使用して、機能に対する既存のイベントソースマッピングを確認してください。

0

あなたが達成しようとしていることはあなたの質問からは分かりません。

あなたが非同期的にcreateBucketメソッドを呼び出し、ことができ、その後invokeそのための具体的なトリガ・イベントが存在しない場合は、SDKを使用してラムダ関数:

$client->createBucketAsync([/* ... */])->then(
    function($success_response) { 
     $client->invoke(
     'FunctionName' => 'λ_Name', 
     'InvocationType' => 'Event', 
     'Payload'  => json_encode($some_data) 
    }, 
    function($error) { 
     // something went wrong see $error 
    } 
); 

バケットた後にラムダ関数をトリガーします正常に作成されました。

関連する問題